我创建了一个文件,对它执行了 chmod 000,然后将所有者和组更改为 root:root。我仍然能够以该文件的原始创建者(不是 root)的身份删除该文件。
谁有权限删除文件?
答案1
包含的权限目录确定重命名和删除文件的能力。
具体来说,要删除/重命名文件,用户需要写和执行(即遍历)包含目录的权限,并且相关文件必须并非一成不变(在这种情况下,非特权用户甚至可以删除 root 拥有的文件。)
限制删除:
通过在包含目录上设置“粘滞位”(也称为“限制删除标志”),可以将文件删除限制为仅文件所有者(和特权用户):。设置chmod +t directory
了粘滞位的目录在最后位置显示“t”(例如drwxr-xr-t
)- 也可以通过在 3 位八进制代码前加上“1”来以“八进制”形式设置(例如chmod 1755 directory
)。(Linux 会忽略文件的粘滞位 - 尽管其他一些操作系统确实为其赋予了含义。)
读取权限:
您应该注意,不需要对包含目录具有读取权限。如果没有它,您仍然可以删除文件(如果您知道其名称),尽管您将无法“读取”目录的内容(例如,没有读取权限,您将无法运行ls
)。
不可变文件:
附带提一下,通过使文件不可变(即chattr +i
),所有者或其他用户(包括特权用户)都不能删除(或重命名、链接或修改)该文件,即使他们对目录具有写权限(只有超级用户可以删除它)。
答案2
如果文件所在文件夹的所有者对该文件夹具有写权限,则他们能够删除该文件,即使该文件的掩码为 000 或该文件归其他用户所有。如果您真的想要创建一个任何人都无法触摸/删除的文件,您应该查看命令chattr
及其不可变标志。
从文档:
具有 i 属性的文件无法修改:无法删除或重命名,无法创建指向此文件的链接,也无法向此文件写入任何数据。只有超级用户或拥有该
CAP_LINUX_IMMUTABLE
权限的进程才能设置或清除此属性。