Назад | Перейти на главную страницу

Как смонтировать в Linux файловую систему только для одного процесса или пользователя

Я хочу иметь разные крепления, которые видит только определенный процесс или пользователь. Один из вариантов использования, о котором я думаю, - это когда я хочу смонтировать unionfs или aufs, которые будут доступны для одного пользователя. Таким образом, у меня может быть несколько точек монтирования на одной и той же точке монтирования, которые будут разными для разных пользователей.

Вот как включить пространства имен монтирования для каждого пользователя в Ubuntu 12.10 с помощью pam_namespace:

Отредактируйте /etc/security/namespace.conf

Раскомментируйте последние строки. В целях безопасности добавьте текущего пользователя в список исключений.

/tmp     /tmp-inst/            level      root,adm,myuser
/var/tmp /var/tmp/tmp-inst/     level      root,adm,myuser

редактировать /etc/security/namespace.init и изменить #!/bin/sh -p к #!/bin/bash --noprofile или чтобы #!/bin/sh Это потому что sh на самом деле dash.

Для тестирования править /etc/pam.d/su и добавьте в конец файла:

session required pam_namespace.so

Тест на тестовом пользователе:

su - testuser

Как тестовый пользователь запускает:

echo diff '<(sort /proc/'$$'/mounts) <(sort /proc/mounts)'

Это сгенерирует такую ​​команду:

diff <(sort /proc/31987/mounts) <(sort /proc/mounts)

Запустите сгенерированный diff из тестовой пользовательской оболочки и из root. От тестового пользователя вы ничего не получите, но в корне вы увидите что-то вроде:

4,7d3
< /dev/sda1 /tmp ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
< /dev/sda1 /tmp/tmp-inst ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
< /dev/sda1 /var/tmp ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
< /dev/sda1 /var/tmp/tmp-inst ext4 rw,relatime,errors=remount-ro,data=ordered 0 0

Test_user /tmp папка будет отображаться как /tmp/tmp-inst/test_user и он будет доступен только этому пользователю.

Почему бы просто не смонтировать в ~ / specificmountpoint. Установите соответствующие разрешения. У каждого пользователя будет одинаковая (почти) точка крепления.

Похоже, сейчас это возможно:

  1. Вы должны создать новое пространство имен пользователя, которое дает вашему процессу права доступа root и все возможности (только внутри этого пространства имен).
  2. Вы должны создать новое пространство имен монтирования, чтобы изолировать монтирования внутри вашего пространства имен от глобальных монтирований.
  3. Установите то, что вам нужно.
  4. Верните права обычному пользователю и запустите приложение.

По крайней мере, теоретически. Проверьте эту статью для получения более подробной информации: http://lwn.net/Articles/531114/