Comment puis-je accéder à un répertoire situé en dehors d'un chroot?

33

J'ai un utilisateur qui est chrooté dans son répertoire personnel, mais je veux qu'elle puisse également gérer des fichiers dans /var/www. En tant que tel, j'ai fait ce qui suit:

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

Cependant, lorsque j'essaie d'ouvrir /wwwavec FileZilla, il ne renvoie "aucun fichier ou répertoire de ce type". Je peux voir le répertoire lié, mais je ne peux pas y accéder. Qu'est-ce que je fais mal?

Doc
la source

Réponses:

52

Les liens symboliques sont essentiellement des pointeurs sur un autre fichier. Vous ne pouvez pas pointer sur quelque chose en dehors du chroot, car ce dernier recherche un fichier portant ce nom ( /var/wwwqui n'existe pas à l'intérieur du chroot). Les liens durs, d’autre part, sont des pointeurs sur l’inode. En tant que tel, si vous voulez faire cela, vous devez utiliser un lien dur en omettant -s. Cependant, vous ne pouvez pas lier en dur un répertoire (autre que .et ..) sous Linux pour diverses raisons (la principale étant que ces systèmes de fichiers sont des DAG ).

Le meilleur moyen serait peut-être d'utiliser un support de liaison. Essaye ça:

mount --bind /var/www /home/username/www
Chris Down
la source
ln: '/var/www': hard link not allowed for directory
Doc
7
@Doc - Les répertoires ne peuvent pas être liés durement sous Linux. Un montage de liaison devrait fonctionner.
Chris Down
1
Puis-je ajouter ceci à fstab pour le rendre persistant?
Kornel
Pourriez-vous recourir à travers des répertoires et répliquer l'arborescence avec des liens en dur? Par exemple, si le parent a /foo/a.txtet /foo/bar/b.txtalors vous pourriez faire 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? Ou cela ne fonctionnerait-il toujours pas pour une raison quelconque? (Évidemment, vous devez écrire un script plutôt que de le faire à la main).
shadowtalker
1
@Kornel, vous pouvez utiliser le nonemode avec l' bindoption: serverfault.com/questions/613179/…
Yvan