我希望拥有仅供特定进程或用户查看的不同挂载。我正在考虑的一个用例是当我想挂载一个可供一个用户使用的 unionfs 或 aufs 时。因此,我可以在同一挂载点上拥有多个挂载,这些挂载对于不同的用户来说是不同的。
答案1
以下是如何使用 pam_namespace 在 Ubuntu 12.10 中启用每个用户挂载命名空间:
编辑 /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)
从测试用户 shell 和 root 运行生成的 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
并且只有该用户可以访问。
答案2
为什么不直接挂载在 ~/specificmountpoint 上呢?相应地设置权限。每个用户都会有相同的(几乎)挂载点。
答案3
现在看来这是可能的:
- 您应该创建新的用户命名空间,它为您的进程授予根权限和所有功能(仅在该命名空间内)。
- 您应该创建新的挂载命名空间,以将命名空间内的挂载与全局挂载隔离。
- 安装您需要的东西。
- 将权限恢复为普通用户并运行您的应用程序。
至少理论上是这样。查看本文了解更多详细信息:http://lwn.net/Articles/531114/