我无法删除我作为组成员拥有写入权限的文件

我无法删除我作为组成员拥有写入权限的文件
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

缺什么?

答案1

删除文件意味着您正在更改目录它驻留在文件中,而不是文件本身。您的组需要对目录进行 rw 才能删除文件。文件的权限仅用于对文件本身进行更改。

在您考虑文件系统如何工作之前,一开始可能会让人感到困惑。文件只是一个inode,目录指的是inode。通过删除它,您只是删除了目录中对该文件的索引节点的引用。所以你改变的是目录,而不是文件。您可以在另一个目录中拥有指向该文件的硬链接,并且您仍然可以从第一个目录中删除它,而无需实际更改文件本身,它仍然存在于另一个目录中。

答案2

只有系统可以删除文件,并且仅当该文件没有引用时。普通用户只能取消链接一个文件,即将其从目录中删除。您需要对目录进行写访问才能取消文件与该目录的链接。取消链接文件不会修改该文件,因此对该文件的写访问权限无关紧要。

答案3

似乎是为了从您需要的目录中删除文件用户写权限。尽管接受的答案是这样说的,但组写和全部写是不够的。

我在两台机器上的两个文件系统上对此进行了测试:

$ mkdir testdir
$ touch testdir/foo
$ chmod u-w testdir
$ chmod o+w testdir
$ ls -ld testdir
dr-xr-xrwx 2 tim all 17 Nov 25 23:08 testdir
$ rm testdir/foo
rm: cannot remove 'testdir/foo': Permission denied
$ chmod g+w testdir
$ rm testdir/foo
rm: cannot remove 'testdir/foo': Permission denied
$ chmod u+w testdir
$ rm testdir/foo

相关内容