at posts/single.html

3分FTPクッキング

家族からインターネット経由でちょっと大きめのファイルを送ってもらうことになった。 いつもはファイル転送にSFTPを使っているのだけど、今回は先方のリクエストでFTPを使うことにした。

まずはFTPサーバを選ぶところから。 ProFTPDでもよかったんだけど、今回限りしか使わないということもあり、最近のRedHatでも使われているvsftpdを使うことにした。 vsftpdのvsはVery Secureという意味らしい。 これなら、インターネット経由の接続を一時的に許しても(心理的に)安心かな。

インストールはいつもどおりemergeで一発だった。

$ sudo emerge vsftpd

不特定多数に公開するわけではないので、こんなポリシーで設定する。

  • 匿名アクセスは使わない(インターネット経由なので)
  • ftpユーザのみログイン可能
  • ホームディレクトリ (/home/ftp) より上位のディレクトリにはアクセス不可

設定ファイルは /etc/vsftpd/vsftpd.conf 。 ProFTPDよりシンプルでわかりやすい。

anonymous_enable=NO    # 匿名アクセスを許可しない
local_enable=YES       # ローカルユーザでログイン可能
write_enable=YES       # ログイン後に書き込み可能
local_umask=022        # 書き込むファイルのパーミッションは755
chroot_local_user=YES  # ホームディレクトリより上位は見えない

書き込み先は /home/ftp/pub にした。

# mkdir /home/ftp/pub
# chown ftp:ftp /home/ftp/pub
# ls -al /home/ftp
total 2
drwxr-xr-x    3 root     root           72 Feb 22 01:26 .
drwxr-xr-x    4 root     root          120 Feb 22 00:52 ..
drwxrwxrwx    3 ftp      ftp            72 Feb 22 20:06 pub

/etc/xinetd.d/vsftp の disable を no にして準備完了。

追記

2つほど手順を忘れていたので追記。

  1. ftpユーザのログインシェルを /bin/false から /bin/passwd へと変更する(でないとftpでもログインできない)
  2. local_enable=YES だけでは、ftp以外のユーザでもログインできてしまう。 userlist_enable=YES, userlist_deny=NO として、/etc/vsftpd/user_list に ftp のみを記述すること。

関連する日記