如何使用 setfacl 授予写权限,同时保留现有权限?

com*_*ose 8 linux permissions user-permissions setfacl

我想递归地向目录上的特定用户授予写入权限,而不丢失该用户可能拥有的任何现有权限。我相信我可以使用类似的方法向用户授予写权限:

setfacl -R -m u:user:w dir/*
Run Code Online (Sandbox Code Playgroud)

但这样做的问题是它会剥夺用户可能已经拥有的任何现有权限。例如,如果用户在执行setfacl命令之前具有执行权限,它将用写权限替换执行权限。

如何在保留现有权限的同时向用户授予写权限?

sho*_*hok 6

您想要的称为“相对权限”,这是某些 setfacl 实现提供的功能,基本上使用经典的“+/-”语法chmod

然而,至少在 RHEL7 和 Ubuntu 16.04 LTS 上,setfacl提供这样的功能。例如,setfacl -m user:root:+r /root/返回一个错误说明setfacl: Option -m: Invalid argument near character 11

如果您的setfacl实现缺少此功能,您有两种可能性:

  • 用于将所有getfaclACL输出到文件,编辑该文件以匹配您所需的访问权限,然后用于加载/应用新权限;setfacl --restore
  • 创建一个脚本来迭代每个文件,读取当前 ACL 并写入新的访问权限。