Есть ли инструмент linux vfs, который позволяет связывать каталог в другом месте (например, mount -bind) в пространстве пользователя?

Для пользовательского процесса я хочу установить каталог в другом месте, но в пространстве пользователя без привилегий root. Что-то вроде mount –bind / origin / dest, но с оберткой vfs. Как отредактированный chroot с помощью usermode.

Программа будет обертывать системные вызовы на файлы, чтобы «заменить» нужные пути. Его можно вызвать с помощью командной строки, например:

bindvfs / fake-home: / home ls / home

Я уверен, что этот алред существует! 🙂

Вы можете использовать PRoot почти так же, как в вашем примере:

proot -b /fake-home:/home ls /home 

В отличие от BindFS / FUSE, PRoot может связывать файлы и каталоги, которыми вы не владеете.

Программа- попугай может делать то, о чем вы просите: перехватить системные вызовы и перенаправить определенные пути (например, все пути, начинающиеся с /anonftp для прозрачного доступа к удаленным файлам через FTP). Он также полностью работает в пользовательском пространстве.

Однако, несмотря на внушительный массив обычных и необычных сетевых протоколов, у parrot нет никакого модуля для простой переборки файловой системы ->, как вы просите. Это должно быть довольно просто добавить, если вы знаете программирование на языке C.

Кроме того, bindfs (который работает поверх FUSE ) работает как mount --bind в пользовательском пространстве. (Но это идет в обратном направлении по отношению к повторному режиссуре /home to /fake-home как вы упомянули в своем вопросе.)

VFS уже позволяет монтировать файловые системы без полномочий root. Вы можете добавить параметр user или users в запись fstab и убедиться, что vfs.usermount=1 находится в /etc/sysctl .

Тем не менее, ничто из этого не даст вам управления с помощью chroot. Опция bind не будет изменять разрешения или разрешать «альтернативный» доступ, это вторая запись mtab для той же точной файловой системы и содержимого. Изменения в монтировке привязки влияют на оригинал.

Я должен убедиться, что вы уточните свою конечную цель, прежде чем двигаться дальше.

mount_namespaces позволит вам mount --bind не увиденный другими процессами. Но обычно mount --bind ограничивается только пользователем root (по соображениям безопасности). Таким образом, для того, чтобы mount_namespaces использовались некорректно, вы должны сначала использовать user_namespaces, чтобы стать «локальным корнем» в новом пространстве имен, где эта операция будет разрешена.

Вы можете играть с этим в своей оболочке, как это: в этих примерах конкретно показано использование пользовательских и монтажных пространств при подготовке каталога chroot (и операция chroot обычно также имеет привилегию):

 unshare --user --map-root-user --mount-proc --pid --fork mkdir -p newroot/dev mount --rbind /dev newroot/dev ....other chroot preparation.... chroot newroot su - user1 

Обратите внимание, что я использую mount --rbind (вместо mount --bind ), потому что только это будет работать в новом пространстве имен mount --rbind & mount, если каталог содержит другие точки монтирования (и /dev/ делает в моем случае).

Возможно, объяснение этого заключается в том, что пользователь не должен искать способ увидеть что-то, что обычно непривилегированный пользователь не увидит, т. Е. Подкаталоги, скрытые «submounts». Чтобы не --rbind , допускается только --rbind .