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_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

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