読者です 読者をやめる 読者になる 読者になる

TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

vsftpdの設定で謎のエラーにハマった

Linux

皆さん
こんにちは、こんばんは
TomoProgです。

今日はTwitterボット用にサーバを設定していたら、vsftpdの設定でハマったのでここに書いておきます。
ちなみにサーバは「Ubuntu14.04 amd-64 LTS」です。

それでは頑張っていきましょう。

vsftpdをインストールする

まずはvsftpdをインストールします。
インストールするには以下のコマンドをターミナルで入力します。

$ sudo apt-get install vsftpd

インストールはこれだけです。

vsftpd.confを設定する

vsftpdのインストールが完了したら、vsftpdの設定ファイルであるvsftpd.confを設定します。
ちなみにvsftpd.confの場所は/etc/vsftpd.confです。

# 書き込み許可(コメント解除)
write_enable=YES

# アスキーモードの転送許可(コメント解除)
ascii_upload_enable=YES
ascii_download_enable=YES

# ログイン時のバナーメッセージ(コメント解除)
# (ログイン時にバージョン情報の表示を行わないように設定)
ftpd_banner=Welcome to blah FTP service

# chroot許可(コメント解除)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

# ディレクトリごと一括での転送有効(コメント解除)
ls_recurse_enable=YES

# FTP接続時のルートディレクトリを設定(追記)
local_root=/home/tomoprog/ftp_root

# これはよく分からんがとりあえず追記
seccomp_sandbox=NO

ちなみに設定は下記のサイトを参考にさせていただきました。
www.server-world.info

さて、chroot_list_fileを有効にしたので、指定したリストファイルを作成しておきます。
今回はすべてのユーザのFTPでのルートディレクトリをlocal_rootに指定したディレクトリにしたかったので、空のリストファイルを作成します。

$ sudo touch /etc/vsftpd.chroot_list

すべての設定が終わったので、vsftpdを再起動します。

$ sudo service vsftpd restart

500 OOPSでハマる

さて、設定が終わったので、早速別の端末からFTP接続してみます。

# xxx.xxx.xxx.xxxはFTPサーバのIPアドレスを指定
$ftp xxx.xxx.xxx.xxx

上記のコマンドを入力すると、ユーザとパスワードを求められるので入力します。
すると以下のエラーメッセージが返ってきました。

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

英語とか分からんよ・・・。
というわけでGoogle先生に聞いてみると以下のサイトを教えてくれました。
ftp接続でrefusing to run with writable root inside chrootが出た時の対処法 | ムッシューの部屋

なるほど。
chrootした先に書き込み権限があるとエラーとなるようです。
かと言って書き込み権限を消してしまうとアップロードできないので、vsftpd.confに以下の一行を追記します。

allow_writeable_chroot=YES

これでもう一度FTP接続してみると・・・

230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

接続に成功しました!!

まとめ

  • refusing to run with writable root inside chroot()の対処方法はallow_writeable_chroot=YESをvsftpd.confに追記する


今日はvsftpdを設定してみました。
エラーが出てから、たった1行の追加に2時間かかったのは内緒です。
それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@TomoHelloxxx) | Twitter