彩音 - UNIX - 研究室:XION - UNIX -laboratory
/etc/inetd.conf

inetd はインターネットスーパーサーバと呼ばれます。複数のデーモンを起動するデーモンです。inetd は、自分が起動するデーモンの代わりにポートの接続要求を処理し、ポートに接続が行われると、その接続を該当するデーモンに渡します。
/etc/default/rc.conf の中で inetd_enable="YES" と指定されている場合、特に何も設定しなくても inetd デーモンが起動します。inetd から起動されるデーモンが一切不要な場合には、inetd を起動する意味は無いので、/etc/rc.conf の中に inetd_enable="NO" という行を記載し、inetd を起動しない設定にしておくとよいでしょう。また、 /etc/default/rc.conf の中で inetd_enable="NO" と指定されている場合、/etc/rc.conf の中に inetd_enable="YES" と記載しなければ、inetd は起動しません。

/etc/inetd.conf

inetd は、起動時に /etc/services と /etc/inetd.conf ファイルを参照します。/etc/services は、サービス名とポート番号、プロトコルとの対応表です。

以下は /etc/inetd.conf の抜粋です。行頭が「#」ではじまる行はコメントです。FreeBSD 4.5 ではインストール時にはすべてのエントリがコメントアウトされています。システム管理者は、必要なエントリのコメントを外すことで、該当するデーモンを inetd 経由で起動できるようになります。なお、/etc/inetc.conf ファイルを変更しても、そのままでは inetd は新しい設定内容を読み込みません。SIGHUP のシグナルを inetd に送るようにします。

/etc/inetd.conf 抜粋


% cat /etc/inetd.conf
# $FreeBSD: src/etc/inetd.conf,v 1.69 2004/06/06 11:46:27 schweikh Exp $
#
# Internet server configuration database
#
# Define *both* IPv4 and IPv6 entries for dual-stack support.
# To disable a service, comment it out by prefixing the line with '#'.
# To enable a service, remove the '#' at the beginning of the line.
#
#ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
#ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -l
#ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
#ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i -6
#telnet stream tcp nowait root /usr/libexec/telnetd telnetd
#telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd
#shell stream tcp nowait root /usr/libexec/rshd rshd
#shell stream tcp6 nowait root /usr/libexec/rshd rshd
#login stream tcp nowait root /usr/libexec/rlogind rlogind
#login stream tcp6 nowait root /usr/libexec/rlogind rlogind
#finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
#finger stream tcp6 nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
#exec stream tcp nowait root /usr/libexec/rexecd rexecd
#
# run comsat as root to be able to print partial mailbox contents w/ biff,
# or use the safer tty:tty to just print that new mail has been received.
#comsat dgram udp wait tty:tty /usr/libexec/comsat comsat
#
# ntalk is required for the 'talk' utility to work correctly
#ntalk dgram udp wait tty:tty /usr/libexec/ntalkd ntalkd
#tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
#tftp dgram udp6 wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
#bootps dgram udp wait root /usr/libexec/bootpd bootpd
#
# "Small servers" -- used to be standard on, but we're more conservative
# about things due to Internet security concerns. Only turn on what you
# need.
#
#daytime stream tcp nowait root internal
#daytime stream tcp6 nowait root internal
#daytime dgram udp wait root internal
#daytime dgram udp6 wait root internal
#time stream tcp nowait root internal
#time stream tcp6 nowait root internal
#time dgram udp wait root internal
#time dgram udp6 wait root internal
#echo stream tcp nowait root internal
#echo stream tcp6 nowait root internal
#echo dgram udp wait root internal
#echo dgram udp6 wait root internal
………

/etc/inetd.conf の各行のカラムは、次のような意味になっています。

  • サービス名
  • ソケットの形式
  • プロトコル
  • {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]
  • user[:group][/login-class]
  • デーモンプログラムのパス
  • デーモンプログラムの起動引数

max-child には、起動するデーモンの最大個数を指定できます。また、max-connections-per-ip-per-minute には、1分あたりに同じIPアドレスから接続できる最大の接続数を指定できます。user および group は、それぞれどのユーザ、グループでデーモンを起動するのかの指定です。デーモンのログインクラス以外を指定するには、ここに /login-class の形式でログインクラスを指定します。
上記「/etc/inetd.conf 抜粋」の後半部分には、デーモンプログラムのパスとして internal と記載されている行があります。これらのサービスは inetd の内部に実装されている機能なので、対応する外部のデーモンはありません。

telnet サーバの設定

telnet のサーバである telnetd デーモンは、inetd から起動される代表選手です。telnet のサーバを有効にするには、次のように /etc/inetd.conf ファイルの該当する行のコメントを外します。


telnet stream tcp nowait root /usr/libexec/telnetd telnetd

FTPサーバの設定

ftp のサーバである ftpd デーモンも、inetd から起動されるメジャーなデーモンです。ftpd のデーモンを有効にするには、以下に示す /etc/inetd.conf ファイルの該当する行のコメントを外します。


ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

