如何从我的目录下删除别人的子目录?

如何从我的目录下删除别人的子目录?

我与 Linux 服务器上的同事共享文件,他添加了一些新文件。现在我们已将文件移到其他地方,因此我想删除旧文件。但是,当我的同事添加他的文件时,我们使用的软件创建了由他的帐户拥有的新子目录,我找不到合适的命令来删除它们。

$ ls -a
total 20
drwxrwxr-x 5 markpasc markpasc 4096 Sep 20 09:48 ./
drwxrwxr-x 3 markpasc markpasc 4096 Sep 20 09:48 ../
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 82/
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 c4/

我试过:

$ rm -rf 82
rm: cannot remove `82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rm -f 82/b7fc78bc548537f3ea235026b7322fe3bea91f
rm: cannot remove `82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rmdir 82/
rmdir: 82/: Directory not empty
$

我知道通常我可以删除文件其他人拥有我的目录:

$ ls -a
total 8
drwxrwxr-x  2 markpasc markpasc 4096 Sep 20 10:13 ./
drwxr-xr-x 24 markpasc markpasc 4096 Sep 20 10:13 ../
-rw-rw-r--  1 someuser someuser    0 Sep 20 10:13 file
$ rm file
rm: remove write-protected regular empty file `file'? y
$ ls file
ls: file: No such file or directory
$

有没有办法自己删除这些目录,或者是否必须由我的同事(或 root)删除它们?

答案1

要删除目录,您需要做两件事:对父目录的写访问权限,以及该目录为空。因此您的同事或 root 必须配合。这是 unix 权限模型的限制。

当目录树可由多个用户写入时,为了获得更好的工作流程,您可以使用访问控制列表(如果支持)或 setgid 目录。

  • 使用 ACL,将目录的写权限授予任何应该拥有该权限的人,并将默认 ACL 设置为也授予写权限,以便新创建的文件和子目录将继承所需的权限。用户可以覆盖这些默认值,但只要他们被动配合,权限就没问题。

    setfacl -m user:coworker:rwx .
    setfacl -d -m user:coworker:rwx .
    
  • 如果您没有 ACL,您可以授予某个组写入权限,并在目录上设置 setgid 位。这样,新创建的文件和子目录将属于该组,而不是创建过程的默认组。但是,授予新文件和目录的组写入权限仍由用户决定(只有当他们拥有 时,才会自动发生这种情况umask 002)。

    chgrp mygroup .
    chmod g+ws .
    

你可能感兴趣这个帖子讨论了为什么事情会这样运作

相关内容