いつからなのか既に忘れてしまいましたが、LinuxでFTPサーバといえばvsftpです。一昔前ではProftpなどもありましたが、標準的なFTPサーバということでvsftpのメモです。
■基本設定
まずyumでインストールします。
# yum install vsftpd # rpm -qa | grep vsftp vsftpd-2.2.2-11.el6.i686 |
設定ファイルは/etc/vsftpd/vsftpd.confになります。これを編集します。
# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO use_localtime=YES |
個人的な必須の設定変更として上記2点があります。
最初にanonymous ftpを無効としています。一昔前ですがanonymous ftp経由で不正侵入されたことがありそれ以来、これは必ず無効としておくべき設定と認識しています。
デフォルトではファイルをアップロードするとそのファイルの作成日時が9時間ずれて表示されます。これはデフォルトでGMTの日時が採用されているからであって、ローカルタイムを使用すべくuse_localtimeをyesにしています。
■chroot設定
ホスティングサーバなどでよくある設定ですが、FTPでログインした際に全てのディレクトリが見えるようにするのではなくそのユーザのホームディレクトリ以下のみ見えるように設定することが可能です。
# vi /etc/vsftpd/vsftpd.conf chroot_local_user=YES chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list # /etc/rc.d/init.d/vsftpd restart |
上記の設定で基本的にユーザは自分のホームディレクトリ配下のみ見えるようになりますが/etc/vsftpd/chroot_listに記載されているユーザは例外処理として全てのディレクトリが見えるようになります。/etc/vsftpd/chroot_listはデフォルトで存在しないファイルですので新規に作成する必要があります。
# vi /etc/vsftpd/chroot_list user1 user2 user3 |
1行に1ユーザづつ記載していきます。このファイルを変更してもvsftpの再起動は不要です。
■ログの採取
FTPのアップロード/ダウンロードのログを以下の設定で採取することが可能です。セキュリティ面を気にするならとっておくのもありかと。標準では/var/log/xferlogに出力されます。また、xferlog_std_formatでは標準的なフォーマットで出力するか独自のフォーマットで出力するか指定します。yesにするとwu-ftpdなどと共通のフォーマットで/var/log/xferlogに出力し、noにすると独自のフォーマットで/var/log/vsftpd.logに出力します。
# vi /etc/vsftpd/vsftpd.conf xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO |
■ログインユーザの制限
FTPログインできるユーザを制限することができます。
# vi /etc/vsftpd/vsftpd.conf userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list # /etc/rc.d/init.d/vsftpd restart |
vsftpdを再起動すると自動的に/etc/vsftpd/user_listが作成されます。ここに列挙されたユーザはFTPでのログインができなくなります。
# vi /etc/vsftpd/user_list # If userlist_deny=NO, only allow users in this file # If userlist_deny=YES (default), never allow users in this file, and # do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied. root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody user1 user2 user3 |
■データ転送量の制限
local_max_rate=<numetric> |
データ転送量を制限したい場合に使用するオプションです。このオプションではbytes/sec単位で最大転送レートを指定できます。0が指定される場合と指定されない場合は無制限となります。
■無効なシェルのFTPログイン
ホスティングサーバなどにありがちなのですがFTPではログインできるけど、SSHではログイン させたくないというときがあります。ユーザのシェルはデフォルトで/bin/bashとなっているところを/bin/falseなどの無効なシェルに変更した場合、FTP/SSHどちらもロ グイン不可となります。
これをFTPのみログイン可能なように設定変更することが出来ます。
# vi /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny \ file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth |
上記の太文字の部分が変更箇所でコメントアウトしています。この変更により/bin/falseのユーザなどでもFTPではログイン可能となります。シェルの変更コマンドは以下のようになります。
# usermod -s /bin/false user |