Jak mogę uzyskać dostęp do katalogu poza chrootem?

33

Mam użytkownika chrootowanego do jej katalogu domowego, ale chcę, aby mogła ona również zarządzać plikami w nim /var/www. W związku z tym wykonałem następujące czynności:

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

Jednak gdy próbuję otworzyć za /wwwpomocą FileZilla, zwraca „brak takiego pliku lub katalogu”. Widzę połączony katalog, ale nie mam do niego dostępu. Co ja robię źle?

Doc
źródło

Odpowiedzi:

52

Dowiązania symboliczne są w zasadzie tylko wskaźnikami do innego pliku, nie można wskazać na coś poza chroot, ponieważ szuka on pliku o tej nazwie ( /var/wwwktóry nie istnieje w chroot). Z drugiej strony hardlinks są wskaźnikami do i-węzła. Jako taki, jeśli chcesz to zrobić, musisz użyć twardego linku, pomijając -s. Nie można jednak na stałe połączyć katalogu (innego niż .i ..) w systemie Linux z różnych powodów (głównym z nich jest to, że te systemy plików są DAG ).

Być może najlepszym sposobem byłoby użycie oprawki bind. Spróbuj tego:

mount --bind /var/www /home/username/www
Chris Down
źródło
ln: '/var/www': hard link not allowed for directory
Dok.
7
@Doc - Katalogów nie można na stałe połączyć w systemie Linux. Podłączenie wiązania powinno działać.
Chris Down
1
Czy mogę dodać to do fstab, aby było trwałe?
Kornel,
Czy możesz przeszukiwać katalogi i powielać drzewo twardymi linkami? Np. Jeśli rodzic ma, /foo/a.txta /foo/bar/b.txtpotem możesz to zrobić 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? A może z jakiegoś powodu to nadal nie zadziała? (Oczywiście jest to coś, co napisałbyś skrypt do zrobienia, zamiast robić to ręcznie).
shadowtalker
1
@Kornel możesz używać nonetrybu wraz z bindopcją: serverfault.com/questions/613179
Yvan