総合手引 | セクション 5 | English | オプション |
inetd は、起動時に以下のオプションを指定できます。
| |
デバッグモードにします。 | |
| |
成功した接続のログをとります。 | |
| |
外部サービスに対して TCP Wrapping をオンにします。 TCP Wrappers サポートについての更なる情報については、 実装に関する注 の節を参照してください。 | |
| |
inetd 組み込みの内部サービスに対して TCP Wrapping をオンにします。 | |
| |
同時に起動可能なサービスの、デフォルトにおける最大値を指定します。 デフォルトでは、無制限です。 サービスごとに指定される "max-child" パラメータによって上書きされ得ます。 | |
| |
1 分間に単一の IP アドレスから起動されるサービスのデフォルトにおける最大値 を指定します。 デフォルトは未設定です。 サービスごとに指定される "max-connections-per-ip-per-minute" パラメータによって上書きされ得ます。 | |
| |
1 分間に起動できる最大のサービス数を指定します。デフォルトは 256 です。 rate に 0 を指定すると、起動可能な数は無制限になります。 | |
| |
単一 IP アドレスに対して同時起動可能な各サービスの最大数のデフォルト値です。 デフォルトは無限です。 「IP あたりの子の数の最大」パラメータを使用して、サービス毎に上書き可能です。 | |
| |
バインドする IP アドレスを 1 個指定します。
代りに、ホスト名を指定可能です。
この場合、ホスト名に対応する IPv4 または IPv6 のアドレスが使用されます。
通常、
inetd
が
jail(8)
内で起動される時点で、ホスト名が指定されます。
この場合、ホスト名は
jail(8)
環境に対応するものです。
ホスト名指定が使用され、IPv4 および IPv6 両方のバインドを望む場合、 /etc/inetd.conf の各サービスに対して、 各バインドに対する適切な プロトコル のエントリが必要です。 例えば TCP ベースのサービスは 2 エントリが必要であり、 ひとつは プロトコル に "tcp4" を使用し、もうひとつは "tcp6" を使用します。 後で説明する /etc/inetd.conf の プロトコル フィールドを参照してください。 | |
| |
デフォルトとは異なるプロセス ID を保持するファイルを指定します。 | |
inetd は実行時に設定情報を設定ファイルから読み込みます。 デフォルトでは設定ファイルは /etc/inetd.conf です。 設定ファイルの各フィールドにはエントリが 1 つなければなりません。 各フィールドのエントリはタブやスペースで区切ります。 コメントは行頭に "#" をつけます。 設定ファイルのフィールドは以下のものからなります:
サービス名 ソケットタイプ プロトコル {wait|nowait}[/最大子プロセス数[/IPあたりの分あたりの最大接続数[/IPあたりの子の数の最大]]] ユーザ名[:グループ名][/ログインクラス名] サーバプログラム名 サーバプログラム引数
ONC RPC ベースのサービスを記述する場合には、以下のエントリを記述します。
サービス名/バージョン ソケットタイプ RPC/プロトコル ユーザ名 サーバプログラム名 サーバプログラム引数
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 の両方を受理させます。 サービスが 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 エントリは、 inetd によって起動されたサーバがサービスアクセスポイントに 関連付けられたソケットを引き継ぐかどうか、すなわちサーバが終了するまで inetd が新しいサービス要求を監視するのを待つ必要があるか否かを 指定します。 datagram サーバは、特定のサービスアドレスと結び付いた datagram ソケットで毎回起動されるため、 "wait" を使わなければなりません。こういったサーバは、終了する前に少なくとも 1 データグラムをソケットから読まなければなりません。 もし datagram サーバが相手に接続したときソケットを 解放するなら、 inetd はソケットに対するメッセージをさらに受けることができます。 このようなサーバは "マルチスレッド" サーバと呼ばれます。 サーバはソケットから datagram を 1 つ読み込み、相手に接続する新しい ソケットをつくります。 サーバは fork() を行い、親プロセス側は終了しなければいけません。 これにより inetd は新しいサービス要求をチェックし、新しいサーバを起動することが できるようになります。 入って来る全ての datagram を処理し、 時間切れまで動作する datagram サーバは、 "シングルスレッド" サーバと呼ばれます。 comsat(8), (biff(1)), 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 よりも低い権限で実行できます。 オプションの グループ名 部分は "amp;:" で分けられ、 このユーザのデフォルトグループ以外のグループ名を指定可能です。 オプションの ログインクラス名 部分は "/" で分けられ、 デフォルトの "daemon" 以外のログインクラス名を指定可能です。
サーバプログラム名 のエントリには、ソケットに要求があったとき inetd が起動し、当該エントリのサービスを提供する サーバプログラムのパス名を指定します。 inetd 内部にすでに実装されているサービスを提供する場合には、サーバプログラムとして "internal" を指定します。
サーバプログラム引数 のエントリは、サーバを起動する際の引数を、サーバプログラムの起動文字列 である argv[0] を含めて記述します。 inetd 内部に実装されているサービスを提供する場合には、サーバプログラム引数 として、サービスの サービス名 (と引数) または語 "internal" を指定します。
現在、引数を取る内部サービスは "auth" のみです。 オプション無しだと、このサービスは常に "ERROR : HIDDEN-USER" を返します。 このサービスの動作を変更するために使用可能な引数は次の通りです:
| |
fallback
ユーザ名を指定します。
本物の
"auth"
サービスが (後述の
| |
| |
ident 要求者にユーザ名を返す代りに、
アルファベットと数字からなるランダムなユーザ名を報告します。
例えば
"c0c993"
です。
| |
| |
sec[.usec] サービスのタイムアウトを指定します。 デフォルトのタイムアウトは 10.0 秒です。 | |
| |
RFC 1413 にある、真の "auth" サービスを提供します。残りのすべてのフラグが使用されるのは、この場合のみです。 | |
| |
ユーザ名の代りに数値のユーザ ID を返します。 | |
| |
識別されるユーザのホームディレクトリに
.fakeid
というファイルがある場合、
本当のユーザ名の代りにそのファイル中のユーザ名を報告します。
.fakeid
中のユーザ名が実在するユーザのものの場合、本当のユーザ名を報告します。
| |
| |
| |
| |
識別されるユーザのホームディレクトリに .noident というファイルがある場合、 "ERROR : HIDDEN-USER" を返します。 これは、 fakeid ファイルに優先します。 | |
| |
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
SIGHUP を受けとると、 inetd ユーティリティは、設定ファイルを再度読み込みます。設定ファイルを 再読み込みするとき、サービスを追加、削除、変更できます。 デバッグモードで起動された場合をのぞき、 inetd は再設定を容易にするために、プロセス ID を /var/run/inetd.pid に記録します。
"wait" サービスに対する要求は、 サービス要求に対するサーバが無い間のみ inetd はラッピングすることに注意してください。 このようなサービスに対してひとたび接続が許されると、 接続要求に対して listen するサーバが無くなるまで、 このサービスに対する後続の接続を inetd は制御できません。
ラッピングが有効にされた場合、この機能は組み込みであるため、 tcpd デーモンは不要です。
TCP Wrappers についての更なる情報は、関連する文書 (hosts_access(5)) を参照してください。 この文書を読むときには、 "内部" サービスに対しては、関連するデーモン名は無いことを覚えておいてください。 このような理由で、 "内部" サービスのデーモン名としては、 inetd.conf で指定されるサービス名を使用すべきです。
TCPMUX サービス名が "+" で始まっているとき、 inetd は、プログラムに肯定返答 (+) を返します。 これによって、 特別なサーバコードを追加することなく 標準入出力を使うプログラムを起動することができます。
特別なサービス名である "help" により、 inetd は inetd.conf にある TCPMUX サービスの一覧を出力します。
不正な IPsec ポリシ文字列が inetd.conf にあると、 inetd は syslog(3) インタフェースを使用して エラーメッセージを残し、終了します。
:news:daemon:220:/var/run/sock
という指定は、所有者が "news" でグループが "daemon" で所有者とグループのみに接続を許可するソケットを作成します。 デフォルトの所有者は、 inetd を実行しているユーザです。 デフォルトのモードは、 ソケットの所有者のみに接続を許可するというものです。
警告: Unix ドメインソケットの作成中に、 inetd はソケットの所有者とパーミッションを変更する必要があります。 これが安全に行われるのは、 ソケットが作成されるディレクトリが root のみ書き込み可能な場合だけです。 inetd を使用して、 /tmp 等の誰でも書き込み可能なディレクトリにソケットを作成し ない でください。 代りに、 /var/run 等のディレクトリと使用してください。
内部サービスは、通常通り、 Unix ドメインソケットでも実行可能です。 この場合、ソケットのパス名の最後の部分から内部サービス名が判定されます。
/etc/inetd.conf | 設定ファイル |
/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 #@
service/protocol
server failing (looping), service terminated.
直前の 1 分間に、そのサービスについての要求数が制限に達しました。
不完全なプログラムや悪意のあるユーザがシステムを
ハングアップさせないために、このような制限が設けられています。
このメッセージが出力される理由はいくつかあります。
| |
service/protocol: amp;No such user user, service ignored | |
service/protocol:
getpwnam:
user:
amp;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 ユーティリティはそのソケットに設定されている特権状態を放棄しようとしましたが、 失敗しました。 |
RFC1413, Identification Protocol,
,INETD (8) | February 7, 1996 |
総合手引 | セクション 5 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | The number of UNIX installations has grown to 10, with more expected. | ” |
— UNIX Programming Manual, 1972 |