は、起動時に以下のオプションを指定できます。
ホスト名指定が使用され、IPv4 および IPv6 両方のバインドを望む場合、 /etc/inetd.conf の各サービスに対して、 各バインドに対する適切な プロトコル のエントリが必要です。 例えば TCP ベースのサービスは 2 エントリが必要であり、 ひとつは プロトコル に ``tcp4'' を使用し、もうひとつは ``tcp6'' を使用します。 後で説明する /etc/inetd.conf の プロトコル フィールドを参照してください。
は実行時に設定情報を設定ファイルから読み込みます。 デフォルトでは設定ファイルは /etc/inetd.conf です。 設定ファイルの各フィールドにはエントリが 1 つなければなりません。 各フィールドのエントリはタブやスペースで区切ります。 コメントは行頭に ``#'' をつけます。 設定ファイルのフィールドは以下のものからなります:
サービス名 ソケットタイプ プロトコル {wait|nowait}[/最大子プロセス数[/IPあたりの分あたりの最大接続数[/IPあたりの子の数の最大]]] ユーザ名[:グループ名][/ログインクラス名] サーバプログラム名 サーバプログラム引数
ONC RPC ベースのサービスを記述する場合には、以下のエントリを記述します。
サービス名/バージョン ソケットタイプ RPC/プロトコル ユーザ名 サーバプログラム名 サーバプログラム引数
が起動することのできるサービスは 2 種類あります。 1 つは標準で、もう 1 つは TCPMUX です。 標準サービスには割り当てられた well-known ポートがあります。 これは公式のインターネット標準を実装したサービスや BSD 特有のサービスです。 RFC 1078 に書かれているように、TCPMUX は非標準サービスであり、 well-known ポートが割り当てられていません。 そういった非標準サービスは、あるプログラムが ``tcpmux'' well-known ポートに接続してそのサービス名を指定したとき、 によって起動されます。 この機能はローカルに開発されたサーバを追加するときに 便利です。 TCPMUX リクエストが受理されるのは、 TCPMUX ベースのサーバに至るまでにおいて、 マルチプレクササービス自身が有効にされているときのみです。 後述の内部サービスに関する議論を参照してください。
サービス名 のエントリには、 /etc/services ファイルに記述されているサービス名か、 UNIX ドメインソケット (後述) の指定が記述されます。 ``内部'' サービス (後述) については、 名前としてそのサービスのオフィシャル名 (すなわち /etc/services 内の最初のエントリ) を指定すべきです ONC RPC ベースのサービスを指定するためには、このフィールドは /etc/rpc に書かれた有効な RPC サービス名でなければなりません。 ``/'' の右の部分が RPC のバージョン番号です。バージョン番号は、 数字もしくは、バージョンの幅 (レンジ) で指定します。 幅を指定する場合は低い番号から高い番号を指定します。たとえば ``rusers/1-3'' のように記述します。 TCPMUX サービスでは、 サービス名 のフィールドは、文字列 ``tcpmux'' 、スラッシュ、そしてローカルに選ばれたサービス名から なります。 /etc/services に書かれたサービス名と ``help'' は予約済であり、ローカルなサービス名には使用できません。 TCPMUX サービスのためにユニークな名前をつけるには、 頭に組織名をつけ、末尾にバージョン番号をつけるとよいでしょう。
ソケットタイプ のエントリは、 ``stream'' ``dgram'' ``raw'' ``rdm'' ``seqpacket'' のいずれかである必要があります。それぞれ、ソケットが stream, datagram, raw, reliably delivered message, sequenced packet socket である場合に対応しています。 TCPMUX サービスは ``stream'' を使わなければなりません。
プロトコル のエントリには、 有効なプロトコル名か ``unix'' が記述されます。 例えば ``tcp'' や ``udp'' などです。 この場合、後方互換性のため、暗黙的に本エントリは IPv4 を意味します。 名前 ``tcp4'' ``udp4'' は、IPv4 のみを指定します。 名前 ``tcp6'' ``udp6'' は、IPv6 のみを指定します。 名前 ``tcp46'' ``udp46'' は、エントリに IPv4 とワイルドカード AF_INET6 ソケット経由の IPv6 の両方を受理させます。 サービスが T/TCP 経由で到達可能とするためには、 ``tcp/ttcp'' を指定する必要があります。 後方互換性のため、暗黙的に本エントリは IPv4 を意味します。 名前 ``tcp4/ttcp'' は、IPv4 のみを指定し、 名前 ``tcp6/ttcp'' は、IPv6 のみを指定します。 名前 ``tcp46/ttcp'' は、エントリに IPv6 とワイルドカード AF_INET6 ソケット経由の IPv6 の両方を受理させます。 RPC ベースのサービスの場合、 ``rpc/tcp'' や ``rpc/udp'' のような指定になります。 IPv4 と IPv6 を、4, 6, 46 のいずれかのサフィックスを使用して指定可能です。 例えば ``rpc/tcp6'' や ``rpc/udp46'' とします。 TCPMUX サービスは ``tcp'' ``tcp4'' ``tcp6'' ``tcp46'' のいずれかを使用する必要があります。
wait/nowait エントリは、 によって起動されたサーバがサービスアクセスポイントに 関連付けられたソケットを引き継ぐかどうか、すなわちサーバが終了するまで が新しいサービス要求を監視するのを待つ必要があるか否かを 指定します。 datagram サーバは、特定のサービスアドレスと結び付いた datagram ソケットで毎回起動されるため、 ``wait'' を使わなければなりません。こういったサーバは、終了する前に少なくとも 1 データグラムをソケットから読まなければなりません。 もし datagram サーバが相手に接続したときソケットを 解放するなら、 はソケットに対するメッセージをさらに受けることができます。 このようなサーバは ``マルチスレッド'' サーバと呼ばれます。 サーバはソケットから datagram を 1 つ読み込み、相手に接続する新しい ソケットをつくります。 サーバは fork() を行い、親プロセス側は終了しなければいけません。 これにより は新しいサービス要求をチェックし、新しいサーバを起動することが できるようになります。 入って来る全ての datagram を処理し、 時間切れまで動作する datagram サーバは、 ``シングルスレッド'' サーバと呼ばれます。 comsat(8), (biff(1) ) talkd(8) のユーティリティは、後者のタイプの datagram サーバの例です。 tftpd(8) ユーティリティは、マルチスレッドで動く datagram サーバの例です。
stream ソケットを使うサーバは一般にマルチスレッドで動き ``nowait'' エントリを使います。 こういったサーバへの接続要求は で受け付けられ、新たに受理し、クライアントにつながった ソケットのみがサーバに与えられます。 多くの stream ベースのサービスはこのように行われます。 ``wait'' エントリを使う stream ベースのサーバは、 サービスのソケットを監視し、少なくとも 1 つの接続要求を受け入れてから 終了しなければなりません。 そういったサーバは通常、時間切れとなるまで、入って来る要求を 受け付け処理します。 TCPMUX サービスは ``nowait'' を使わなければなりません。
``nowait'' サービスの子プロセス (あるいは ``スレッド'' ) の最大数は、 ``nowait'' キーワードの後に ``/'' と数字を付け加えることで指定できます。 通常 (あるいは 0 が指定された場合)、子プロセスの数に制限はありません。 一方、最大数に達すると、それ以降の接続要求は、存在する子プロセスが終了するまで 待ち行列に蓄えられます。これは、 ``wait'' モードでも同様ですが、通常は 1 (デフォルトの値) 以外は意味がありません。 指定した IP アドレスからの 1 分あたりの最大接続数を指定することも可能です。 この場合、 ``/'' および最大子プロセス数を指定します。 最大値に達した場合、指定した IP アドレスからの接続は、 この 1 分が経過するまで、落とされます。 さらに、単一 IP アドレスに対して同時起動可能な各サービスの最大数の指定が、 ``/'' に続けて未完了の子プロセスの最大数を追加することで可能です。 最大値に達した場合、指定した IP アドレスからの接続は、 落とされます。
ユーザ名 エントリには、サーバを実行するユーザ名を書きます。 これによりサーバを root よりも低い権限で実行できます。 オプションの グループ名 部分は ``:'' で分けられ、 このユーザのデフォルトグループ以外のグループ名を指定可能です。 オプションの ログインクラス名 部分は ``/'' で分けられ、 デフォルトの ``daemon'' 以外のログインクラス名を指定可能です。
サーバプログラム名 のエントリには、ソケットに要求があったとき が起動し、当該エントリのサービスを提供する サーバプログラムのパス名を指定します。 内部にすでに実装されているサービスを提供する場合には、サーバプログラムとして ``internal'' を指定します。
サーバプログラム引数 のエントリは、サーバを起動する際の引数を、サーバプログラムの起動文字列 である argv[0] を含めて記述します。 内部に実装されているサービスを提供する場合には、サーバプログラム引数 として、サービスの サービス名 (と引数) または語 ``internal'' を指定します。
現在、引数を取る内部サービスは ``auth'' のみです。 オプション無しだと、このサービスは常に ``ERROR : HIDDEN-USER'' を返します。 このサービスの動作を変更するために使用可能な引数は次の通りです:
ユーティリティはまた、内部ルーチンを用いて簡単なサービスを自身で提供します。 これらのサービスとは ``echo'' ``discard'' ``chargen'' (文字生成), ``daytime'' (人間が読む形式で時間を出力します), ``time'' (機械可読形式の時間。1900 年 1 月 1 日 0 時からの経過秒数を出力します) です。 これらのサービスは TCP と UDP バージョンのいずれでも利用できます。 UDP バージョンは返事のポートとして内部サービスに相当するポートを 要求されたとき、サービスを拒否します。 (これはループ攻撃に対する防護です。リモート IP アドレスは記録されます。) これらのサービスの詳細については適当な RFC ドキュメントを参照して下さい。
TCPMUX のデマルチプレクスサービスもまた内部サービスとして実装されています。 TCPMUX ベースのサービスを動作させるためには、以下の行を inetd.conf に含む必要があります:
tcpmux stream tcp nowait root internal
-l オプションが指定された場合、 は接続を受け付けるたび、エントリを syslog に記録します。 この際、利用可能であれば、 選択されたサービスと要求を発したリモートの IP 番号を記録します。 設定ファイルで他に指定しておらず、 -W と -w のオプションを指定していないと、 は ``daemon'' ファシリティに対してログ出力します。
SIGHUP を受けとると、 ユーティリティは、設定ファイルを再度読み込みます。設定ファイルを 再読み込みするとき、サービスを追加、削除、変更できます。 デバッグモードで起動された場合をのぞき、 は再設定を容易にするために、プロセス ID を /var/run/inetd.pid に記録します。
``wait'' サービスに対する要求は、 サービス要求に対するサーバが無い間のみ はラッピングすることに注意してください。 このようなサービスに対してひとたび接続が許されると、 接続要求に対して listen するサーバが無くなるまで、 このサービスに対する後続の接続を は制御できません。
ラッピングが有効にされた場合、この機能は組み込みであるため、 tcpd デーモンは不要です。
TCP Wrappers についての更なる情報は、関連する文書 (hosts_access5 ) を参照してください。 この文書を読むときには、 ``内部'' サービスに対しては、関連するデーモン名は無いことを覚えておいてください。 このような理由で、 ``内部'' サービスのデーモン名としては、 inetd.conf で指定されるサービス名を使用すべきです。
TCPMUX サービス名が ``+'' で始まっているとき、 は、プログラムに肯定返答 (+) を返します。 これによって、 特別なサーバコードを追加することなく 標準入出力を使うプログラムを起動することができます。
特別なサービス名である ``help'' により、 は inetd.conf にある TCPMUX サービスの一覧を出力します。
不正な IPsec ポリシ文字列が inetd.conf にあると、 は syslog(3) インタフェースを使用して エラーメッセージを残し、終了します。
":news:daemon:220:/var/run/sock"
という指定は、所有者が ``news'' でグループが ``daemon'' で所有者とグループのみに接続を許可するソケットを作成します。 デフォルトの所有者は、 を実行しているユーザです。 デフォルトのモードは、 ソケットの所有者のみに接続を許可するというものです。
警告 UNIX ドメインソケットの作成中に、 はソケットの所有者とパーミッションを変更する必要があります。 これが安全に行われるのは、 ソケットが作成されるディレクトリが root のみ書き込み可能な場合だけです。 を使用して、 /tmp 等の誰でも書き込み可能なディレクトリにソケットを作成し ない でください。 代りに、 /var/run 等のディレクトリと使用してください。
内部サービスは、通常通り、 UNIX ドメインソケットでも実行可能です。 この場合、ソケットのパス名の最後の部分から内部サービス名が判定されます。
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l ntalk dgram udp wait root /usr/libexec/ntalkd ntalkd telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd shell stream tcp46 nowait root /usr/libexec/rshd rshd tcpmux/+date stream tcp nowait guest /bin/date date tcpmux/phonebook stream tcp nowait guest /usr/local/bin/phonebook phonebook rstatd/1-3 dgram rpc/udp wait root /usr/libexec/rpc.rstatd rpc.rstatd /var/run/echo stream unix nowait root internal #@ ipsec ah/require chargen stream tcp nowait root internal #@
-R rate オプションを使うと、制限を変えることができます。 制限に達したとき、10 分経つとサービスは自動的に 再許可されます。