Wie kann ich von dort aus auf ein Verzeichnis außerhalb einer Chroot zugreifen?

33

Ich habe einen Benutzer, der zu ihrem Home-Verzeichnis gehört, aber ich möchte, dass sie auch Dateien in diesem Verzeichnis verwalten kann /var/www. Als solches habe ich folgendes getan:

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

Wenn ich jedoch versuche, /wwwmit FileZilla zu öffnen, wird "keine solche Datei oder kein solches Verzeichnis" zurückgegeben. Ich kann das verknüpfte Verzeichnis sehen, aber ich kann nicht darauf zugreifen. Was mache ich falsch?

Doc
quelle

Antworten:

52

Symlinks sind im Wesentlichen nur Zeiger auf eine andere Datei. Sie können nicht auf etwas außerhalb der Chroot verweisen, da nach einer Datei mit diesem Namen gesucht wird ( /var/wwwder in der Chroot nicht vorhanden ist). Hardlinks hingegen sind Zeiger auf die Inode. Wenn Sie dies tun möchten, müssen Sie einen festen Link verwenden, indem Sie ihn weglassen -s. Sie können jedoch aus verschiedenen Gründen kein Verzeichnis (außer .und ..) in Linux fest verknüpfen (das wichtigste ist, dass es sich bei diesen Dateisystemen um eine DAG handelt ).

Vielleicht wäre der beste Weg, eine Bindemontage zu verwenden. Versuche dies:

mount --bind /var/www /home/username/www
Chris Down
quelle
ln: '/var/www': hard link not allowed for directory
Doc
7
@Doc - Verzeichnisse können unter Linux nicht fest verknüpft werden. Ein Bind Mount sollte funktionieren.
Chris Down
1
Kann ich dies zu fstab hinzufügen, um es dauerhaft zu machen?
Kornel
Könnten Sie Verzeichnisse durchgehen und den Baum mit harten Links replizieren? ZB wenn das Elternteil hat /foo/a.txtund /foo/bar/b.txtdu dann machen könntest 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? Oder würde das aus irgendeinem Grund immer noch nicht funktionieren? (Offensichtlich ist dies etwas, für das Sie ein Skript schreiben würden, anstatt es von Hand zu tun).
Shadowtalker
1
@ Kornel können Sie den noneModus zusammen mit der bindOption verwenden: serverfault.com/questions/613179/…
Yvan