我怎样才能在Linux上为一个进程或用户安装一个文件系统

我想拥有不同的坐骑,只有特定的过程或用户才能看到。 我正在考虑的一个用例是,当我想要挂载一个unionfs或aufs时,可以为一个用户使用。 所以我可以在同一个挂载点上为不同的用户安装多个挂载点。

以下是如何使用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

要testing编辑/etc/pam.d/su并在文件末尾追加:

 session required pam_namespace.so 

在testing用户上testing:

 su - testuser 

作为testing用户运行:

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

这将生成一个命令,如:

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

从testing用户shell和root运行生成的diff。 从testing用户你将没有输出,但从根本上你会看到像这样的东西:

 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. 你应该创build新的用户名空间,它给你的进程根权限和所有的function(只在该名字空间内)。
  2. 您应该创build新的Mount名称空间,以便从全局挂载中隔离名称空间内的挂载。
  3. 挂载你需要的东西。
  4. 将权限放回普通用户并运行您的应用程序。

至less在理论上。 检查这篇文章的更多细节: http : //lwn.net/Articles/531114/