日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
INETD(8) FreeBSD システム管理者マニュアル INETD(8) 名称 inetd -- インターネット ``スーパサーバ'' 書式 inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-s maximum] [-a address | hostname] [-p filename] [-R rate] [configuration file] 解説 inetd ユーティリティは、ブート時に /etc/rc の中で起動されます (rc(8) 参 照)。起動されると、inetd は定められたインターネットソケットを監視し、接続 要求を待ちます。監視しているソケットに対して接続要求が出されると、inetd はそのソケットに対応したサービスを判定し、サービスを提供するプログラムを 起動します。サーバプログラムはサービスソケットを標準入力・標準出力・エ ラー出力として起動されます。サービスプログラムが完了すると、inetd は再び ソケットの監視を行ないます (後述するような例外もあります)。inetd を用いれ ば 1 つのデーモンで複数のサービスプログラムを起動することができるので、シ ステムの負荷を軽減することができます。 inetd は、起動時に以下のオプションを指定できます。 -d デバッグモードにします。 -l 成功した接続のログをとります。 -w 外部サービスに対して TCP Wrapping をオンにします。TCP Wrappers サ ポートについての更なる情報については、実装に関する注の節を参照し てください。 -W inetd 組み込みの内部サービスに対して TCP Wrapping をオンにしま す。 -c maximum 同時に起動可能なサービスの、デフォルトにおける最大値を指定しま す。デフォルトでは、無制限です。サービスごとに指定される "max child" パラメータによって上書きされ得ます。 -C rate 1 分間に単一の IP アドレスから起動されるサービスのデフォルトにお ける最大値を指定します。デフォルトは未設定です。サービスごとに指 定される "max-connections-per-ip-per-minute" パラメータによって上 書きされ得ます。 -R rate 1 分間に起動できる最大のサービス数を指定します。デフォルトは 256 です。rate に 0 を指定すると、起動可能な数は無制限になります。 -s maximum 単一 IP アドレスに対して同時起動可能な各サービスの最大数のデフォ ルト値です。デフォルトは無限です。「IP あたりの子の数の最大」パラ メータを使用して、サービス毎に上書き可能です。 -a バインドする IP アドレスを 1 個指定します。代りに、ホスト名を指定 可能です。この場合、ホスト名に対応する IPv4 または IPv6 のアドレ スが使用されます。通常、ホスト名が、jail(8) 環境変数のものに対応 している場合に、ホスト名は、inetd が jail(8) 内で実行されるとき、 指定されます。 ホスト名指定が使用され、IPv4 および IPv6 両方のバインドを望む場 合、/etc/inetd.conf の各サービスに対して、各バインドに対する適切 なプロトコルのエントリが必要です。例えば TCP ベースのサービスは 2 エントリが必要であり、ひとつは、プロトコルに ``tcp4'' を使用し、 もうひとつは ``tcp6'' を使用します。後で説明する /etc/inetd.conf のプロトコルフィールドを参照してください。 -p デフォルトとは異なるプロセス ID を保持するファイルを指定します。 inetd は実行時に設定情報を設定ファイルから読み込みます。デフォルトでは設 定ファイルは /etc/inetd.conf です。設定ファイルの各フィールドにはエントリ が 1 つなければなりません。各フィールドのエントリはタブやスペースで区切り ます。コメントは行頭に ``#'' をつけます。設定ファイルのフィールドは、次の 通りです: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments ONC RPC ベースのサービスを記述するためのエントリは、次のフィールドを含み ます: service-name/version socket-type rpc/protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments inetd が起動することのできるサービスは 2 種類あります。1 つは標準で、もう 1 つは TCPMUX です。標準サービスには割り当てられた well-known ポートがあ ります。これは公式のインターネット標準を実装したサービスや BSD 特有のサー ビスです。RFC 1078 に書かれているように、TCPMUX は非標準サービスであり、 well-known ポートが割り当てられていません。そういった非標準サービスは、あ るプログラムが ``tcpmux'' well-known ポートに接続してそのサービス名を指定 したとき、inetd によって起動されます。この機能はローカルに開発されたサー バを追加するときに便利です。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 の両方を受理させます。RPC ベースのサービスの場合、 ``rpc/tcp'' や ``rpc/udp'' のような指定になります。IPv4 と IPv6 を、4, 6, 46 のいずれかのサフィックスを使用して指定可能です。例えば ``rpc/tcp6'' や ``rpc/udp46'' とします。TCPMUX サービスは ``tcp'', ``tcp4'', ``tcp6'', ``tcp46'' のいずれかを使用する必要があります。 wait/nowait エントリは、inetd によって起動されたサーバがサービスアクセス ポイントに関連付けられたソケットを引き継ぐかどうか、すなわちサーバが終了 するまで inetd が新しいサービス要求を監視するのを待つ必要があるか否かを指 定します。datagram サーバは、特定のサービスアドレスと結び付いた datagram ソケットで毎回起動されるため、``wait'' を使わなければなりません。こういっ たサーバは、終了する前に少なくとも 1 データグラムをソケットから読まなけれ ばなりません。もし datagram サーバが相手に接続したときソケットを解放する なら、inetd はソケットに対するメッセージをさらに受けることができます。こ のようなサーバは ``マルチスレッド'' サーバと呼ばれます。サーバはソケット から datagram を 1 つ読み込み、相手に接続する新しいソケットをつくります。 サーバは fork() を行い、親プロセス側は終了しなければいけません。これによ り inetd は新しいサービス要求をチェックし、新しいサーバを起動することがで きるようになります。入って来る全ての datagram を処理し、時間切れまで動作 する datagram サーバは、``シングルスレッド'' サーバと呼ばれます。 comsat(8) と talkd(8) ユーティリティは、後者のタイプの datagram サーバの 例です。tftpd(8) ユーティリティは、マルチスレッドで動く datagram サーバの 例です。 stream ソケットを使うサーバは一般にマルチスレッドで動き ``nowait'' エント リを使います。こういったサーバへの接続要求は inetd で受け付けられ、新たに 受理し、クライアントにつながったソケットのみがサーバに与えられます。多く の stream ベースのサービスはこのように行われます。``wait'' エントリを使う stream ベースのサーバは、サービスのソケットを監視し、少なくとも 1 つの接 続要求を受け入れてから終了しなければなりません。そういったサーバは通常、 時間切れとなるまで、入って来る要求を受け付け処理します。TCPMUX サービスは ``nowait'' を使わなければなりません。 ``nowait'' サービスの子プロセス (あるいは ``スレッド'') の最大数は、 ``nowait'' キーワードの後に ``/'' と数字を付け加えることで指定できます。 通常 (あるいは 0 が指定された場合)、子プロセスの数に制限はありません。一 方、最大数に達すると、それ以降の接続要求は、存在する子プロセスが終了する まで待ち行列に蓄えられます。これは、``wait'' モードでも同様ですが、通常は 1 (デフォルトの値) 以外は意味がありません。指定した IP アドレスからの 1 分あたりの最大接続数を指定することも可能です。この場合、``/'' および最大 子プロセス数を指定します。最大値に達した場合、指定した IP アドレスからの 接続は、この 1 分が経過するまで、落とされます。さらに、単一 IP アドレスに 対して同時起動可能な各サービスの最大数の指定が、``/'' に続けて未完了の子 プロセスの最大数を追加することで可能です。最大値に達した場合、指定した IP アドレスからの接続は、落とされます。 ユーザ名エントリには、サーバを実行するユーザ名を書きます。これによりサー バを root よりも低い権限で実行できます。オプションのグループ名部分は ``:'' で分離され、指定された、このユーザのデフォルトグループ以外のグルー プ名を指定できます。オプションのログインクラス部分は ``/'' で分離され、デ フォルトの ``daemon'' ログインクラス以外のログインを指定できます。 サーバプログラム名のエントリには、ソケットに要求があったとき inetd が起動 し、当該エントリのサービスを提供するサーバプログラムのパス名を指定しま す。inetd 内部にすでに実装されているサービスを提供する場合には、サーバプ ログラムとして ``internal'' を指定します。 サーバプログラム引数エントリは、通常プログラムの名前である、argv[0] で始 まるサーバプログラムへ渡される引数をリストします。inetd 内部に実装されて いるサービスを提供する場合には、サーバプログラム引数として、サービスの サービス名 (と引数) または語 ``internal'' を指定します。 現在、引数を取る内部サービスは ``auth'' のみです。オプション無しだと、こ のサービスは常に ``ERROR : HIDDEN-USER'' を返します。このサービスの動作を 変更するために使用可能な引数は次の通りです: -d fallback fallback ユーザ名を指定します。本物の ``auth'' サービスが (後述の -r オプションで) 有効になっている場合、ソケットの credential 取得 またはユーザ名検索に失敗したときに、エラーを返す代りにこのユーザ 名を返します。本物の ``auth'' サービスが無効になっている場合、す べての要求に対してこのユーザ名を返します。主に、本サービスを NAT マシン上で実行しているときに有用です。 -g ident 要求者にユーザ名を返す代りに、アルファベットと数字からなる ランダムなユーザ名を報告します。例えば ``c0c993'' です。-g フラグ は、ユーザ名に優先するだけでなく、.fakeid や .noident のファイル にも優先します。 -t sec[.usec] サービスのタイムアウトを指定します。デフォルトのタイムアウトは 10.0 秒です。 -r RFC 1413 にある、真の ``auth'' サービスを提供します。残りのすべて のフラグが使用されるのは、この場合のみです。 -i ユーザ名の代りに数値のユーザ ID を返します。 -f 識別されるユーザのホームディレクトリに .fakeid というファイルがあ る場合、本当のユーザ名の代りにそのファイル中のユーザ名を報告しま す。.fakeid 中のユーザ名が実在するユーザのものの場合、本当のユー ザ名を報告します。-i が共に指定されると、.fakeid 中のユーザ名が既 存のユーザ ID の代りにチェックされます。 -F -f と同じですが、.fakeid が実在するユーザ名にマッチしてはならない という制約が除外されます。 -n 識別されるユーザのホームディレクトリに .noident というファイルが ある場合、``ERROR : HIDDEN-USER'' を返します。これは、fakeid ファ イルに優先します。 -o osname uname(3) が報告するシステム名の代りに、osname を使用します。 inetd ユーティリティはまた、内部ルーチンを用いて ``簡単な'' サービスを自 身で提供します。これらのサービスとは ``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 オプションが指定された場合、inetd は接続を受け付けるたび、エントリを syslog に記録します。この際、利用可能であれば、選択されたサービスと要求を 発したリモートの IP 番号を記録します。設定ファイルで他に指定しておらず、 -W と -w のオプションを指定していないと、inetd は ``daemon'' ファシリティ に対してログ出力します。 SIGHUP を受けとると、inetd ユーティリティは、設定ファイルを再度読み込みま す。デバッグモードで開始されるか、または -p オプションで別の方法で設定さ れるときを除いて、inetd は、再設定を助けるために、ファイル /var/run/inetd.pid にそのプロセス ID を記録します。 実装に関する注 TCP Wrappers -w オプションが指定されたとき、``stream nowait'' または ``dgram'' と指定 さた全サービスのうち ``内部'' サービス以外を、inetd はラッピングします (包みます)。-W オプションが指定されると、前述の条件の ``内部'' サービスが ラッピングされます。両方のオプションが指定された場合、内部サービスと外部 サービスの両方をラッピングするようになります。どちらのラッピングオプショ ンも、失敗した接続を ``auth'' syslog ファシリティでログします。ラッピング オプションに -l フラグを追加すると、成功した接続も ``auth'' ファシリティ へのログに含めるようになります。 ``wait'' サービスに対する要求は、サービス要求に対するサーバが無い間のみ inetd はラッピングすることに注意してください。このようなサービスに対して ひとたび接続が許されると、接続要求に対して listen するサーバが無くなるま で、このサービスに対する後続の接続を inetd は制御できません。 ラッピングが有効にされた場合、この機能は組み込みであるため、tcpd デーモン は不要です。TCP Wrappers についての更なる情報は、関連する文書 (hosts_access(5)) を参照してください。この文書を読むときには、``内部'' サービスに対しては、関連するデーモン名は無いことを覚えておいてください。 このような理由で、``内部'' サービスのデーモン名としては、inetd.conf で指 定されるサービス名を使用すべきです。 TCPMUX RFC 1078 は TCPMUX プロトコルについて述べています。「 TCP クライアントは 他のホストに TCP ポート番号 1 で接続します。クライアントは、サービス名に <CRLF> を付加して送ります。サービス名は大文字/小文字を区別しません。サー バは、肯定 (+) もしくは否定 (-) を表す 1 文字を返します。+ あるいは - の すぐ後にメッセージが続く場合があります。返答は <CRLF> で終わります。もし 返答が肯定であれば、選択されたプロトコルが開始されます。そうでなければ接 続は切られます。」プログラムにはファイルディスクプリタ 0 と 1 で TCP コネ クションが渡されます。 TCPMUX サービス名が ``+'' で始まっているとき、inetd は、プログラムに肯定 返答 (+) を返します。これによって、特別なサーバコードを追加することなく標 準入出力を使うプログラムを起動することができます。 特別なサービス名である ``help'' により、inetd は inetd.conf で有効にされ る TCPMUX サービスをリストします。 IPsec 本実装は、各ソケットに対する IPsec ポリシ設定のサポートのためのちょっとし たハックを含みます。``#@'' から開始する特別な形式のコメント行が、ポリシ指 示子として解釈されます。``#@'' の後のすべてが、ipsec_set_policy(3) に記述 されているように、IPsec ポリシ文字列として使用されます。各ポリシ指定子 は、inetd.conf 中で後続するすべての行に適用され、これは次のポリシ指定子が 登場するまで続きます。空のポリシ指定子は、IPsec ポリシをリセットします。 不正な IPsec ポリシ文字列が inetd.conf にあると、inetd は syslog(3) イン タフェースを使用してエラーメッセージを残し、終了します。 UNIX ドメインソケット サービスを IP ソケット上で動作させることに加え、inetd は UNIX ドメインソ ケットも扱えます。このためにはプロトコルに ``unix'' を指定し、UNIX ドメイ ンソケットをサービス名として指定します。サービスタイプは ``stream'' か ``dgram'' のいずれかです。ソケットの指定は、絶対パス名であることが必要で あり、:user:group:mode: の形式で所有者とモードを前に付けることが可能で す。 :news:daemon:220:/var/run/sock という指定は、所有者が ``news'' でグループが ``daemon'' で所有者とグルー プのみに接続を許可するソケットを作成します。デフォルトの所有者は、inetd を実行しているユーザです。デフォルトのモードは、ソケットの所有者のみに接 続を許可するというものです。 警告: UNIX ドメインソケットの作成中に、inetd はソケットの所有者とパーミッ ションを変更する必要があります。これが安全に行われるのは、ソケットが作成 されるディレクトリが root のみ書き込み可能な場合だけです。/tmp のような、 誰でも書き込み可能なディレクトリにソケットを作成するために inetd を使用し ないでください。代わりに /var/run または同様のディレクトリを使用します。 内部サービスは、通常通り、UNIX ドメインソケットでも実行可能です。この場 合、ソケットのパス名の最後の部分から内部サービス名が判定されます。例え ば、/var/run/chargen と名前がつけられたソケットを指定すると、そのソケット で接続を受信するとき、``chargen'' サービスが呼び出されるでしょう。 関連ファイル /etc/inetd.conf 設定ファイル /etc/netconfig ネットワーク設定データベース /etc/rpc サービス名を RPC プログラム番号に変換するテーブル /etc/services サービス名をポート番号に変換するテーブル /var/run/inetd.pid 現在実行中の inetd の pid 使用例 次に、いくつかのサービスについてサービスエントリの例を挙げておきます。 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 #@ エラーメッセージ inetd サーバは、syslog(3) を使ってエラーメッセージを記録します。重要なエ ラーメッセージとその説明は以下の通りです。 service/protocol server failing (looping), service terminated. 直前の 1 分間に、そのサービスについての要求数が制限に達しました。不完全な プログラムや悪意のあるユーザがシステムをハングアップさせないために、この ような制限が設けられています。このメッセージが出力される理由はいくつかあ ります。 1. 短時間の間に多くのホストがこのサービスを要求している。 2. 不完全なクライアントプログラムがサービスを頻繁に要求しすぎてい る。 3. 悪意あるユーザがあるプログラムを起動し、サービスが '拒否' され るように攻撃している。 4. 起動されたサービスプログラムにエラーがあり、クライアントがすぐ にリトライを起こしてしまう。 -R rate オプションを使うと、制限を変えることができます。制限に達したと き、10 分経つとサービスは自動的に再許可されます。 service/protocol: No such user user, service ignored service/protocol: getpwnam: user: No such user passwd(5) データベースに user のエントリがありません。最初のメッセージは inetd が設定ファイルを (再度) 読み込むときに出されます。2 つ目のメッセー ジは、サービスが呼び出されたときに出されます。 service: can't set uid uid service: can't set gid gid user フィールドのユーザ ID もしくはグループ ID が無効です。 setsockopt(SO_PRIVSTATE): Operation not supported inetd ユーティリティはそのソケットに設定されている特権状態を放棄しようと しましたが、失敗しました。 unknown rpc/udp または rpc/tcp netconfig(5) データベースに udp か tcp のいずれもエントリも見つけられませ んでした。 unknown rpc/udp6 または rpc/tcp6 netconfig(5) データベースに udp6 か tcp6 のいずれもエントリも見つけられま せんでした。 関連項目 ipsec_set_policy(3), hosts_access(5), hosts_options(5), login.conf(5), netconfig(5), passwd(5), rpc(5), services(5), comsat(8), fingerd(8), ftpd(8), rlogind(8), rpcbind(8), rshd(8), talkd(8), telnetd(8), tftpd(8) Michael C. St. Johns, Identification Protocol, RFC1413. 歴史 inetd ユーティリティは 4.3BSD で登場しました。TCPMUX は Mark Lottor によ るコードとドキュメントを元にしています。ONC RPC ベースのサービスのサポー トは、SunOS 4.1 が供給されてから、それにならって作られました。IPsec の ハックは、1999 年に KAME プロジェクトが提供しました。FreeBSD の TCP Wrap pers サポートは FreeBSD 3.2 ではじめて登場しました。 FreeBSD 11.4 January 12, 2008 FreeBSD 11.4