TL;DR
chroot の影響を受けるユーザーは、chroot で設定されているディレクトリよりもシンボリックリンクの参照先が上位にある場合、適切な所有権を有していても、シンボリックリンクの参照先の操作はできない。
シンボリックリンクの参照先のファイルを操作したい場合は、mount
コマンドで設定すれば、操作することができる。
シンボリックリンクの参照先のファイルを操作する場合の対応
前提として
$ whoami
qiita
$ pwd
/home/qiita
$ ls -l ~/
drwxr-xr-x 10 qiita qiita 6144 Jun 14 09:59 public_html -> /mnt/efs/qiita/www/public_html
となっているとする。
mount コマンドの場合
一時的な対応であれば、mount コマンドで実行してしまう。
$ mount --bind /mnt/efs/qiita/www/public_html /home/qiita/public_html
継続的に設定を反映する場合
/etc/fstab
に記述する。
$ sudo vim /etc/fstab
/mnt/efs/qiita/www/public_html /home/qiita/public_html none bind
$ sudo mount -a
$ ls -l ~/
drwxr-xr-x 10 qiita qiita 6144 Jun 14 09:59 public_html
$ ls ~/public_html/
index.html
教訓
FTP や SFTP でログインするユーザーがいる場合、セキュリティ上の理由から chroot で参照できるディレクトリに制限をかけられている場合がある。
chroot をかけられているユーザーがいるかどうかを確認する場合
SSH ならば
$ cat /etc/ssh/sshd_config | grep ChrootDirectory
として、制限が設けられているユーザーの有無を確認する。
ftp ならば、
FTP サーバーが動いていることを確認して、
$ sudo netstat -natp | grep ":21 "
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2046/vsftpd
FTP サーバーの設定ファイルを確認する。vsftpd の場合は、
# chroot_local_user: ユーザのログインディレクトリを、そのユーザのルートディレクトリに変更 (chroot) する
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_users
で、chroot が有効になっているかを確認して、対象ユーザーのルートディレクトリを確認する。