chrootの外部からディレクトリ内にアクセスするにはどうすればよいですか?


33

ホームディレクトリにchrootされたユーザーがいますが、内のファイルも管理できるようにしたいです/var/www。そのため、次のことを行いました。

root@server:/home/username# ln -s /var/www www
root@server:/home/username# cd www
root@server:/home/username/www# chown username:username *

ただし、/wwwFileZillaで開こうとすると、「no such file or directory」が返されます。リンクされたディレクトリは表示できますが、アクセスできません。何が間違っていますか?

回答:


52

シンボリックリンクは本質的に別のファイルへの単なるポインタであり、その名前のファイルを探しているため(/var/wwwchroot内に存在しない)、chrootの外側の何かを指すことはできません。一方、ハードリンクはiノードへのポインターです。そのため、それを行うには、を省略してハードリンクを使用する必要があります-s。ただし、さまざまな理由により、Linuxのディレクトリ(.および以外..)をハードリンクすることはできません(主な理由は、これらのファイルシステムがDAGであることです)。

おそらく、最良の方法はバインドマウントを使用することです。これを試して:

mount --bind /var/www /home/username/www

ln: '/var/www': hard link not allowed for directory
Doc

7
@Doc-ディレクトリをLinuxでハードリンクすることはできません。バインドマウントが機能するはずです。
クリスダウン

1
これをfstabに追加して永続化できますか?
コーネル

ディレクトリを再帰処理し、ハードリンクでツリーを複製できますか?例えば、親が持ってい/foo/a.txt/foo/bar/b.txt、あなたができるならmkdir -p ./chroot/foo/; mkdir -p ./chroot/foo/bar; ln /foo/a.txt ./chroot/foo/a.txt; ln /foo/bar/b.txt ./chroot/foo/bar/b.txt?それとも、何らかの理由でまだ動作しませんか?(明らかに、これは手で行うのではなく、実行するスクリプトを記述するものです)。
シャドウトーカー

1
あなたが使用することができます@Kornel noneとともにモードbindオプション:serverfault.com/questions/613179/...
イヴァン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.