757 允许所有者读取、写入、执行 + 所有者组读取、执行 + 其他人读取、写入、执行。
有没有办法专门允许 user01 只读?请排除绑定安装的解决方案,因为此目录包含大量小文件。绑定安装会在几天内导致 0% 可用 inode 错误。
谢谢。
答案1
您正在寻找访问控制列表(ACL),它提供比传统用户/组/其他权限更精细的访问控制。
需要使用acl
mount 选项(重新)挂载文件系统以启用 ACL。要在 /data 卷上启用 ACL:
mount -o remount,acl /data
和/或编辑/etc/fstab
以使更改持久。
然后setfacl
命令允许你更改 ACL 和getfacl
将会检索它们。
例如,授予用户 bob 读取权限:
setfacl -m u:bob:r Data
getfacl Data
# file: Data/
# owner: herman
# group: staff
user::rwx
user:bob:r--
GNU扩展输出+中的第 11 个权限列直观地表明 ACL 存在:ls -l
drwx------+ 39 herman staff 1326 Nov 23 09:58 Data
^
|_ + to indicate ACL's (or . to indicate SELinux context)
例如检查本手册获得比手册页更用户友好的解释。
答案2
实现此目的的“正确”方法是 ACL,这意味着遵循HBruijn 提供的答案。
但是,这并不意味着无法使用传统的 Unix 文件权限来解决这个问题。如果不使用 ACL,也可以通过以下方式实现相同的目标:
- 使该文件归某个组所有
read-only-users
。 - 将具有只读访问权限的用户放入
read-only-users
组中。 - 将文件的权限设置为
757
。
为什么这会起作用?
Unix 文件权限评估不会以最宽松的权限为准,而是根据文件类别进行评估。这意味着特定文件类别中的用户具有不同的权限集:
所有者文件类别 - 如果所有者执行某个操作,则根据所有者权限模式位(位掩码中的第一位数字)评估他/她的操作。
团体文件类别 - 如果用户不是文件所有者,但是是文件组的成员,则控制该操作的有效权限是组权限模式位(位掩码中的第二位数字)。
其他文件类别 - 如果用户既不是文件所有者,也不是文件组的成员,则适用其他权限模式位(位掩码中的第三位数字)。
在本例中,我们为文件指定一个不同的组,并向该组添加只读用户。评估权限时,该组的成员将被限制在组权限位掩码内,该位掩码明确禁止写入文件。这实现了既定目标。
警告 - 文件所有者
出于显而易见的原因,您无法使用此技术锁定文件所有者。即使所有者是 的成员,分配给所有者的权限也始终优先于组权限read-only-users
。无论如何,即使您确实限制了所有者,在标准 Unix 系统上,他们始终能够调用chmod(1)
为自己授予权限,而不管他们当前的位掩码是什么。