如何在 Linux 中使用 ACL 设置默认权限?

如何在 Linux 中使用 ACL 设置默认权限?

我有两个组group1group2

我需要group1用户能够读写(rwx) 中的用户拥有的文件group2,但 中的用户group2无法写入(rx) 文件group1

组中的所有用户都可以读取但不能写入同一组 (rx) 中的文件

我知道我可以使用 ACL(访问控制列表)来处理它。

setfacl -m g:group1:rwx "directory owned by a group2 user"

问题是必须为每个新文件夹设置它。有没有办法将其设置为默认值,以便每个新group2 user's文件/文件夹都应用此权限?

如果我在 中创建新用户,是否会应用此默认设置group2

我知道当创建新用户时,正常权限会被复制到/etc/skel主文件夹,但是如何让 acl 权限也被复制呢?

答案1

默认权限为“-d”。因此,您可以使用以下命令:

setfacl -d -m g:group1:rwx "Main directory owned by group2 user"

还请检查有效权利使用 getfacl。您可能还必须设置掩码。

答案2

您不需要 ACL。

将组 1 中的所有用户也放入组 2。然后确保将 setgid 位放入目录中:所有新文件都将归目录所有者所有,并具有类似的权限(setgid 将添加到新子目录中)。

# Setup as root
mkdir -p /tmp/test/1
chgrp group1 /tmp/test/1
chmod g+wsx,o= /tmp/test/1
mkdir -p /tmp/test/2
chgrp group2 /tmp/test/2
chmod g+ws,o= /tmp/test/2
# user1 is in groups users (primary gid), group1, group2 
# user2 is in groups users (primary gid), group2
# as user1:users
mkdir -p /tmp/test/{1,2}/d1
touch /tmp/test/{1,2}/{f1,d1/f1}
# as user2:users
mkdir -p /tmp/test/{1,2}/d2
touch /tmp/test/{1,2}/{f2,d2/f2}
# check the ownerships on everything
ls -la /tmp/test/{1,2}/{f{1,2},d{1,2},d{1,2}/f{1,2}}

如果您确实想坚持使用 ACL,则需要查看默认 ACL,对它们执行与上述类似的操作。

至于添加新用户/etc/skel/,恐怕您运气不佳,因为 stockuseradd命令在复制 /etc/skel/ 时不会保留任何 ACL 或 xattrs。

相关内容