我想以递归方式向目录上的特定用户授予写权限,而不会丢失用户可能拥有的任何现有权限。我相信我可以使用类似这样的方法向用户授予写权限:
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 并写入新的访问权限。