Linux目录权限读写不删除

Posted

技术标签:

【中文标题】Linux目录权限读写不删除【英文标题】:Linux directory permissions read write but not delete 【发布时间】:2010-10-26 13:17:21 【问题描述】:

是否可以设置目录权限,使组能够读取和写入文件和子目录但不能删除任何内容?

【问题讨论】:

我将“删除任何内容”解释为包括禁止对现有文件进行任何修改。你是这个意思吗?您的用户是否可以直接访问文件系统,或者他们是通过 NFS、Samba 或其他路径 (FTP) 进入的? 【参考方案1】:

嗯,这个目录应该是 r-x。

而且里面的文件会有 rw-。

这是因为如果文件的权限允许写入,则文件可以写入,但只有在其目录的权限允许写入时才能删除。

【讨论】:

你也不能移动文件 粘性位也很相关。【参考方案2】:

可能与否,请确保用 0 字节文件覆盖并不等同于在您的特定上下文中删除文件。

【讨论】:

你可以使用'chattr +a',意思是“文件只能以追加模式打开进行写入”,意味着你不能重写现有的内容,但你可以在末尾添加新的内容。这应该可以防止截断。 但是 chattr +a 需要 root 权限才能设置新文件。【参考方案3】:

在目录上设置粘性位可能就足够了。用户将能够删除他们拥有的任何文件,但不能删除其他用户的文件。这对于您的用例可能已经足够了。在大多数系统上,/tmp 是这样设置的(/tmp 设置为 1777)

chmod 1775 /受控

但是,如果您想要更多控制权,则必须在相关文件系统上启用 ACL。

在 /etc/fstab 中,将 acl 附加到标志:

/dev/root        /                       ext3    defaults,acl       1 1

然后您可以使用 setfacl/getfacl 来控制和查看 acl 级别的权限。

示例:(创建文件,一旦写入,它们是只读的,但可以被所有者删除,但不能被其他人删除。)

setfacl --set u::rwxs,g::rwx /controlled
setfacl -d --set u::r-x,g::r-x,o::- /controlled

您可以在目录上设置默认的 acl 列表,该目录将被在那里创建的所有文件使用。

正如其他人所指出的,请注意准确指定您想要的内容。你说“写”——但用户可以覆盖他们自己的文件吗?他们可以更改现有内容,还是只是追加内容?一旦写入,它是只读的?也许您可以在 cmets 中指定更多详细信息。

最后,selinux 和 grsecurity 提供了更多的控制,但这是完全不同的蠕虫。设置可能非常复杂。

【讨论】:

你的意思是 1777 代表 /tmp 吗? 4 表示 SetUID 位(我相信它只对 BSD 派生系统中的目录有意义)。 我在运行setfacl --set u::rwxs,g::rwx /controlled 时遇到各种错误(其中“/受控”是要修改的文件夹)。 setfacl -m u::rwx,g::rwx /controlled 如果“1775”不起作用(因为它不适合我)我将其更改为“1777”并且它起作用了。这将确保每个人都可以写入目录但不能删除(和读取)其他用户文件。

以上是关于Linux目录权限读写不删除的主要内容,如果未能解决你的问题,请参考以下文章

linux权限详情

Linux文件目录权限

linux中文件拥有者去掉执行权限,其他用户加上读写权限,同组用户加上只读权限 命令是啥

rwx读写执行对文件和目录的意义

如何在linux上设置写入但不删除目录的权限?

Linux读写执行权限对目录和文件的影响