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つほど手順を忘れていたので追記。
- ftpユーザのログインシェルを /bin/false から /bin/passwd へと変更する(でないとftpでもログインできない)
- local_enable=YES だけでは、ftp以外のユーザでもログインできてしまう。 userlist_enable=YES, userlist_deny=NO として、/etc/vsftpd/user_list に ftp のみを記述すること。