我正在尝试使用创建一个用户命名空间unshare
。当我将父用户“kevin”映射到新命名空间中的“root”用户时,一切正常:
kevin@raspberrypi:~/test $ ls -lah
total 8.0K
drwxr-xr-x 2 kevin kevin 4.0K Oct 14 17:58 .
drwxr-xr-x 7 kevin kevin 4.0K Oct 14 17:38 ..
kevin@raspberrypi:~/test $ unshare --user --map-root-user
root@raspberrypi:~/test # touch hello
root@raspberrypi:~/test # ls -lah
total 8.0K
drwxr-xr-x 2 root root 4.0K Oct 14 17:59 .
drwxr-xr-x 7 root root 4.0K Oct 14 17:38 ..
-rw-r--r-- 1 root root 0 Oct 14 17:59 hello
root@raspberrypi:~/test #
当我尝试将父命名空间中的根用户与子命名空间中的根用户进行映射(使用sudo
)时,我没有完全的权限。
kevin@raspberrypi:~/test $ sudo unshare --user --map-root-user
root@raspberrypi:/home/kevin/test# ls -lah
total 8.0K
drwxr-xr-x 2 nobody nogroup 4.0K Oct 14 17:59 .
drwxr-xr-x 7 nobody nogroup 4.0K Oct 14 17:38 ..
-rw-r--r-- 1 nobody nogroup 0 Oct 14 17:59 hello
root@raspberrypi:/home/kevin/test# touch hi
touch: cannot touch 'hi': Permission denied
root@raspberrypi:/home/kevin/test#
我期望 touch 命令能够成功,并且生成的文件在两个用户命名空间中都归 root 所有。我检查了文件/proc/self/uid_map
,似乎是正确的。
root@raspberrypi:/home/kevin/test# cat /proc/self/uid_map
0 0 1
我还检查了两个命名空间中 root 的功能getpcaps
,发现它们是相同的。
请注意,如果当前目录归 root 所有,我就能创建新文件。
看起来是什么问题?
此外,下面的方法也不起作用,我认为这与这个问题有关(最初我试图保留用户命名空间):
kevin@raspberrypi:~/test $ touch user
kevin@raspberrypi:~/test $ sudo unshare --user=/home/kevin/test/user
unshare: mount /proc/1667/ns/user on /home/kevin/test/user failed: Operation not permitted
kevin@raspberrypi:~/test $