我创build了一个文件,做了chmod 000,然后将所有者和组更改为root:root。 我仍然能够删除该文件作为它的原始创build者(而不是根)。
谁有权删除文件?
包含目录的权限决定了重命名和删除文件的能力。
具体来说,要删除/重命名文件,用户需要对包含的目录具有写入和执行 (即遍历)权限,并且该文件不能是不可变的 。 (在这些情况下,非特权用户甚至可以删除由root拥有的文件。)
限制删除:
可以通过使用: chmod +t directory在包含目录中设置“粘性位”(也称为“受限删除标志”)来限制仅将文件删除到文件所有者(和特权用户)。 设置粘滞位的目录在最后位置显示't'(例如drwxr-xr-t ) – 也可以通过在3位八进制代码前添加'1'(例如: chmod 1755 directory )。 (Linux忽略文件上的粘性位,尽pipe其他一些操作系统的确给它赋予了意义。)
阅读权限:
您应该注意,包含目录的读取权限不是必需的。 没有它,你仍然可以删除文件,如果你知道它的名字,虽然你将无法“读”目录的内容(例如没有读权限,你不能运行ls )。
不可变的文件:
作为一个侧面,通过使文件不可变(即chattr +i ),所有者和其他用户(包括特权用户)都不能删除(或重命名,链接到或修改)文件,即使他们已经写入目录上的权限(只有超级用户可以删除这个)。
如果文件所在的文件夹的所有者拥有对文件夹的写入权限,则即使其掩码为000或该文件为其他用户所有,也能够删除该文件。 如果你真的想创build一个没有人可以触摸/删除的文件,你应该看看命令chattr和它的不可变标志。
从文档 :
具有i属性的文件不能被修改:不能被删除或重命名,不能创build该文件的链接,也不能将数据写入该文件。 只有拥有
CAP_LINUX_IMMUTABLE能力的超级用户或进程才能设置或清除该属性。