mtk*_*mtk 53 permissions history architecture rm files
来自帖子为什么 rm 可以删除只读文件?我明白那个rm只需要对目录的写权限即可删除文件。但是我发现很难消化我们可以轻松删除所有者和分组不同的文件的行为。
我尝试了以下
mtk : 我的用户名
abc : 创建了一个新用户
$ ls -l file
-rw-rw-r-- 1 mtk mtk 0 Aug 31 15:40 file
$ sudo chown abc file
$ sudo chgrp abc file
$ ls -l file
-rw-rw-r-- 1 abc abc 0 Aug 31 15:40 file
$ rm file
$ ls -l file
<deleted>
Run Code Online (Sandbox Code Playgroud)
我在想这不应该被允许。用户应该只能删除其所有权下的文件吗?有人可以解释为什么允许这样做吗?避免这种情况的方法是什么?我可以认为只限制父目录的写权限以禁止意外删除文件。
Cel*_*ada 103
允许这样做的原因与删除文件的实际作用有关。从概念上讲,rm的工作是从目录中删除名称条目。如果这是文件的唯一名称,那么文件可能会变得无法访问,并且文件占用的 inode 和空间因此可以在此时恢复,这一事实几乎是偶然的。rm命令调用的系统调用的名称,即unlink,甚至暗示了这一事实。
而且,从目录中删除名称条目基本上是对该目录的操作,因此该目录是您需要具有写入权限的内容。
下面的场景可能会让它感觉更舒服?假设有目录:
/home/me # owned and writable only by me
/home/you # owned and writable only by you
Run Code Online (Sandbox Code Playgroud)
并且有一个文件归我所有,并且有两个硬链接:
/home/me/myfile
/home/you/myfile
Run Code Online (Sandbox Code Playgroud)
别介意这个硬链接/home/you/myfile最初是如何到达那里的。也许root把它放在那里。
这个例子的想法是你应该被允许删除硬链接/home/you/myfile。毕竟,它使您的目录变得混乱。您应该能够控制内部存在和不存在的内容/home/you。当您执行 remove 时/home/you/myfile,请注意您实际上并未删除该文件。您只删除了一个链接。
请注意,如果粘位设置上包含文件(显示为目录t中ls),那么你这样做需要是文件的所有者才能被允许将其删除(除非你自己的目录)。粘滞位通常设置在 上/tmp。
为了取消链接文件,您只需要能够写入文件所在的目录。
如果您不喜欢这样,chmod +t dir如果您使用的是最新的操作系统(此功能于 1986 年左右在 SunOS 中引入),则可以通过设置“粘性”位。
如果您喜欢更细粒度,则需要一个具有现代 ACL 实现(如 ZFS)的文件系统。基于 NTFS 的标准 NFSv4 ACL 包括对每个用户的文件特定删除权限和目录的“delete_child”权限的支持。
| 归档时间: |
|
| 查看次数: |
18338 次 |
| 最近记录: |