services - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
名前
services - インターネット ネットワークサービス リスト
説明
services
は、インターネットサービスの分かりやすい名前と、
それらのサービスに割り当てられたポート番号と
プロトコルの種類の間の対応関係が書かれているテキストファイルである。
ネットワーク上で動作するプログラムはすべて、
そのサービスに対応するポート番号 (とプロトコル) を得るために、
このファイルを調べる必要がある。
C ライブラリ関数である
getservent
(3),
getservbyname
(3),
getservbyport
(3),
setservent
(3),
endservent
(3)を利用することで、プログラムはこのファイルを調べることができる。
ポート番号は、IANA (Internet Assigned Numbers Authority) によって
割り当てられており、現在はポート番号を割り当てる際に
TCP と UDP の両方のプロトコルを割り当てることになっている。
そのため、ほとんどのサービスに対して、
たとえ TCP だけのサービスの場合であっても、対応する項目が二つあることになる。
1024 より小さいポート番号 (いわゆる 'low numbered' ポート) は
管理者 (root) 権限によってのみ使用することができる
(
bind
(2),
tcp
(7),
udp
(7) 参照)。
これは、これらのポートに接続するクライアントに対して、
そのポートで動いているサービスが標準的な実装であり、
その計算機のユーザーが動かしている
不正なサービスではないことを保証するためである。
IANA に明記されているよく使用されるポート番号は、
通常このような管理者だけが使用できる範囲に配置される。
services
ファイルにあるサービスに対する項目があっても、必ずしもそのサービスが現
在その計算機で動いている訳ではない。利用可能なインターネットサービスの設定に
ついては
inetd.conf
(5)に記述されている。ただし、すべてのサービスが
inetd
(8) によって起動されるわけではないので、
inetd.conf
(5)には書かれていないサービスもあることに注意する必要がある。
特に、ネットニュース (NNTP) や メール (SMTP) のサーバーは、システム起動時の
スクリプトから起動されることが多い。
services
ファイルの場所は、
/usr/include/netdb.h
中の
_PATH_SERVICES
によって定義されている。
この値は通常
/etc/services
に設定されている。
1 行につき 1 サービスが記述されており、その形式は以下の通りである。
2service-nameport3/2protocol1[2aliases ...1]
-
- service-name
-
- サービスを表す分かりやすい名前であり、検索の際にも使用される。 大文字と小文字は区別される。 クライアントプログラムは service-name にちなんで名付けられることが多い。
- port
- サービスに対して使用されるポート番号。10 進数で指定する。
- protocol
- 使用されるプロトコルの種類。この欄は、 protocols (5) ファイルの中の項目と一致している必要がある。 通常使用される値は、 tcp と udp である。
- aliases
-
サービスに対する別名のリスト (区切はスペースまたはタブ) で、この欄は
必要にならば書くことができる
(但し、下記のバグのセクションを参照のこと)。また、別名は
大文字と小文字は区別される。
それぞれの欄の区切りには、スペースまたはタブが使用される。
コメントはシャープ (#) で始まり、その行の終わりまでがコメントとみなされる。 空行は飛ばされる。
行の始めのスペースは無視されないので、 service-name は、行頭から書かなければならない。 service-names は、スペースとタブ以外の印字可能な文字なら何でもよいが、しかしながら プログラムの実行時の問題を少なくするような文字を選択すべきである。 例えば、a-z 、0-9 、ハイフォン (-) を使用するのが無難と思われる。
指定された形式に合わない行はあってはならない (現在は、そのような行は getservent (3), getservbyname (3), getservbyport (3)によって無視される。しかし、その場合の挙動は信頼できない)。
古いバージョンとの整合性の問題から、実際には port 番号と protocol の間のスラッシュ (/) は、スラッシュかコンマ (,) のどちらでも構わない。 しかしながら、今なおコンマを使用するのは望ましいことではない。
このファイルは、Yellow Pages/NIS や BIND/Hesiod のようなネットワーク上の名前 サービスを用いて、ネットワークを通じて配布される可能性もある。
services ファイルの見本を以下に示す。
netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp 21/tcp # 22 - unassigned telnet 23/tcp
バグ
getservent
(3) のコードの書き方の問題で、35 個までしか別名を付けることができない。
BUFSIZ
(現在は 1024) 文字より長い行は、
getservent
(3),
getservbyname
(3),
getservbyport
(3)により無視される。さらに、このことは次の行が正しく解釈されない原因となる。
ファイル
- /etc/services
- インターネット ネットワークサービスのリスト
- /usr/include/netdb.h
- _PATH_SERVICES の定義
関連項目
listen
(2),
endservent
(3),
getservbyname
(3),
getservbyport
(3),
getservent
(3),
setservent
(3),
inetd.conf
(5),
protocols
(5),
inetd
(8)
ポート番号の割り当てを定めている RFC (最新版は RFC1700、別名 STD0002)
Yellow Pages Service / NIS のドキュメント
BIND/Hesiod Service のドキュメント