ablog

不器用で落着きのない技術者のメモ

/etc/services って何に使われてるんだろ?

services は、人が分かりやすい形のインターネットサービスの名前と、 それらのサービスに割り当てられたポート番号や プロトコル種別の対応関係が書かれているテキストファイルである。 ネットワーク上で動作するプログラムはすべて、 そのサービスに対応するポート番号 (とプロトコル) を得るために、 このファイルを調べる必要がある。 C ライブラリ関数である getservent(3), getservbyname(3), getservbyport(3), setservent(3), endservent(3) を利用することで、プログラムはこのファイルを調べることができる。

Man page of SERVICES

Cライブラリ関数がサービス名からポート番号を取得したり、ポート番号からサービス名を取得したりするのに使われるらしい。

netstat を実行すると、

% netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 oel11gr2.yoheia.com:2208    *:*                         LISTEN
tcp        0      0 *:1006                      *:*                         LISTEN
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:ipp     *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:smtp    *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:2207    *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN

ssh」とかサービス名が表示される。これって、/etc/services から取ってきてるかも。
strace でオープンしているファイルを調べてみる。

% strace -e open netstat -a

...

open("/etc/services", O_RDONLY)         = 4

/etc/services を開いている。
ということは、/etc/services から ssh の行を削除すると、ssh はサービス名で表示されなくなる気がする。
ssh の行をコメントアウトして、

% vi /etc/services
#ssh            22/tcp                          # SSH Remote Login Protocol
#ssh            22/udp                          # SSH Remote Login Protocol

netstat を実行してみると、

% netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 oel11gr2.yoheia.com:2208    *:*                         LISTEN
tcp        0      0 *:1006                      *:*                         LISTEN
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:ipp     *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:smtp    *:*                         LISTEN
tcp        0      0 oel11gr2.yoheia.com:2207    *:*                         LISTEN
tcp        0      0 *:22                        *:*                         LISTEN

想定通り、ssh と表示されていたところが 22 になった。