FTPサーバにvsftpdを使用してchroot先のディレクトリにシンボリックリンクを使用している場合、権限の問題で上手くアクセスできない場合がありますので注意すべきポイントをまとめます。

chroot先でシンボリックリンクを使っても、権限のないディレクトリへはアクセスできない

「vsftpd.conf」ファイルの「chroot_local_user」がYESが設定されている場合、chroot先ディレクトリに作ったシンボリックリンク先がchroot先ディレクトリよりも上位の階層にある場合はそのリンクにファイルを転送できないようです。

例えばAというユーザでFTPログインしたときのchroot先が/home/A/に設定されている場合、このユーザは/home/Bや/tmpなどにはアクセスできないといった具合になります。

具体的には下記のようなシンボリックリンクを張ったとしても、AでログインしたFTPクライアントからは/home/A/lnkにはファイルを転送できない。

$ ln -s /home/B/org /home/A/lnk
/home/A/lnk -> /home/B/org

chroot_list_enableを許可することで、シンボリックリンク先にアクセスできる

「vsftpd.conf」ファイルの「chroot_list_enable」をYESにし、「chroot_list_file」で指定したファイルに許可するユーザ名を書けばchroot先より上位のディレクトリへのアクセスを許可することができます。

$ vi /etc/vsftpd/vsftpd.conf
...
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
...

ただし、この方法ではchrootを許可したユーザが権限のある任意のディレクトリにアクセスできてしまうので、セキュリティレベルは落ちる懸念があります。

シンボリックリンクの代わりにmount –bindを利用する

シンボリックリンクの代わりにmount –bindを使用すると、chroot_list_enableで許可をしなくてもリンク先にアクセスすることができる。

$ mount --bind /home/B/org /home/A/lnk

この方法だとセキュリティレベルも落ちる懸念がなく、シンボリックリンクと同様のことを実現することが出来ます。