manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その3

FTPサーバー vsftpd

2013年11月23日 2014年12月20日 更新

 FTPサーバーは前回までずっとproftpdというのを使ってきました。今回どうしようか考えましたが、CentOS付属のvsftpdというのをそのまま使うことにします。
機能的にはproftpdの方が充実しているという話もありますが、写真や各種資料の閲覧やダウンロードにはWebShareというファイルブラウザを導入しましたし、最近は友人がホームページのアップロードに時折使う程度なので最低限の機能のものでかまいません。
vsftpd-2.2.2がすでにインストールされています。

設定
 設定ファイルは/etc/vsftpd/フォルダの中にあります。
アノニマス接続は許可せず、ローカルアカウントのみ許可のささやかな設定です。
vsftpdの設定はYES/NOで許可不許可が逆転したりしますので、勘違いがちょっと怖いです。

/etc/vsftpd/vsftpd.conf
anonymous_enable=NO …アノニマスFTPサーバーは無効。
local_enable=YES …ローカルユーザからの接続は有効。
write_enable=YES …FTP経由でのファイルの書き込み有効。
local_umask=022 …アップロードファイルのパーミッションマスク。
xferlog_enable=YES …転送(アップロード/ダウンロード)のログを記録。
connect_from_port_20=YES …データの転送に20番ポートを使用。
xferlog_file=/var/log/vsftpd.log …転送ログのログファイル。
vsftpd_log_file=/var/log/vsftpd.log …その他接続、ログインなどのログファイル。
xferlog_std_format=NO …wu-ftpd互換形式ではなくvsftpd形式のログをとる。
ascii_upload_enable=YES
ascii_download_enable=YES
 …アスキー形式のアップロード/ダウンロードを有効に。無効だと固まってしまうクライアントがあるとか。
chroot_local_user=YES …ローカルユーザの上位ディレクトリ参照は不可。
chroot_list_enable=YES …上位ディレクトリ参照ユーザーリスト使用。
chroot_list_file=/etc/vsftpd/chroot_list …上位ディレクトリ参照ユーザーリストファイル。
 …ファイルは空でもいいから作っておかないとだれもログインできません。
listen=YES …スタンドアロンモードで動作。
pam_service_name=vsftpd …PAM(ローカル)認証サービスの有効化とサービス名(/etc/pam.d/vsftpd)の指定。
userlist_enable=YES …アクセスユーザーリストを有効に。
userlist_deny=YES …アクセスユーザーリストにはログイン拒否ユーザ名を記載。
tcp_wrappers=NO …TCP Wrapperによるアクセス制御はしない。
pasv_enable=YES …FTP PASSIVE接続を有効に。
pasv_promiscuous=NO …YESでPASSIVE接続のセキュリティーチェックをしない。
pasv_min_port=6021
pasv_max_port=6050
 …FTP PASSIVEポートの範囲。空いているポートから適当に。もちろんファイアウォールにも設定。
use_localtime=YES …タイムスタンプはローカルタイム(日本時間)を使用。
以上、ディフォルトではあっても明示的に記載している項目もあります。(バージョンアップでディフォルトが変えられることもごくまれにありうる。昔実際にあった。)

/etc/vsftpd/ftpusers …そのまま(一般的なシステムユーザが記載されている)。

/etc/vsftpd/user_list …そのまま(一般的なシステムユーザが記載されている)。

/etc/vsftpd/chroot_list …新規作成。
admin …上位ディレクトリにアクセスできるユーザ。空でもかまわない。

 とまあ、こんなところで起動設定をしてFFFTPでつないで実際に使ってみると何も問題なく使えます。"NLST -alL" などの、proftpdではパッチを当てないと動作しなかったRFC非準拠のコマンドオプションも問題なく使えます。
 
 またFTPにはけっこうアタックアクセスも多いのですが、Fail2banには vsftpd のフィルターがあり、そのまま適用しました。

FTPが繋がらなくなる (2014年12月20日追記)
友人がこのサーバーを使ってホームページを公開しており、久々にいつものFFFTPでアップロードしようとしたら、
500 OOPS: vsf_sysutil_bind
というエラーが出て繋がらないと言ってきた。

自分でも試してみたら、同じエラーメッセージでやはり繋がらない。
ログには特にエラーとしては記録されておらず、
FTP command: Client "(IPアドレス)", "PASV"
でぷっつり切れている。

ftpを使っているのはこの友人だけでいつからこうなったのかははっきりわからないが、ログを見てみるとどうやらここ1ヶ月くらいのことらしい。
その間けっこうパッケージのアップデートがありvsftpdもアップデートされていたので、もしやこれかと思い試しに前のバージョンにダウングレードしてみたが、変わらない。
もちろん設定をいろいろ変えても繋がりそうもない。

さらにいろいろ検索しても解決に至りそうな記事も出てこない。
うーむ、困ったな。

でもふと最近SELinuxのアップデートもあったことを思い出し、試しに
# setenforce 0
でSELinuxを無効にして試してみると、な、なんと、ちゃんと繋がる。

さっそくSELinux ManagementソフトでBoolian値を見てみると、
ftp_use_passive_mode
という項目があり、値はセットされていない(すなわち拒否)。
で、セットするとSELinux有効でもOKとなった。

以前からこの項目があったかどうかはわからないが、もしかしたら今回のSELinuxのアップデートにより、無効の状態で追加されたのかもしれない。

しかし拒否ログは一切出ていないので、SELinuxで拒否されたということがわからなかった。
SELinuxを使っていて最近何も変えてないのにftpが繋がらなくなったという方は確認してみてください。