inetd
inetd(アイネットディー)は、多くのUNIXシステムで採用されたインターネットサービスを管理するスーパーサーバ型デーモンである。InternetDaemonの略。4.3BSDで初めて採用され、通常/usr/sbin/inetd にある。 後継のスーパーサーバ型デーモンとしては、xinetdがある。 inetd登場以前は、1台のサーバで複数のサービス(FTPサーバ、TELNETサーバ等)を稼働させておくには、それぞれのサービスのデーモン(ftpd、tftpd等)を起動しておき、それぞれのデーモンが、それぞれの待ち受けポートを監視する - というスタイルだった。しかし、この方法では、監視するポートの数だけデーモンが起動していることとなるため、実際にそのサービスが利用されていない時には、実質、メモリの無駄遣いということとなる。そこで、待ち受けポートを監視する専用の中継デーモンを用意し、待ち受けポートに要求がきた時には、あらかじめ決められたデーモン(ftpd、tftpd等)を起動させるという動作が用意されるようになった。 メリット
メモリの浪費解消
デメリット
inetdが中継動作することとなるので、動作レスポンスが遅れる。
そのため、httpd等はinetdを経由させず、常時起動させておくことが多い。 inetdは、FTP、POP3、telnet といったインターネットサービスが使うポート番号を(指定されて)監視する。監視対象のポートにTCPパケットあるいはUDPパケットが届くと、inetdは対応するサーバプログラムを起動し、コネクションを制御させる。この方式では、必要にならない限りサービスが起動されないため、メモリ利用効率がよい。さらに、個々のサーバデーモンはソケットが標準入出力および標準エラー出力にフックされた状態で起動されるため、ネットワークに関するコードを必要としない。トラフィックの多いHTTPやPOP3などのプロトコルでは、直接トラフィックを受け付ける専用サーバの方が望ましい(頻繁にサーバプロセスを起動する無駄を避けるため)。 ポート番号とサービス名の対応付けは/etc/servicesというファイルで行われ、サービス名とサーバ名の対応付けは/etc/inetd.conf というファイルで行われる。 これによると、inetdは/usr/sbin/telnetdというプログラムをtelnetd -aという引数付きで起動する。inetdは標準入出力および標準エラー出力をソケットにフックした状態でサーバプログラムを起動する。
echoなどの単純なサービスはinetd自身が扱い、別にサーバを起動することはない。 inetdが提供するサービスは完全に切捨て可能である。これは、マシンを単機能サーバとする場合によく使われるようになりつつある。例えば、HTTPサーバは、httpdだけを起動するよう設定し、他のポートを全くオープンしないようにできる。ファイアウォール専用マシンは全くサービスを起動しないようにできる。 サービスディスパッチャとしてのinetdはセキュアでないというわけではないが、inetdが提供するサービスの長いリストはセキュリティ専門家でも正しく保つのが難しい。サービスに潜在的なセキュリティ問題がある可能性などを考慮する必要がある。このため不要なサービスをデフォルトではOFFにしておくのが一般化している。/etc/inetd.confのほぼ全てのサービスがコメントアウトされたディストリビューションも珍しくない。