Я пытаюсь открыть иерархию домашних каталогов для ряда тюрем FreeBSD. Домашние каталоги настроены так, что каждый из них представляет собой уникальный набор данных ZFS. Тюрьмы используются для разработки и, следовательно, создаются и уничтожаются на регулярной основе.
Моей первой мыслью было просто использовать nullfs установить /home
внутри тюрьмы, но nullfs не предоставляет никакого доступа к подчиненным файловым системам.
Моей второй мыслью было экспортировать каталоги через NFS, а затем запустить демон автомонтирования (amd) внутри каждой тюрьмы. Это было бы просто сработало ... если бы можно было выполнять монтирование NFS внутри тюрьмы. Но это не так.
Моей третьей мыслью было запустить amd на хосте и обеспечить nullfs монтируется в тюрьмы ... но amd поддерживает nullfs не существует.
Моей четвертой мыслью было вернуться к экспорту каталогов с помощью NFS, потому что, конечно, amd работает с NFS, верно? К сожалению, вместо того, чтобы монтировать каталог в целевой точке монтирования, amd любит монтировать объекты во временном месте (/.amd_mnt/...
), а затем создать символическую ссылку ... которая, конечно же, бесполезна в среде тюрьмы.
Так что, возможно, вы могли бы использовать nullfs открыть подкаталог /.amd_mnt
в тюрьму? Нет! Это возвращает нас к моей первой попытке, в которой мы обнаружили, что нет способа получить доступ к подчиненным файловым системам, используя nullfs.
А потом у меня взорвалась голова.
Есть ли хорошее решение для того, что я пытаюсь сделать? А плохой решением было бы запустить сценарий после загрузки тюрьмы, который создаст несколько nullfs точки монтирования для каждого домашнего каталога, но это довольно неудобно - его нужно будет запускать периодически, чтобы учесть новые или удаленные каталоги. В общем, мне пришлось бы написать плохой автомонтажник.
Должен быть способ получше. Помоги мне, Serverfault, ты моя единственная надежда!
ОБНОВЛЕНИЕ 1: Мне пришло в голову, что я могу частично решить проблему с помощью pam_mount
, хотя это в лучшем случае будет неполным. Кроме того, из документации неясно, pam_mount
может автоматически создать целевую точку монтирования. Если для этого требуется, чтобы точка монтирования существовала априори, это решение не будет лучше, чем плохой автомонтаж, который я уже предложил.
ОБНОВЛЕНИЕ 2: Как описано в ответах ниже, установка VFCF_JAIL
в файловой системе NFS позволяет тюрьмам выполнять монтирование NFS. К сожалению, автоматическое монтирование продолжает вести себя бесполезно, и при запуске в тюрьме оказывается очень хорошо заклинило таким образом, что для удаления записи процесса необходима перезагрузка системы.
Привет, Ларс! Вы задали интересный вопрос, и после некоторого исследования я, возможно, нашел для вас ответ.
В соответствии с этот и другие посты, возможно, можно будет установить VFCF_JAIL
атрибута поставщика файловой системы NFS, который теоретически позволит тюрьмам выполнять монтирование NFS. Это может, в свою очередь, позволить запустить amd внутри тюрьмы ... что аккуратно решит эту проблему.
Сегодня вечером попробую пересобрать ядро, чтобы посмотреть, как все пойдет. Это не обязательно лучшее решение (поскольку это означает, что вам нужно убедиться, что это изменение сохранится при будущих обновлениях ядра), но было бы интересно, если бы оно сработало.
И помни...
___________ ____
______/ \__// \__/____\
_/ \_/ : //____\\
/| : : .. / \
| | :: :: \ /
| | :| || \ \______/ Don't try to rebuild the
| | || || |\ / | kernel remotely because
\| || || | / | \ you know you're just
| || || | / /_\ \ going to hose the server.
| ___ || ___ || | / / \
\_-_/ \_-_/ | ____ |/__/ \
_\_--_/ \ /
/____ /
/ \ /
\______\_________/