Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ inetd(8) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

comsat(8C)

ftpd(8C)

rexecd(8C)

rlogind(8C)

rshd(8C)

telnetd(8C)

tftpd(8C)

INETD(8)  —  UNIX Programmer’s Manual

名称

inetd − インターネット“スーパーサーバ”

形式

/etc/inetd [ −d ] [ configuration file ]

解説

inetd は、ブート時に /etc/rc から実行しなければなりません。(NEWS の場合) inetd は、実行されるといくつかの決まったインターネットソケットの コネクションを、listen します。 そのソケットの 1つに接続が見つかると、 ソケットが何のサービスに対応するかを判断し、 要求を実行するプログラムを呼び出します。 このプログラムが終わると、 ソケットの listen を続けます(下に記すいくつかの場合を除きます)。 本質的に inetd によって 1つのデーモンを走らせておけば、他のいくつかのデーモン を起動できるので、システムのロードを減らすことができます。

rpc サーバは、inetd から開始できます。 通常のコードとの違いは、 inet がディスクリプタ 0 としてソケットファイルを渡すことから、 svcudp_create は

transp = svcudp_create(0)

のように呼ばれなければならないことと、 そのプログラムが既に inetd によって登録されていることから、 svc_register は最終フラグを 0 にして

svc_register(PROGNUM,VERSNUM,service,transp,0)

のように呼ばれなくてはならないということです。 また、サーバプロセスを exit させて、 制御を inet に戻したい場合、svc_run では戻らないので、 明示的に exit する必要があります。

実行の際、 inetd はコンフィギュレーション情報を、コンフィギュレーションファイル /etc/inetd.conf (デフォルトの場合)を読み出します。 コンフィギュレーションファイルの各フィールドには、 エントリが 1つずつなければなりません。 各フィールドのエントリは、タブまたはスペースで分けられています。 コメントは、行頭に“#”を付けて示されています。 コンフィギュレーションファイルのフィールドは次のとおりです。

サービス名
ソケットの型
プロトコル
wait/nowait
ユーザ
サーバプログラム
サーバプログラムの引数

rpcサービスについて:
サービス名/バージョン
ソケットの型
プロトコル
wait/nowait
ユーザ
サーバプログラム
サーバプログラムの引数

service name のエントリは、ファイル /etc/services 中で有効なサービスの名前です。
次に示す“内部的”なサービスに対しては、サービス名は正式な名称 (/etc/services 中の最初のエントリ)でなければなりません。

RPC service については、エントリはバージョン1−x のファイル /etc/rpc 中にある有効なサービスの名称です。例として、“mountd/1−2”があります。

ソケットの型は、“stream”または、“dgram”、“raw”、“rdm”、 “seqpacket”のうちのどれかで、それぞれストリーム、 データグラム、ロー、確実に届けられるメッセージ、 連続したパケットソケット に対応しています。

プロトコルは、 /etc/protocols に与えられている有効なプロトコルでなければなりません。 例として、“tcp”や“udp”があります。

RPC service については、 protocol は rpc/protocol の形式です。 例として、“rpc/tcp”や“rpc/udp”があります。

wait/nowait のエントリは、データグラム(と rpc)ソケットにのみ適用します (他のソケットの場合は、ここに“nowait”を指定しておきます)。 データグラムサーバが相手のサーバに接続している場合、 ソケットを解放すれば、 inetd がそのソケット上でそれ以上のメッセージを受けることができます。 これを“マルチスレッド”サーバと呼び、 このエントリは“nowait”にします。 また、ソケット上で受け取るすべてのデータグラムを処理し、 最終的にはタイムアウトするデータグラムサーバは、 “シングルスレッド”と呼び、 このエントリは“wait”にします。“comsat”("biff")と“talk”は 共に後者のタイプのデータグラムサーバの例です。ただし、 tftpd は例外で、これは疑似接続を確立するデータグラムサーバです。 この場合、競合を避けるために、“wait”と指定しておかなければなりません。 このサーバは、最初のパケットを読み、新しいソケットを作り、 そして、fork し、 exit するので、 inetd は、次のサービス要求に対して、新しくサーバを生成できます。

ユーザエントリには、 そのサーバを実行させるユーザのユーザ名が入っていなければなりません。 これにより、サーバに与えられるパーミッションは、root より少なくなります。

サーバプログラムエントリには、 そのソケット上に要求が見つかった時に inetd によって実行される、プログラムのパス名が含まれていなければなりません。 もし inetd がこのサービスを内部的に備えているなら、 このエントリは“internal”にします。

サーバプログラムに対する引数は通常どおりで、 プログラムの名称である argv[0] で始まります。 もしこのサービスが内部的に備えているなら、 このエントリは“internal”にします。

Inetd は、それ自体の中にあるルーチンを用いることにより、 ごく単純なサービスをいくつか内部的に備えています。 これらのサービスとは、“echo”、“discard”、“chargen” (キャラクタジェネレータ)、“daytime”(人が読める時刻)と、 “time”(1900年 1月 1日午前 0時からの秒数、機械が読める時刻)です。 これらのすべてのサービスは TCP に基づいています。 これらのサービスの詳細については、 Network Information Center の適切な RFC を参照してください。

inetd は、ハングアップシグナル SIGHUP を受け取った場合に、 そのコンフィギュレーションファイルを再読します。 この時には、サービスを追加、削除、修正できます。

例

#
# 標準 inetd.conf エントリ
ftpstreamtcpnowaitroot/etc/ftpd ftpd
talkdgramudpwaitroot/etc/talkd talkd
#
# RPC がサービスするエントリ
rexd/1streamrpc/tcpwaitroot/usr/etc/rpc.rexd rpc.rexd

関連事項

comsat(8C), ftpd(8C), rexecd(8C), rlogind(8C), rshd(8C), telnetd(8C), tftpd(8C)

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026