🙆‍♀️

vsftpd で chroot する

2024/07/08に公開

この作業記録は、さくらインターネットのVPSに、最初はCentOS 8で、その次にDebian 12で作業した記録になります。

chroot とは

許可されたディレクトリー以下しか閲覧できなくする機能です。
FTP接続時に、アカウント毎に閲覧できるディレクリーを変更したい場合に使います。

前提

ここでは、vsftpd で chroot するためだけの設定を説明します。
vsftpdは、その他の設定により、外部ファイルが、許可リストになったり拒否リストになったり紛らわしいので注意が必要です。

設定

具体的な設定は以下の通り。

vsftpd.conf
# chrootのlistを有効にする
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# userlist設定
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

# このディレクトリーに、ユーザー名の個別の設定ファイルを作成する
user_config_dir=/etc/vsftpd/user_conf
chroot_list
# chrootの対象になるuser一覧
# ここに列挙したユーザー名がchrootの対象になる
#
#「chroot_local_user」をYESにするとホームディレクトリより上層へのアクセスが禁止されます。
# ただし、「chroot_list_enable」をYESにすることでホームディレクトリより上層へのアクセスを許可するユーザーのリストが有効となります。
# それにより、「chroot_list_file」に記述したユーザーのみ上層へのアクセスが許可されます。


apple
google
user_list
# userlist_deny=NO  だと許可(allow)リストになる
# userlist_deny=YES だと拒否(deny)リストになる
admin
apple
google
user_conf/apple
# このディレクトリーより上には移動できない
local_root=/var/www/apple.com
user_conf/google
# このディレクトリーより上には移動できない
local_root=/var/www/google.com

トラブルシューティング

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

chrootした先に書き込み権限があるとエラーになる。設定で回避できる。

vsftpd.conf
allow_writeable_chroot=YES

Discussion