vsftpd 設定

vsftpd 設定

細かい設定が可能なので ProFTPD を利用していたのですが、故あって vsftpd へ乗り換えてハマったお話。

環境としては以下の通り。
・FreeBSD 9.3
・vsftpd 3.0.2

 

ハマった箇所と解決方法

chroot はみなさん設定すると思うのですが、vsftpd.conf に記述して再起動すると FTP 接続できなくなった。

$ ftp localhost

でログインを試みると下記エラー表示された。

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

結論としては /usr/local/etc/vsftp.conf に以下を記述して inetd を再起動して解決。

allow_writeable_chroot=YES

vsftp 公式サイトの Changelogvsftpd FAQ に記載されてないのはいかがなものかと思う。

 

 インストールと基本設定

ports からインストール。
/usr/ports/ftp/vsftpd にて
# make install clean

/usr/local/etc/vsftpd.conf を開き以下のコメントを有効にする。先頭の「#」をとる。

local_enable=YES
write_enable=YES
local_umask=022
ascii_upload_enable=YES
ascii_download_enable=YES
ls_recurse_enable=YES
# echo "vsftpd: ALL" >> /etc/hosts.allow

/etc/inetd.conf に下記を追加。

ftp    stream    tcp    nowait    root    /usr/local/libexec/vsftpd    vsftpd

inetd再起動。

# kill -HUP [inetdのプロセスID]

もし、起動してなければ inetd を起動。
# /etc/rc.d/inetd start
/etc/rc.conf に以下追記。
inetd_enable=”YES”

この時点で FTP 接続を確認し問題なければ chroot 設定へ。
/usr/local/etc/vsftp.conf の以下値を有効にする。コメント(先頭の#)をとる。

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/usr/local/etc/vsftpd.chroot_list

空の vsftp.chroot_list を作る。

# touch /usr/local/etc/vsftpd.chroot_list

特定ユーザのみホームディレクトリ以外に行ける様にするには、vsftpd.chroot_list に必要なユーザ名を列挙する。

foobar1
foobar2

時刻を日本標準時での表示にする

/usr/local/etc/vsftpd.conf に以下を追記。

use_localtime=YES

ドットファイルを表示する

force_dot_files=YES

パッシブモードを有効にする

/usr/local/etc/vsftpd.conf に以下を追記。

pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=ftp.example.com (またはIPアドレス)
pasv_min_port=4000 #パッシブモードの最小ポート任意の番号
pasv_max_port=4029 #パッシブモードの最大ポート任意の番号

パッシブモードを設定する際は TCP の上記の任意のポート番号を開けておくことを忘れずに。

ログファイルの設定

/usr/local/etc/vsftpd.conf の以下のコメントをとる。

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

ログローテーションの設定

vi /usr/local/etc/logrotate.d/vsftpd

以下を記載。

/var/log/vsftpd.log{
daily
rotate 4
create
nocompress
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/inetd.pid`
endscript
}

# kill -HUP [inetdのプロセスID] で接続を確認して問題なければ、とりあえずこれで一般的な FTP 接続設定は完了。

anonymous FTP を設定する

通常、設定しない方が安全だが必要ある場合の最低設定をする。
ファイルのアップロード、削除可能にする。
ファイル所有者は ftp (デフォルト)。
ルートディレクトリ /ftp (デフォルト)に chroot される。

/usr/local/etc/vsftpd.conf の以下の記述を変更する。

anonymous_enable=YES (デフォルト:NO)

vsftpd.conf に以下を追記。
アノニマスユーザのパスワードを設定するための記述。

secure_email_list_enable=YES

アノニマスユーザのパスワードファイルを作る。

# vi /usr/local/etc/vsftpd.email_passwords

ここにパスワードを記述しておく。

アノニマスユーザのファイル、ディレクトリ作成削除許可の設定。

anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES

注意点

vsftpd にはログイン失敗に対する制御がない?
ProFTPD だと MaxLoginAttempts, wu-ftpd なら loginfails を指定することで、何回かログインの失敗をした場合に接続を切ることができる。これはログインの回数が多い場合は不正アクセスを試みている可能性が高いのでそれを制御するもの。
実際、ログを見るとブルートフォースアタックを試行してるくさいアクセスは頻繁にあるはず。なんで vsftpd にはこの設定ないのだろうか。


設定の参考

サーバの実験室 Redhat/Fedora

FreeBSDサーバー構築マニュアル

 

 

コメントを残す