Ubuntu 20.04 上奇怪的文件安全性

che*_*ero 2 filesystem permissions

Ubuntu 20.04,磁盘分区格式为EXT4。具有 sudo 权限的普通用户,位于 tmp 目录中,例如:~/tmp/

$ sudo touch c.txt
// this will create a root-root(user-group) file with mode 644, as expected.
$ rm c.txt
$ rm: remove write-protected regular empty file `c.txt'?     // sys prompt
if I selected 'y', then c.txt will be removed ! // NOT as expected.
Run Code Online (Sandbox Code Playgroud)

我什至尝试过 rm 非空文件,仍然可以删除!

我尝试了两台电脑,都安装了 Ubutnu 20.04,结果一样。

为什么普通用户无需 sudo 即可删除根文件?

谢谢!

Ps:检查 https://help.ubuntu.com/community/FilePermissions上的文档后 ,是的,普通用户可以删除完全受控目录(rwx=7)中的任何文件,无论文件所有者、模式如何。但是,它似乎不适用于修改操作。例如:

// TC2
sudo vim d.txt     // this will create a root-root(user-group) with 644 mode

vim d.txt   
// edit by normal user, use w! to save in vim, 
// after exit vim, the file content changed and the user-group 
// chagned to current user group, not root-root anymore.
Run Code Online (Sandbox Code Playgroud)

这正如预料的那样吗?

zab*_*lah 5

要从目录中删除文件,您只需拥有目录本身的权限即可,与该文件的权限无关。在您的情况下,普通用户对包含文件的目录拥有完全权限。您可以将其更改为不可变以防止删除它:sudo chattr +i file

或者:

sudo chmod ow /目录路径

  • 我的想法是文件的权限适用于*其内容*。删除、移动或重命名文件不会影响其内容,因此其权限无关;这些操作会更改目录的内容(对于移动,还会更改要移动到的目录),因此需要对该目录的写入权限。当您“删除”一个文件时,您实际上只是将其从目录中删除(“取消链接”),如果没有剩余的目录条目(“链接”),它就会突然消失。 (5认同)
  • @chenzero 那不是真的。普通用户无法修改 root 拥有的文件,但普通用户可以用该用户拥有的新文件替换 root 拥有的文件,只要发生在该用户可写的目录中即可。 (4认同)
  • @raj `vim` 实际上可以以任何一种方式保存——它通常会重写现有文件,但如果不能,它会切换到删除和替换模式。许多其他程序这样做是为了获得更接近原子的保存:它们以临时名称保存,然后删除原始名称并将临时名称重命名为它的位置;如果在写入新版本时出现任何问题,这可以避免留下损坏的文件。 (3认同)
  • @GordonDavisson:这实际上也是目录在现实生活中的工作方式,而且实际上,*为什么*Unix 称它们为目录,而不是像其他操作系统那样称为“文件夹”。如果我想把你从手机通讯录中删除,我也不必谋杀你。如果我想从文件夹中删除文件,我必须对文件夹及其中的文件具有物理访问权限。如果我想从目录中删除文件,我只需要访问该目录,然后就可以删除或删除该条目。 (2认同)
  • @chenzero 问题是权限是根据文件系统级别的操作定义的,而不是这些操作的影响。替换与更改文件具有相似的结果,但它们在涉及的文件系统操作方面非常不同,因此它们之间的权限应用方式不同。IMO 的问题是,unix 权限是由文件系统专家而不是安全专家设计的,因此它们在文件系统操作方面有意义,但在定义合理的安全策略方面却没有意义。 (2认同)