如何在 Linux 中仅为一个进程或用户挂载文件系统

如何在 Linux 中仅为一个进程或用户挂载文件系统

我希望拥有仅供特定进程或用户查看的不同挂载。我正在考虑的一个用例是当我想挂载一个可供一个用户使用的 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

现在看来这是可能的:

  1. 您应该创建新的用户命名空间,它为您的进程授予根权限和所有功能(仅在该命名空间内)。
  2. 您应该创建新的挂载命名空间,以将命名空间内的挂载与全局挂载隔离。
  3. 安装您需要的东西。
  4. 将权限恢复为普通用户并运行您的应用程序。

至少理论上是这样。查看本文了解更多详细信息:http://lwn.net/Articles/531114/

相关内容