INETD(8) | FreeBSD System Manager's Manual | INETD(8) |
名前
inetd — インターネット“スーパーサーバー”書式
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 を記録する。
履歴
inetd コマンドは 4.3BSD から登場した。 Sun-RPC ベースのサービスのサポートは、 SunOS 4.1 で提供されたものにならって作られた。August 22, 1999 | Linux NetKit (0.17) |