为什么我可以以 root 用户身份删除拥有的文件?

为什么我可以以 root 用户身份删除拥有的文件?

正如标题所述:为什么我可以以 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

相关内容