Bagaimana saya bisa mengakses direktori di luar chroot dari dalamnya?

33

Saya memiliki pengguna yang chroot ke direktori rumahnya, tetapi saya ingin dia juga dapat mengelola file di dalamnya /var/www. Karena itu, saya melakukan hal berikut:

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

Namun, ketika saya mencoba untuk membuka /wwwdengan FileZilla mengembalikan "tidak ada file atau direktori". Saya dapat melihat direktori yang ditautkan, tetapi saya tidak dapat mengaksesnya. Apa yang saya lakukan salah?

Dokter
sumber

Jawaban:

52

Symlink pada dasarnya hanya petunjuk ke file lain, Anda tidak dapat menunjuk ke sesuatu di luar chroot karena sedang mencari file dengan nama itu ( /var/www, yang tidak ada di dalam chroot). Hardlinks di sisi lain adalah petunjuk ke inode. Karena itu, jika Anda ingin melakukan itu, Anda perlu menggunakan tautan keras dengan menghilangkannya -s. Namun, Anda tidak dapat menghubungkan tautan direktori (selain .dan ..) di Linux karena berbagai alasan (yang utama adalah bahwa sistem file tersebut adalah DAG ).

Mungkin cara terbaik adalah menggunakan bind mount. Coba ini:

mount --bind /var/www /home/username/www
Chris Down
sumber
ln: '/var/www': hard link not allowed for directory
Doc
7
@ Doc - Direktori tidak dapat dihubungkan dengan keras di Linux. Bind mount harus bekerja.
Chris Down
1
Bisakah saya menambahkan ini ke fstab untuk membuatnya gigih?
Kornel
Bisakah Anda melihat kembali melalui direktori dan mereplikasi pohon dengan tautan keras? Misal jika orang tua sudah /foo/a.txtdan /foo/bar/b.txtkemudian Anda bisa lakukan 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? Atau apakah itu masih tidak berhasil karena suatu alasan? (Jelas ini adalah sesuatu yang Anda akan menulis skrip untuk dilakukan, daripada melakukan dengan tangan).
shadowtalker
1
@Kornel Anda dapat menggunakan nonemode bersama dengan bindopsi: serverfault.com/questions/613179/…
Yvan