vsftpdに対して 500 OOPS のエラーが出たので対処しようとして、結果的にルートディレクトリから遡れないように設定した話

WPサイト引っ越し(2018/11/20)|Ewig Leere(Lab)の手順で構築したサーバでの話です。

症状

vsftpdサーバを建てて、FTPでファイルアップロードをしようとしたら以下のエラーメッセージが出て接続できませんでした。

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

原因

# chown apache:apache /var/www/htdocs
# usermod -aG wheel,apache SITEUSER

したのに、ディレクトリ権限が755のままでFTPユーザ(SITEUSER)でログインしようとしたため。

対処

# chmod 775 /var/www/htdocs

でOKでした(上記の通りapacheグループにユーザを追加しているため)。

以下ルートディレクトリより上の階層に遡れないようにするための設定

と、原因さえ分かってしまえば非常に簡単なことだったのですが、対処法をあれこれ試す中で、「あ、ルートディレクトリから上の階層に遡れないようにするための設定をしておこう」となったのでついでにやってしまいました。

以下その設定内容。

# vi /etc/vsftpd/vsftpd.conf

## 設定ファイルを指定
userlist_file=/etc/vsftpd/user_list
## ユーザごとの設定ファイルを指定
user_config_dir=/etc/vsftpd/user_conf
## 本来の書き込みに関する対処として追記したもの(結果的には効果なし)
seccomp_sandbox=NO
allow_writeable_chroot=YES

設定ファイルに上の内容を追記。

# mkdir /etc/vsftpd/user_conf
# vi /etc/vsftpd/user_conf/SITEUSER

local_root=/var/www/SITE/web/

ユーザごとの設定ファイルのディレクトリを作成、ユーザの名前でファイルを作成し、ルートディレクトリを指定。

これで上の階層に遡れなくなりました。

備考

# vsftpd -v
vsftpd: version 3.0.2

vsftpdのバージョンは3.0.2でした。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。