ftp のプロトコルは、コマンドの送信に21番のポートを使いますが、パッシブモードというモードを指定しない限り、データの送信には別のポートが使われます。このあたりの事情は、inetd から起動される他のデーモンと比べると特殊ですので、netstat -a などでポートの状況を観察する際や、ファイアウォールの設定には注意が必要です。

FreeBSD の ftpd には、いくつかの設定ファイルがあります。

ftpd の設定ファイル
ファイル 内容
/var/run/nologin いっさいのログインを禁止にする
/etc/ftpwelcome ログイン前に表示されるメッセージ
/etc/ftpmotd ログアウト後に表示されるメッセージ
/etc/ftpusers ログインできないユーザ一覧
/etc/ftpchroot ログイン後に chroot されるユーザ一覧
/etc/ftphosts 仮想ホストの設定ファイル

/var/run/nologin というファイルは、デーモンを終了せずに FTP サービスを一時的に中止できます。FTP で公開しているディレクトリのメンテナンスなどに利用すると便利です。簡単に /var/run/nologin を作成するには、次のように touch コマンドを使うとよいでしょう。


# touch /var/run/nologin

/var/run/nologin ファイルを削除すると、FTPのサービスはまた元通り利用でるようになります。
クライアントから ftp コマンドでログインする場合に、メッセージが表示されることがあります。このような表示を行いたい場合、ログイン前に表示されるメッセージは /etc/ftpwelcome に記述し、ログイン後に表示されるメッセージについては /etc/ftpmotd に記述しておきます。

/etc/ftpusers には、セキュリティー維持のため ftp からはログインできないアカウントが列挙されています。初期アカウントのうち、ftp からはログインされるべきではないアカウントは、デフォルトでこのファイルにアカウント名が記述されています。

/etc/ftpchroot には、ログイン後 chroot されるユーザアカウント、あるいはグループを列挙します。グループ名を指定する場合には「@」を前置きします。たとえば、games というグループを ftp 後 chroot するようにしたいのであれば、/etc/ftpchroot に @games と記載します。

anonymous FTP の匿名ログインを行えるようにするには、ユーザ名 ftp というアカウントを作成します。このアカウントのパスワードはロックしておき、ログインシェルは /sbin/nologin にしておきます。ftp ユーザのホームディレクトリは、anonymous FTP で公開するディレクトリを指定します。
anonymous FTP を公開しているサーバでどのようなファイルがダウンロードされているかを把握するには、ftpd のデーモン起動に -S というオプションをつけます。すると、/var/log/ftpd というファイルに、時刻、ログイン時に anonymous ユーザのパスワードとして入力した e-mail アドレス、クライアントマシンの名前、ファイル名、ファイルサイズなどの転送内容が記録されるようになります。1つ注意が必要なのは、/var/log/ftpd ファイルが存在しない状態で ftpd に -S オプションをつけただけでは、ログが開始されない点です。ログを記録するには、touch /var/log/ftpd などのコマンドを実行し、あらかじめ空のファイルを作成しておきます。

/etc/ftphosts では仮想ホストの設定を行います。仮想ホストは、DNS や hosts ファイルなどでサーバに複数のマシン名を付けたり、サーバに複数のIPアドレスを設定しておき、それぞれのマシン名もしくはIPアドレスに対して接続されたかによって、ftpサーバをそれぞれ別のものに見せかける機能です。/etc/ftphosts には、1行に1つの仮想ホストの設定を記述します。1行をスペースもしくはタブで5つのフィールドに区切り、それぞれ次の内容を書き込みます。

  • ホスト名もしくは IPアドレス
  • anonymous ユーザに対応させるアカウント
  • ログファイル名(-S オプションを付けたときに記録される)
  • ログイン前のメッセージを記述したファイル
  • ログイン後のメッセージを記述したファイル

r系サーバの設定

rsh、rlogin などの、いわゆる r系のコマンドのサーバに対応するデーモンには、rshd、rlogind、rexecd の3つがあります。r系のデーモンを実行するには、/etc/inetd.conf ファイルの該当する行のコメントを外します。


shell stream tcp nowait root /usr/libexec/rshd rshd
login stream tcp nowait root /usr/libexec/rlogind rlogind
exec stream tcp nowait root /usr/libexec/rexecd rexecd

rshd は、基本的には rsh コマンドのサーバですが、rcmd(3) という C言語のライブラリ関数からも使われます。rcmd(3) の関数を使ってサーバに接続するプログラムを動作させるためにも、サーバ側で rshd が動作している必要があります。rlogind デーモンは rlogin のサーバです。rexecd は、rexec(3)という C言語のライブラリ関数を使ってサーバに接続するプログラムに対応するサーバです。

rexec(3) と rcmd(3) を使用する代表的なプログラムとしては、リモートのテープドライブに対してデータを入出力する、rmt というコマンドがあります。dump や tar などのコマンドから呼び出されて、リモートのテープドライブへのデータのバックアップや、リモートのテープドライブからのデータのリストアを行うために使われます。なお、r系サーバはセキュリティー的にはとても脆弱なので、インターネットから直接アクセスされるWAN上のマシンでは使用しないようにしましょう。