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

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

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

setfacl -R -m u:user:w dir/*

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

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

答案1

你想要的是所谓的“相对权限”,这是一项一些 setfacl 实现提供,基本上使用经典的“+/-”语法chmod

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

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

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

相关内容