当包含其他用户拥有的子目录时,如何删除我拥有的目录?

我已经在Debian服务器上使用基本的非特权帐户web创build了目录/home/web/test 。 另一个帐户 – tomcat – 然后在该文件夹中创build了一些子目录和文件(正如您可能已经猜到的, tomcat是一个Web应用程序)。

我想现在删除那个testing文件夹,但是我不能这么做,因为tomcat拥有它下面的目录和文件。 当我尝试时,我得到权限被拒绝的错误。 这是如何设置的:

ls -l / home / web

 drwxrwxrwx 3 web users 4096 2011-04-19 12:06 test 

ls -l / home / web / test

 drwxr-xr-x 46 tomcat tomcat 4096 2011-04-19 12:06 www 

ls -l / home / web / test / www

 -rw-r--r-- 1 tomcat tomcat 9939 2011-04-19 12:44 test1.html -rw-r--r-- 1 tomcat tomcat 16346 2011-04-19 12:44 test2.html ... 

rm -rf / home / web / test

 rm: cannot remove `/home/web/test/www/test1.html': Permission denied rm: cannot remove `/home/web/test/www/test2.html': Permission denied ... 

有什么办法,我可以删除/home/web/test文件夹使用web帐户 – 即没有login为tomcatroot

毕竟,我拥有/home/web/test ,我不应该能够做任何我想要的东西吗?

据我所知,你不能。 你给了tomcat用户许可,将他们的文件存储在你的目录中,但他们的文件是他们的。 如果您不是其所有者或组的成员(并且您没有使用扩展ACL),则不能修改或删除这些文件。

它们在文件系统上的位置是无关紧要的,因为同一个inode可以在多个位置被多次引用。 这只是Unix权限的工作方式 – 它们是基于inode的,而不是基于位置的。

编辑:这是一个有趣的观察@ syserr0r。 原因是作为目录的所有者,您可以更改其文件列表 – 包括从该列表中删除文件(如果文件没有硬链接,则操作系统将删除inode)。 所以我的回答是不正确的:对于创build和删除,重要的权限是父目录的权限,而不是与inode关联的权限。

单个文件夹

~/test与由gompelsgompels拥有的gompels drwxr-xr-x
~/test/test0r-rw-r--r-- ~/test/test0r属于rootroot

gompels@stonewall:~$rm -Rf test污垢文件夹不见了!

嵌套的文件夹

~/test与由gompelsgompels拥有的gompels drwxr-xr-x
~/test/test2/带有rootroot drwxr-xr-x
~/test/test2/test0r-rw-r--r--属于rootroot

gompels@stonewall:~$rm -Rf test and rm: cannot remove 'test/test2/test0r': Permission denied失败:(

所以如果你拥有这个文件夹,你可以删除其他人的文件,但不能删除他们的文件夹。