telnetd や FTPD の運用から SSHD の運用へと移行する傾向に伴い、多くのシステム管理者が >system>stcp>services ファイルから「telnet」および「FTP」のサービス行を削除しています。
#Name port Service Alias#ftpdata 20/tcpftp 21/tcp ftpdtelnet 23/tcp telnetdsmtp 25/tcpbootps 67/udp bootpdbootpc 68/udp bootp. . . . . . |
図1 – >system>stcp>services ファイル内の telnet および FTP の設定
他のホストと通信するために、依然としてTelnetやFTPクライアントを実行する必要がある場合、問題が生じます。
telnet 172.16.1.34telnet: tcp/telnet: unknown serviceready 09:30:15 ftp 172.16.1.34ftp: ftp/tcp: unknown serviceready 09:30:26 |
図2 – サービスエントリの欠落によるtelnetおよびFTPクライアントのエラー
その理由は、telnet および FTP クライアントが、接続すべきポート番号を決定するために getservbyname 関数を使用しているためです。この関数は services ファイルを読み込みますが、そのファイルに「telnet」や「ftp」といったサービス名が含まれていない場合、関数はポート番号を返さず、クライアントは終了してしまいます。
Telnetクライアントでは、コマンドラインでポート番号を指定することで、この関数呼び出しをバイパスすることができます。
telnet 172.16.1.34 23Trying...Connected to 172.16.1.23.Escape character is '^]'. login: |
図3 – Telnetクライアントへのポート番号の指定
このFTPクライアントには、このオプションがありません。
servicesファイルは、サービス名とポート番号およびプロトコルを対応付ける単純なテキスト形式のデータベースに過ぎません。「telnet」および「ftp」の行を削除しても、モジュールのセキュリティレベルは実質的に向上しません。なぜなら、ファイルにこれらの行が存在しても、それだけでこれらのサービスが自動的に実行されるわけではないからです。ユーザーがtelnetやFTPクライアントを使用する必要が絶対にないという確信がない限り、servicesファイル内のエントリはそのまま残しておくべきです。
