inetd(8) インターネット

書式

inetd [-di ] [-q queuelength ] [configuration file ]

説明

inetd は通常ブート時に /etc/rc.local によって起動される ( rc(8) を参照)。(訳注: ディストリビューションによって異なる)。 使用している init(8) が任意のデーモンを再起動できる場合、 inetd は (/etc/rc.local ではなく) init から実行できる。 そうすれば、クラッシュした場合に再起動できる。 この場合は inetd が自身をバックグラウンドに送るのを防ぐために -i オプションを使わなければならない。 さもないと init は混乱してしまう。

実行されている間 inetd は定められたインターネットソケットを監視し、接続要求を待つ。 監視しているソケットに対して接続要求が出されると、 そのソケットに対応したサービスを判定し、 サービスを提供するプログラムを起動する。 サービスプログラムが完了すると、 inetd は再びソケットの監視を行なう。 後述するような例外もある。 inetd を用いれば 1 つのデーモンで 複数のサービスプログラムを起動することができるので、 システムの負荷を軽減することができる。

オプション

inetd に指定できるオプションを示す:

-d
いくつかのデバッグを有効にして、 inetd をデバッガから実行されたように動作させる。 暗黙のうちに -i も指定される。
-i
バックグラウンドにしない。 init(8) から実行するためにある。
-q queuelength
ソケットの監視キューの大きさを指定された値に設定する。 デフォルトは 128。

設定

inetd は実行時に設定情報を設定ファイルから読み込む。 デフォルトでは設定ファイルは /etc/inetd.conf である。 設定ファイルの各フィールドにはエントリが 1 つなければならない。 各フィールドのエントリはタブやスペースで区切る。 コメントは行頭に ``#'' をつける。 設定ファイルのフィールドは次の通り:

サービス名[@ホスト名]
ソケットタイプ
プロトコル
wait/nowait[.max]
ユーザー名[.グループ名]
サーバープログラム名
サーバープログラム引き数

Sun-RPC ベースのサービスを記述する場合には、次のエントリを記述する。

サービス名/バージョン[@ホスト名]
ソケットタイプ
RPC/プロトコル
wait/nowait[.max]
ユーザー名[.グループ名]
サーバープログラム名
サーバープログラム引き数

サービス名 のエントリには、 /etc/services ファイルに記述されているサービス名が記述される。 ``内部'' サービス (後述) については、 名前としてそのサービスの公式名 (すなわち /etc/services 内の最初のエントリ) を指定 しなければならない。 Sun-RPC ベースのサービスを指定するためには、このフィールドは /etc/rpc に書かれた有効な RPC サービス名でなければならない。 ``/'' の右の部分が RPC のバージョン番号である。 バージョン番号は、数字もしくは、バージョンの範囲 (レンジ) で指定する。 範囲を指定する場合は低い番号から高い番号を指定する。 たとえば ``rusers/1-3'' のように記述する。

サービス名に @hostname という形式の文字列が追加された場合、 inetd は hostname に対応する特定の IP アドレスからの接続についてのみ、 サービスポートをバインドさせる (全てのアドレスからの接続は listen しない)。 異なるアドレスに対して使用したいだけ指定できるので、 ``仮想ホスト''サービスを設定できる。 望むだけの数の特定のアドレスを監視できるが、 カーネルによる制限によって、 inetd がそのポートを特定のアドレスに対して (あるいは同時に一般のアドレスに対して) 監視するのが禁止されることもある。 hostname はローカルシステムのインターフェースに関連づけられた、 解決可能なホスト名または IP アドレスにすべきである。

ソケットタイプ のエントリは、 ``stream'' ``dgram'' ``raw'' ``rdm'' ``seqpacket'' のいずれかで、それぞれソケットが stream, datagram, raw, reliably delivered message, sequenced packet socket である場合に対応している。

プロトコル のエントリには、 /etc/protocols に記述されている有効なプロトコル名が記述される。 例えば ``tcp'' や ``udp'' などである。 RPC ベースのサービスの場合、 ``rpc/tcp'' や ``rpc/udp '' のような指定になる。

wait/nowait エントリは、datagram ソケットにのみ適用できる (その他のソケットでは、この場所は ``nowait'' でなければならない)。 もし datagram サーバーが相手に接続したときにソケットを解放するなら、 inetd はソケットに対するメッセージをさらに受けることができる。 このようなサーバーは ``マルチスレッド'' サーバーと呼ばれ、 ``nowait'' エントリを指定しなければならない。 入って来る全ての datagram を処理し、 時間切れまで動作する datagram サーバーは、 ``シングルスレッド'' サーバーと呼ばれ、 ``wait'' エントリを指定しなければならない。 comsat(8), (biff(1) ) talkd(8) は後者のタイプの datagram サーバーの例である。 tftpd(8) は例外である; これは疑似接続を確立する datagram サーバーである。 競合を避けるために ``wait'' が指定されなければならない; サーバーは最初のパケットを読み込み、新たなソケットを作成し、 inetd が新たなサーバーを起動するような接続要求をチェックできるように、 fork して終了する。 オプションのサフィックス (接尾辞) ``max'' ( ``wait'' または ``nowait'' からドット``.''で分けられる) は、60 秒の間に最大いくつのサーバーが inetd から起動できるかを指定する。 省略された場合の、 ``max'' のデフォルトは 40 である。

user エントリには、サーバーを実行するユーザー名を書く。 これによりサーバーを root よりも低い権限で実行できる。 ユーザー名に続いてドット``.'' を付加して、 その後ろにグループ名を指定することができる。 これによりサーバーを password ファイルで指定される (プライマリの) グループ ID とは違うグループ ID で実行できる。 グループ名が指定され、ユーザーが root 以外だった場合は、 そのユーザの補助グループも (グループアクセスリストに) 設定されることになる。

サーバープログラム名 のエントリには、ソケットに要求があったとき inetd が起動し、当該エントリのサービスを提供する サーバープログラムのパス名を指定する。 inetd 内にすでに実装されているサービスを提供する場合には、サーバープログラムとして ``internal'' を指定する。

サーバープログラム引数 のエントリには、サーバーを起動する際の引数を、 サーバープログラムの起動文字列である argv[0] を含めて記述する。 inetd 内に実装されているサービスを提供する場合には、サーバープログラム引数として ``internal'' を指定する。

組み込み関数

inetd は、内蔵ルーチンを用いて簡単なサービスを自身で提供する。 これらのサービスとは ``echo'' ``discard'' ``chargen'' (文字生成), ``daytime'' (人間が読む形式で時間を出力), ``time'' (機械可読形式の時間。1900 年 1 月 1 日 0 時からの経過秒数を出力) である。 これらのサービスは TCP ベースである。 これらのサービスの詳細については適切な RFC ドキュメントを参照のこと。

SIGHUP を受けとると、 inetd は、設定ファイルを再度読み込む。 設定ファイルを再読み込みするときに、サービスを追加・削除・変更できる。 inetd はファイル /var/run/inetd.pid を作成し、そこにプロセス ID を記録する。

履歴

コマンドは BSD 4.3 から登場した。 Sun-RPC ベースのサービスのサポートは、 SunOS 4.1 で提供されたものにならって作られた。