我想为例如设置 ACL。 /tmp/test 文件夹如下:
/tmp/test 所有者是用户“gaspar”,组“testgroup”的成员。
用户“testuser”也是组“testgroup”的成员,我只想向该用户+所有者(用户“gaspar”)授予 rwx 权限。
另外,我需要自动为 /tmp/test 中所有新创建的文件/目录设置相同的 acl。
当我像这样设置facl时:
setfacl -Rdm u:testuser:rwx,g:testgroup:-,o::- /tmp/test/
getfacl -p /tmp/test/
授予权限:
# file: /tmp/test/
# owner: gaspar
# group: testgroup
user::rwx
group::---
other::---
default:user::rwx
default:user:testuser:rwx
default:group::---
default:group:testgroup:---
default:mask::rwx
default:other::---
然后用户“testuser”对 /tmp/test 文件夹没有权限。您能否建议问题出在哪里,我应该如何纠正?
当我像这样设置 acl 时(没有“d”选项),用户“testuser”拥有他应该拥有的权限,但显然新创建的文件/目录没有相同的 acl:
setfacl -Rm u:testuser:rwx,g:testgroup:-,o::- /tmp/test/
getfacl -p /tmp/test/
# file: /tmp/test/
# owner: gaspar
# group: testgroup
user::rwx
user:testuser:rwx
group::---
group:testgroup:---
mask::rwx
other::---
任何建议表示赞赏!
答案1
在您的系统上,重新启动后文件就会/tmp
消失,对吗?也许这不是一个永久解决方案的好位置。在目录上设置 ACL 并将 ACL 应用于目录中的所有新文件系统对象时,请记住设置两个掩码:(1) 目录本身的掩码和 (2) 默认掩码(对于所有新文件系统对象) )。
setfacl -m u::rwx,g::r-x,o::--- /tmp/test
setfacl -d -m u::rwx,g::r-x,o::--- /tmp/test
上面的-m
开关是 的掩码/tmp/test
,并且-d
开关使该掩码成为同一目录中所有新文件系统对象的默认掩码。它相当于 0750。也可以使用八进制值。
用户、组和其他掩码的工作方式相同:g:groupname:---
或组合使用:u:username:---,g:groupname:---,o::---
。不指定用户名或组名会将掩码应用于当前用户/组所有权。
请注意,并非所有软件都支持 ACL。例如,并非所有 SFTP/SCP 客户端都知道它们。
答案2
这是应该的。
man acl
关于默认 ACL 有以下说法:
访问控制列表类型
每个对象都可以被认为具有与其关联的 ACL,该 ACL 控制对该对象的任意访问;该ACL称为访问ACL。此外,目录可能有关联的 ACL管理在该目录中创建的对象的初始访问 ACL;该 ACL 被称为默认ACL。
(强调我的)
您使用 ACL 指定的是,只有所有者对该目录具有 rwx 权限。目录上的默认 ACL 指定以下内容:
- 其中创建的所有文件的 ACL 将设置为与父目录的默认 ACL 相同。
- 其中创建的所有目录的默认 ACL 将设置为与父目录的默认 ACL 相同
如果您更改父目录的权限或添加启用访问的组/用户 ACL,则其中的任何文件都将按预期工作。
答案3
您需要了解什么是“user::rwx 和default:user::rwx”继承 acl 的默认部分。
有关更多信息,您需要阅读“man setfacl”,也许这个文档会帮助您:
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxb200/aclinhe.htm