“取消共享-Ur”后编辑根目录拥有的文件

问题描述

说我在初始用户名称空间中,并且某个目录中有一个空的root拥有的文件

tdiff@tp:~/temp/unshare$ sudo touch root.txt
tdiff@tp:~/temp/unshare$ ls
total 8.0K
drwxrwxr-x 2 tdiff tdiff 4.0K Oct 18 02:37 .
drwxr-xr-x 3 tdiff tdiff 4.0K Oct 18 02:37 ..
-rw-r--r-- 1 root  root     0 Oct 18 02:37 root.txt

现在,我要使用unshare -Ur切换到新的用户命名空间。在此命名空间中,root.txt据报告归“ nobody”所有,因为原始的根uid(0)没有映射到新的命名空间:

tdiff@tp:~/temp/unshare$ unshare -Ur 
root@tp:~/temp/unshare# ls
total 8.0K
drwxrwxr-x 2 root   root    4.0K Oct 18 02:45 .
drwxr-xr-x 3 root   root    4.0K Oct 18 02:37 ..
-rw-r--r-- 1 nobody nogroup    0 Oct 18 02:45 root.txt

然后我使用vim编辑该文件。尽管发出了有关更改只读文件的警告,但它仍允许我覆盖文件内容

root@tp:~/temp/unshare# vim root.txt && cat root.txt
added from unshare

此外,如果我返回初始用户名称空间,则文件现在已将其所有者更改为我的未特权uid(1000):

root@tp:~/temp/unshare# logout
tdiff@tp:~/temp/unshare$ ls
total 12K
drwxrwxr-x 2 tdiff tdiff 4.0K Oct 18 02:47 .
drwxr-xr-x 3 tdiff tdiff 4.0K Oct 18 02:37 ..
-rw-r--r-- 1 tdiff tdiff   19 Oct 18 02:47 root.txt

为什么有可能?另外,如果我尝试对系统根文件(例如/ etc / passwd)执行相同的操作,则会出现预期的访问被拒绝错误

UPD:

tdiff@tp:~/temp/unshare$ uname -a
Linux tp 5.4.0-51-generic #56-Ubuntu SMP Mon Oct 5 14:28:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

解决方法

通过vim编辑/保存root.txt时,该文件被重命名为root.txt〜,并以tdiff用户(以及子用户命名空间中的root用户副本)具有写访问权的身份重命名为root.txt。在目录〜/ temp / unshare中。重命名操作会将结果文件的所有权更改为子名称空间中的根目录,该名称空间是父名称空间中的tdiff。

对于/ etc / passwd来说,这是不可能的,因为/ etc不是tdiff所拥有的:在版本期间,您无权进行写操作来重命名文件。