著者: Rob Braun
日本語訳: yomoyomo
A. xinetd は inetd の代わりになるもので、インターネットサービスのデーモンです。
Q. 僕はシステム管理者じゃないんだけど、inetd の代わりになるものについて、僕が何か注意することってあるの?
A. xinetd は、単なる inetd の代わりではありません。xinetd だと、設定ファイルで指定するサービスが、/etc/services のリストにあるものである必要がないので、誰もが xinetd を利用して、特権ポート(privileged port)を必要としないサーバを起動することができるようになります。
A. いいえ、設定ファイルは inetd の設定ファイルとフォーマットが違いますし、異なる命令を扱います。しかし、命令と動作の割り当ては変更可能ですし、inetd.conf を xinetd.conf に変換するプログラムが収録されています。
A. なぜってそれが inetd よりもかなり優れものだから(私見によれば)。以下に根拠を挙げておきます。
(i、ii、そして iii については、失敗したログインアクセスについても記録可能)
Q. 誰に対してこのプログラムの感謝/文句を言うべきなのかな?
A. 元々は panos@cs.colorado.edu がこのプログラムを書いたのですが、現時点では僕がバグレポートをさばいています。
Q. xinetd のバージョン 2.2.1 はどうしたのですか?
A. xinetd の最も最近に出たオリジナルバージョンは、2.1.1で、これにパッチをあてて2.1.8に上げることができました。Nick Hilliard が、Panos により作られたが公開されなかった xinetd 2.2.0 を基にせずに 2.2.1 を作りました。xinetd に関する著作権は、xinetd の公式リリース版(この場合、2.1.8)であるのに必要なバージョンを特定し、四番目のバージョン番号が修正レベルを示すために付くことになりました。これは僕が採用したバージョン表記法です。ここで入手可能な xinetd 2.1.8.X は、xinetd 2.2.0 やそれ以降のバージョンのものを基にしていません。僕は xinetd-2.2.1 に入っている機能の一部を再実装はしていますが、xinetd 2.1.8.X は、xinetd 2.1.8 のコードベースから作られたものです。
A. xinetd のソースは、http://www.synack.net/xinetd から入手可能。
Q. qmail を xinetd と協調して動かすことは可能なの?
A. はい、以下に qmail 用のエントリ情報を書いておきます
service smtp { flags = REUSE NAMEINARGS socket_type = stream protocol = tcp wait = no user = qmaild server = /usr/sbin/tcpd server_args = /var/qmail/bin/tcp-env -R /var/qmail/bin/qmail-smtpd } Contributed by: Anthony Abby
この手法により、環境変数やその他もろもろを /etc/hosts.allow に設定できます。xinetd は libwrap と一緒にコンパイルできますが、それは xinetd が tcpd の機能を完全に置き換えることが可能であるということではありません。xinetd は host_access() をコールしますが、これは host_access(5) の man ページに記述されているアクセス制御を実行するものです。これは tcpd により提供される機能のサブセットです。
A. 僕が動かした分では、Solaris 2.6 (sparc と x86)、Linux、BSDi、そして IRIX 5.3 と 6.2。オリジナルのパッケージは、SunOS 4 と Ultrix 上で動きました。
Q. あるサービスについて、chroot 環境を設定する方法はある?
A. 以下に設定ファイルに入れるエントリ情報を示しておきます。
service telnet_chroot { log_on_success = HOST PID DURATION USERID log_on_failure = HOST RECORD USERID no_access = 152.30.11.93 socket_type = stream protocol = tcp port = 8000 wait = no user = root server = /usr/sbin/chroot server_args = /var/public/servers /usr/libexec/telnetd } Contributed by: lburns@sasquatch.com
itox は標準入力から普段使用している inetd.conf を読みこみ、標準出力に xinetd.conf を吐き出します。通常、以下のようにコマンドを使用します。
itox < /etc/inetd.conf > /etc/xinetd.conf
もしあなたのところの inetd.conf が各デーモンの明示的なパスを設定してないなら、-daemon_dir オプションを利用しないといけません。全てのデーモンが /usr/sbin にあると仮定すると、コマンドは以下のようになります。
itox -daemon_dir=/usr/sbin < /etc/inetd.conf > /etc/xinetd.conf
itox はやや古く、しばらくアップデートされていません。xconv.pl が、より最近の inetd.conf ファイルを変換するのに良い perl スクリプトです。その使い方は、itox と同様です。
Q. xinetd は libwrap (tcpwrappers) をサポートしているの?
A. はい、xinetd は configure スクリプトを --with-libwrap をオプションにして走らせることで、libwrap をサポートするようにコンパイルできます。xinetd が libwrap をサポートするようにコンパイルされる場合、全てのサービスで /etc/hosts.allow と /etc/hosts.deny によるアクセス制御を利用できます。xinetd はまた、伝統的な inetd スタイルで tcpd を利用するよう設定することも可能です。それには NAMEINARGS フラグの利用する必要があって、実際のデーモンの名前は、server_args パラメータにより渡されます。以下に tcpd から telnet を利用する場合の例を示しておきます。
service telnet { flags = REUSE NAMEINARGS protocol = tcp socket_type = stream wait = no user = telnetd server = /usr/sbin/tcpd server_args = /usr/sbin/in.telnetd }
A. はい、xinetd は configure スクリプトに --with-inet6 オプションを付けて走らせてからコンパイルすることで、IPv6 をサポートするようにできます。その場合アクセス制御が IPv6 で機能します。あなたはアクセス制御をするのに ipv4 にマッピングされたアドレスを利用するか、通常のドットで区切られた IPv4 アドレスを与えることができ、またそうすれば、xinetd はそのアドレスを IPv6 アドレスにマッピングします。
Q. どのサービスも IPv6 では動かないぞ! どうしてなの?
A. IPv6 サポートを入れるようにコンパイルする場合、全てのソケットは IPv6 用ソケットになります。もしあなたのカーネルが、IPv6 ソケットの何たるかを理解しなければ、ソケットを作成しようとすると全て失敗してしまいますので、どのサービスも起動しません。つまり、あなたの利用しているカーネルが IPv6 をサポートしている場合にだけ、IPv6 サポートをオンにして xinetd をコンパイルするようにしてください。
A. デフォルトでは、xinetd はグループのパーミッションをサーバのプロセスに対して許可せず、子プロセスのグループを nothing にすることでパーミッションを許可します。一部の BSD では、これで問題が発生します。このエラーを回避するには、「groups = yes」というディレクティブをあなたが利用したいサービスに入れてください。これにより、サーバプロセスは、全てのグループ特権を、サーバプロセスが稼動しているユーザに与えます。
Q. どうして Linux だと普通、telnetd が起動しないわけ?
A. 一部の Linux ディストリビューションでは、telnet デーモンは非特権ユーザとして起動しますが、そのユーザは telnet デーモンが新しい tty を開き、utmp を更新することができるグループに属します。デフォルトでは、xinetd はグループパーミッションをサーバプロセスに許可しないので、telnetd は当然起動に失敗することになります。サーバプロセスが適当なグループを持つようにさせるには、telnet サービスについては、「groups = yes」というディレクティブを利用してください。これは、xinetd にサーバプロセスが、ユーザが利用するすべてのグループで起動できるように指定します。
Q. xinetd を使って、SSL でサービスを包むにはどうするの?
A. stunnel プログラムを利用して、SSL でサービスを包んでください。これは実際には、inetd を利用することも可能です。
Q. xinetd で CVS サーバを立ち上げるにはどうするの?
A. あるユーザが、以下の書き方を提案してくれました。
cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/pauljohn/cvsroot --allow-root=/home/pauljohn/cvsmisc pserver
もしあなたが xinetd の元で同じ動作を実現したいなら、/etc/xinetd.d の中に cvspserver という名前の設定ファイルをセーブすることになります(最後の行で、あなたのレポジトリの名前を指定します)。
service cvspserver { socket_type = stream protocol = tcp wait = no user = root passenv = server = /usr/bin/cvs server_args = --allow-root=/home/pauljohn/cvsroot --allow-root=/home/pauljohn/cvsmisc pserver }
他の CVS 設定もすべて同様になります。僕の知る限り、これで動いてくれるようです。
以上の文章は、Rob Braun による xinetd FAQ の日本語訳である。