自前のNetBSDミラーサーバが欲しくなったので、NetBSD/i386 3.0で作ったサーバにAnonymous FTPサーバを立ててみる。
まず、/etc/inetd.confを書き換えてFTPサーバを有効にする。「ftp」で始まる行が見つからなければ以下の1行を追加する。
大抵は先頭に「#」を入れて以下の内容がコメントとして用意してあるので、「#」を削除して有効化するだけで使える。
これで一般ユーザからのFTP接続が可能になる。
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -ll
次に/etc/ftpd.confに「umask all 022」を追加する。これで一般ユーザがアップロードしたファイルのパーミッションが640ではなく、644になる。
同様に「umask guest 022」を追加すると、anonymousでFTP接続したユーザがアップロードしたファイルのパーミッションも640ではなく、644になる。
さらに「upload guest off」を追加すると、anonymousでFTP接続したユーザはアップロードできなくなる。
/etc/ftpd.confは最初存在しないので無ければ新規に作成してやる。
umask all 022 umask guest 022 upload guest off
で、一番重要なanonymousでFTP接続したユーザのホームディレクトリを用意してやる。場所はどこでもいいので、とりあえず適当に「/usr/share/ftpd」とか作ってみる。
mkdir /usr/share/ftpd
ここに昔はFTP接続した際にlsコマンドが使えなくなるので、binディレクトリをパーミッション111で用意して/bin/lsを入れておいたらしいけど、NetBSD/i386 3.0のftpdは無くてもlsコマンドが使えるっぽい。
ただ、lsコマンドを使った際にユーザとグループが表示されず、ユーザIDとグループIDの表示になってしまうので、etcディレクトリをパーミッション111で用意して/etc/groupと/etc/pwd.dbをパーミッション444でコピーしておく。
mkdir -m 111 /usr/share/ftpd/etc cp /etc/group /usr/share/ftpd/ cp /etc/pwd.db /usr/share/ftpd/etc/ chmod 444 /usr/share/ftpd/etc/*
本物の/etc/groupや/etc/pwd.dbを使うのに抵抗がある場合は見せてもいい(もしくはユーザIDやグループIDを見せたくない)ユーザとグループのみを記したgroupとmaster.passwdをetcディレクトリに作成して、master.passwdからpwd.dbをpwd_mkdbコマンドで作成する。
vi /usr/share/ftpd/etc/group
wheel:*:0: nobody:*:39:
vi /usr/share/ftpd/etc/master.passwd
root:*:0:0::0:0::: ftp:*:1005:39::0:0:::
pwd_mkdb -d /ftp /usr/share/ftpd/etc/master.passwd chmod 444 /usr/share/ftpd/etc/*
最後にftpユーザを作成する。ユーザIDやグループIDは何でもいいが、Apacheのパッケージに習うならばftpってグループを作成してやるのが良いかも知れない。ログインは出来ないようにシェルに/sbin/nologinを指定しておく。
groupadd ftp useradd -d /usr/share/ftpd -g ftp -s /sbin/nologin ftp
FTP接続時のログは/var/log/xferlogに書き込まれる。anonymousでFTP接続する際にパスワードがわりに入力するメールアドレスなどもここに記録される。
May 30 14:04:51 hoge ftpd[23142]: connection from foo.bar.com to hoge.bar.com May 30 14:04:58 hoge ftpd[23142]: ANONYMOUS FTP LOGIN FROM foo.bar.com, hogehoge@bar.com (class: guest, type: GUEST) May 30 14:05:02 hoge ftpd[23142]: Data traffic: 0 bytes in 0 files May 30 14:05:02 hoge ftpd[23142]: Total traffic: 391 bytes in 0 transfers