¿Cómo puedo acceder a un directorio fuera de un chroot desde dentro?

33

Tengo un usuario que está en su directorio de inicio, pero quiero que ella también pueda administrar archivos dentro /var/www. Como tal, hice lo siguiente:

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

Sin embargo, cuando intento abrir /wwwcon FileZilla me devuelve "no existe tal archivo o directorio". Puedo ver el directorio vinculado, pero no puedo acceder a él. ¿Qué estoy haciendo mal?

Doc
fuente

Respuestas:

52

Los enlaces simbólicos son esencialmente punteros a otro archivo, no puede señalar algo fuera del chroot porque está buscando un archivo con ese nombre ( /var/wwwque no existe dentro del chroot). Los enlaces duros, por otro lado, son punteros al inodo. Como tal, si desea hacer eso, debe usar un enlace duro omitiendo -s. Sin embargo, no puede vincular un directorio (que no sea .y ..) en Linux por varias razones (la principal es que esos sistemas de archivos son un DAG ).

Quizás la mejor manera sería usar un montaje de unión. Prueba esto:

mount --bind /var/www /home/username/www
Chris Down
fuente
ln: '/var/www': hard link not allowed for directory
Doc
77
@Doc: los directorios no se pueden vincular en Linux. Un montaje de unión debería funcionar.
Chris Down
1
¿Puedo agregar esto a fstab para que sea persistente?
Kornel
¿Podría recurrir a través de directorios y replicar el árbol con enlaces duros? Por ejemplo, si el padre tiene /foo/a.txty /foo/bar/b.txtluego podría hacer 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? ¿O eso todavía no funcionaría por alguna razón? (Obviamente, esto es algo para lo que escribirías un guión, en lugar de hacerlo a mano).
shadowtalker
1
@Kornel puede usar el nonemodo junto con la bindopción: serverfault.com/questions/613179/…
Yvan