FTP はファイル転送をサポートするインターネット・サービスのひとつだ。 多くのサービスがそうであるように、FTP もサーバ・クライアント・モデルに基づいて実装されている。 FTP クライアント(ftp コマンド)を使ってサーバに接続すると、ファイルシステムに自由にアクセスできるようになる。 サーバからファイルを取ってくるダウンロードや、ファイルを送り込むアップロードなどを行うことができる。
FTP サーバへのアクセスには、ユーザ FTP と anonymous FTP の2種類がある。 ユーザ FTP は、ホストにアカウントを持つ一般ユーザ向けのサービスで、 ホストにログインしたとき同様にファイルシステムにアクセスすることができ、 またアップロードやダウンロードも自由に行える (パーミッションさえあれば)。 anonymous FTP(匿名 FTP)は、ホストにアカウントがなくとも使える便利なサービスだ。 だがユーザ FTP と違ってパスワード認証がないため、パーミッションの代わりの制限を用意しなければならないし、きちんと対策を施さないと重大なセキュリティ問題を引き起こす。
FreeBSD には標準の FTP サーバが付いているが標準的な機能しか持っていないため、 別のものに入れ替えることが望ましい。 お勧めなのは wu-ftpd だ。 サポートサイトは WU-FTPD で、さまざまな情報がここに集められている。 現在のところ最新版は 2.6.0 だ。
インストール手順は次の通り。
# tar zxf wu-ftpd-2.6.0.tar.gz # cd wu-ftpd-2.6.0
# ./configure --prefix=/usr/local # make
# make installprefix を変更した場合、プログラム本体は /usr/local/sbin/in.ftpd となる。
# cd doc/examples # cp ftpaccess ftpconversions ftpusers /usr/local/etc内容は、もちろん変更しなければならない。 ftpaccess と ftpconversions の項を参照すること。
ftp stream tcp nowait root /usr/local/sbin/in.ftpd in.ftpd -a
# killall -HUP inetd
ftpaccess は wu-ftpd の動作を決定するファイルだ。 デフォルトでは /usr/local/etc に置かれる。 まず、サンプルとして付いてくるファイルの内容を説明しよう。 これを参考にして、自分のサイトに合わせて変更を行えばよい。
class class_name typelist addresstypelist には real、guest、anonymous の3種類を指定できる。 real はアカウント・ユーザ、anonymous は anonymous FTP ユーザ、guest はアカウント・ユーザだが anonymous と同じ扱いをすべきユーザのグループ。
これ以外に、次の設定を追加するとよい。
ftpconversions ファイルも、ftpaccess 同様 /usr/local/etc に置かれる。 こちらのファイルでは tar や gzip などダウンロード時に利用できるアーカイブなどのファイル変換プログラムの設定を行う。
FreeBSD で使う場合、gzip や compress、tar のパスが異なっているので、それなりに変更する必要がある。 ファイルを編集して正しいパスにするか、パス名に合わせてプログラムをコピーするなどの対応をしておく。
guest と指定されたユーザ(またはグループ)は、アカウント・ユーザでありながら anonymous ユーザと同様にアクセス時にユーザのホームディレクトリに chroot される。 ホームディレクトリ以外のファイルシステムへのアクセスを禁止することができるわけだ。 guest 指定はユーザ名またはグループ名で行える。 ftpaccess ファイルに次の書式で設定する。
/etc/passwd の各ユーザのホームディレクトリのエントリを書き換えると、ftp アクセスしたときに chroot すべきディレクトリと、デフォルトで cd するべきディレクトリを指定することもできる。 エントリが「/usr/home/guest/./incoming」となっていると、「/usr/home/guest」に chroot され、incoming ディレクトリがログイン時のカレントディレクトリとなる。
guestgroup、guestuser と逆の働きをする realgroup、realuser というオプションもある。
guestuser * realgroup admin
このように設定すると、admin グループ以外のすべてのユーザを guest とすることができる。
guest グループに入れられたユーザは、ftp アクセスしたとき /bin/ls が見えなくなってしまう。 このままだとディレクトリのリストが見られないので、ホームに /bin/ls をコピーしておかなければならない。
ユーザ名を anonymous としてサーバにアクセスすると、アカウントのパスワードではなくメールアドレスを尋ね、その上で匿名ユーザとしてログインを許すのが anonymous FTP サーバだ。 anonymous FTP は誰にでも使える便利なサーバだが、匿名性を隠れ蓑にイタズラを仕掛けられる可能性もあるので、むやみに許可するべきではない。 明確な理由や目的がない限り、設定しないようにすべきだ。
upload /usr/local/share/ftp * no upload /usr/local/share/ftp /incoming yes ftp ftp 0666yes 以降の引数は、アップロードされるファイルの uid、gid、パーミッションを示す。