inetd(インエトディー)とは | 意味や読み方など丁寧でわかりやすい用語解説
inetd(インエトディー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
インエトディー (インエトディー)
英語表記
inetd (インエットディー)
用語解説
inetdは「Internet services daemon」の略称であり、「インターネットスーパーサーバー」や単に「スーパーサーバー」とも呼ばれるUNIX系オペレーティングシステム(OS)のプログラムである。その主な役割は、ネットワーク経由で提供される様々なサービス(デーモン)を集中管理し、クライアントからの接続要求があった場合にのみ、対応するサービスを起動することにある。通常、システム上で動作するネットワークサービス、例えば遠隔ログインのためのTelnetやファイル転送のためのFTPなどは、それぞれ専用のデーモンプログラムが常にメモリ上に常駐し、クライアントからの接続を待ち受けている。しかし、利用頻度が低いサービスまで常時起動させておくと、たとえ通信が行われていなくてもシステムのリソース(メモリやCPU)を消費し続けてしまう。特に、コンピュータの性能が限られていた時代において、リソースの無駄遣いはシステムのパフォーマンス全体に影響を及ぼす深刻な問題であった。inetdは、このような非効率を解消するために開発された。inetd自身が単一のデーモンとして常駐し、複数のネットワークサービスの代理として、それらのサービスが使用するポートをまとめて監視する。そして、いずれかのポートに接続要求が来たことを検知すると、その要求に対応する本来のサービスデーモンを初めて起動し、通信処理を引き継がせる。通信が終了すれば、起動されたデーモンは終了し、リソースは解放される。このように、inetdはオンデマンドでサービスを起動する仕組みを提供することで、システムリソースの効率的な利用を実現する。
inetdの具体的な動作メカニズムは、システム起動時の初期化処理から始まる。inetdが起動すると、まず設定ファイルである/etc/inetd.confを読み込む。このファイルには、inetdが管理対象とするサービスの一覧が一行ずつ記述されている。各行には、サービス名、ソケットの種類(ストリーム型かデータグラム型か)、使用プロトコル(TCPかUDPか)、実行ユーザー、そして実際に起動するサーバープログラムのフルパスと引数といった情報が含まれている。inetdは、この設定内容に従って、指定されたすべてのポートで接続を待ち受ける状態に入る。クライアントアプリケーションがサーバーの特定のポートに接続を試みると、その要求はまず待ち受けているinetdによって検知され、受け付けられる。次にinetdは、そのポート番号に対応するサーバープログラムを起動するために、自身のプロセスを複製(fork)する。複製された子プロセスは、設定ファイルで指定されたサーバープログラム(例えばtelnetdやftpd)を実行(exec)する。このとき、inetdはクライアントとの間に確立した通信経路、すなわちソケットを、新しく起動したサーバープログラムの標準入力、標準出力、標準エラー出力に割り当てる。これにより、サーバープログラム側は複雑なネットワーク処理を意識することなく、あたかも標準入出力を介して対話するようにクライアントとの通信が可能となる。通信が完了し、クライアントが接続を切断すると、サーバープログラムはその役割を終えて終了する。親プロセスであるinetdは、その間も他のポートの監視を続けており、一つのサービスの処理が完了した後も、再び次の接続要求を待つ。また、inetdはセキュリティ管理の一元化にも貢献する。TCP Wrapperと呼ばれるtcpdプログラムと連携することで、接続元のIPアドレスに基づいたアクセス制御を容易に実現できる。inetd.conf内でサーバープログラムを直接指定する代わりにtcpdを指定すると、全ての接続要求はまずtcpdによって検証される。tcpdはアクセス制御リスト(/etc/hosts.allowと/etc/hosts.deny)を参照し、許可された接続のみを本来のサーバープログラムに引き渡す。これにより、個々のサービスデーモンに手を加えることなく、システム全体のネットワークアクセス制御を一箇所で管理できる。しかし、inetdはリクエストごとにプロセスを生成するため、頻繁にアクセスされるサービスにはオーバーヘッドが大きく、応答性能の面で不利になるという欠点がある。このため、現代のシステムでは、より高機能な後継実装であるxinetdや、Linuxで標準となったsystemdのソケットアクティベーション機能にその役割を譲ることが多くなった。それでも、リクエストに応じてサービスを動的に起動するというinetdの基本的な概念は、今日のシステムアーキテクチャを理解する上で依然として重要な基礎知識である。