在 GNU/Linux 中,如何设置目录,使得所有者只能向其中添加/读取文件/目录,而只有超级用户可以在该结构中执行任何删除操作?
考虑一下这种情况:您正在rsync
将您拥有的一些文件和目录添加到目录中。您希望能够写入该目录(稍后,当更新备份时,即rsync
再次执行 ing,也写入所有子目录),但您不希望能够删除此结构中的任何内容,除非您是超级用户。
t
在这种情况下,限制删除标志chmod
没有帮助,因为它限制非所有者的删除。
u=rX,go=
将文件和目录的模式设置为(使用 进行传输时rsync
)也无济于事,因为除非在启动之前将模式位添加到接收器上的所有目录,否则以后rsync
将无法进行,而这将非常耗时。w
rsync
ACL 是这里的出路吗?
更新:即使访问控制列表我不明白有没有什么办法可以做到这一点。
答案1
在标准 Linux 环境中你无法做到这一点。可能能够为 SELinux 或 Tomoyo 或任何其他程序编写规则来禁止删除文件,但这不会阻止用户用垃圾数据覆盖文件或完全截断它,无论是有意还是无意。
答案2
您可以不知何故 使用粘性位。
$ mkdir drop_box
$ chmod 777 drop_box
$ chmod u+s,g+s drop_box
$ ls -l
total 4
drwsrwsrwx 2 tclark authors 4096 Sep 14 10:55 drop_box
现在任何人都可以将文件移动到此目录,但在 drop_box 中创建后,它们将归 tclark 和组作者所有。此示例还说明了如何使用逗号分隔单个命令来更改多个权限级别。与其他权限一样,这可以简化为一个命令,使用 SUID 和 SGID 数值(分别为 4 和 2)。由于我们在本例中要更改两者,因此我们使用 6 作为 chmod 命令的第一个值。
$ chmod 6777 drop_box/
$ ls -l
total 4
drwsrwsrwx 2 oracle users 4096 Sep 14 10:55 drop_box
完全不确定这是否能帮助你实现目标,因为我想不出给你的示例工作所需的文件和目录的适当权限。我发布这个只是为了以防你没有其他可做的内容。
祝你好运。
答案3
看看我们的好朋友聊天室。如果您使用的是基于 ext2/3/4 的文件系统,则可以设置不可变或不可删除位,并且甚至 root 也无法删除该文件,直到您取消设置相应的位。