vsftpdでchrootの設定を行うには。

ローカルユーザの場合と、anonymousユーザの場合で対応が異なる。

anonymousユーザ向けには、anon_rootでchroot先のディレクトリを設定するだけで終了。

# grep anon_root /etc/vsftpd/vsftpd.conf
anon_root=/var/ftp/pub
#

ローカルユーザ向けの場合には、少々手間が必要。
まず、local_root=<ディレクトリ名>として、ログイン後に移動させるディレクトリを指定する。
さらに、chroot_list_fileで指定したファイル(以降chroot_list_file)に該当ユーザを書き込んでおき、chroot_list_enable=YESとしてリストを有効にする。
(ちなみに、chroot_local_userをYESにすると、chroot_listの意味合いが違ってくるが、ここでは触れない。)


なお、chroot_listを有効にしておいてlocal_rootを指定しないと、ユーザのホームディレクトリにchrootされる。
sftpならともかくとして、ftpでユーザのホームディレクトリにアクセスさせるのはセキュリティ上好ましくないので、local_rootと必ずセットにすること。


逆に、local_rootを有効にしてchroot_listを無効にした場合、該当ユーザのログイン直後のディレクトリはlocal_rootで指定されたディレクトリであるものの、その上のディレクトリへも自由に移動できる。これもこれで危険。

/etc/vsftpd/vsftpd.conf

# chroot settings for local user
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/var/ftp
# chroot settings for anon user
anon_root=/var/ftp