正如标题所述:为什么我可以以 root 用户身份删除文件?
以下是一个例子:
% sudo touch ~/test
% ls -la ~/test
-rw-r--r-- 1 root root 0 Jun 18 20:31 /home/aboettger/test
% rm ~/test
rm: remove write-protected regular empty file ‘/home/aboettger/test’? Y
% ls -la ~/test
ls: cannot access /home/aboettger/test: No such file or directory
答案1
因为取消链接文件需要对包含目录具有写访问权限。确实可以通过拥有目录间接获得此权限,因为如果某人是所有者,则始终可以授予自己写访问权限。但在这种情况下,您会发现您的主目录已经可由您写入。目录的所有权不是必需的。写访问权限是必需的。这包括通过“其他”、通过组成员身份或通过 ACL 条目(如果适用)获得的写访问权限。
答案2
如果您rwx
在该目录中拥有足够的权限(),则您可以删除该目录内的任何文件。
基本上,目录条目包含一个表,其中包含其拥有的文件名及其 inode。因此,当rm
给出命令时,文件条目会从该目录表中删除,这与文件本身的所有者无关。只要对父目录有足够的权限就足够了。
尽管该文件在文件系统中保持有效,直到使用该文件的所有进程完成为止。
相关的系统调用是unlinkat()
。例如,在删除时file.txt
:
unlinkat(AT_FDCWD, "file.txt", 0) = 0