Как я могу получить доступ к каталогу вне chroot из него?

33

У меня есть пользователь, привязанный к ее домашнему каталогу, но я хочу, чтобы она также могла управлять файлами внутри /var/www. Таким образом, я сделал следующее:

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

Тем не менее, когда я пытаюсь открыть /wwwс помощью FileZilla, он возвращает "нет такого файла или каталога". Я вижу связанный каталог, но не могу получить к нему доступ. Что я делаю не так?

доктор
источник

Ответы:

52

Символьные ссылки, по сути, являются просто указателями на другой файл, вы не можете указать на что-то вне chroot, потому что он ищет файл с таким именем ( /var/wwwкоторого нет внутри chroot). Жесткие ссылки, с другой стороны, являются указателями на индекс. Таким образом, если вы хотите сделать это, вам нужно использовать жесткую ссылку, опуская -s. Однако вы не можете жестко связать каталог (кроме .и ..) в Linux по ряду причин (главная из которых заключается в том, что эти файловые системы являются DAG ).

Возможно, лучшим способом было бы использовать крепление для привязки. Попробуй это:

mount --bind /var/www /home/username/www
Крис Даун
источник
ln: '/var/www': hard link not allowed for directory
Док
7
@Doc - каталоги не могут быть жестко связаны в Linux. Привязка должна работать.
Крис Даун
1
Могу ли я добавить это в fstab, чтобы сделать его постоянным?
Корнель
Не могли бы вы пройтись по каталогам и скопировать дерево с жесткими ссылками? Например, если родитель имеет, /foo/a.txtи /foo/bar/b.txtтогда вы могли бы сделать 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? Или это все еще не работает по какой-то причине? (Очевидно, это то, что вы бы написали сценарий, а не делать вручную).
Shadowtalker
1
@Kornel, вы можете использовать noneрежим вместе с bindопцией: serverfault.com/questions/613179/…
Иван