我有一个具有以下权限的目录:
drwxrwsr-x 3 john ro 20K Jun 20 14:48 logs
我以 john 身份登录,并在日志中触摸了一个新文件:
-rw-r--r-- 1 john ro 0 Jun 20 14:48 d
根据我的理解,在这种情况下,只有 john 应该能够删除文件 d。具有 ro 组的任何其他用户都不能删除该文件,因为它只有组读访问权限。但是,当我尝试使用另一个以 ro 为组的帐户进行删除时,该文件被删除!
mathew@ip-10-0-0-148:/mnt/custom/ops/logs$ ls -lrth d
-rw-r--r-- 1 john ro 0 Jun 20 14:48 d
mathew@ip-10-0-0-148:/mnt/custom/ops/logs$ rm d
rm: remove write-protected regular empty file 'd'? yes
mathew@ip-10-0-0-148:/mnt/custom/ops/logs$ ls -lrth d
ls: cannot access 'd': No such file or directory
这看起来很奇怪!我希望群组成员能够读取但不能删除文件。我缺少什么?
答案1
您不是删除文件,而是从目录中删除它们的条目。您需要目录写入权限才能执行此操作。 (此权限存在于您的示例中)。
您可能想看看粘性位。将其应用到目录 ie chmod +t …/logs/d
。这将使只有所有者(以及具有CAP_DAC_OVERRIDE
例如权限的用户root
)才能从目录中删除文件。
当文件没有目录条目并且不再被任何进程打开时,它将被删除。
答案2
该ro
组对该目录具有完全权限,这意味着其任何成员都可以删除或修改其中的文件或目录,无论他们是否拥有这些文件或目录,也不管文件权限如何。
如果您只希望组成员能够读取其中的文件,请更改组john
或删除组的写入权限。从包含该目录的目录中执行其中一项操作logs
。
chown :john logs
chmod 755 logs
我建议使用第二个命令来删除写入权限。