我有一个脚本,用于在文件和目录上重新应用 ACL。但是,它具有打开组写入权限的副作用,我无法解释。通过检查每个语句之前和之后的权限,我已将原因缩小到脚本中的一个特定语句。
root@kompir:/tmp/perms# nl /apply-sec
1 #!/bin/bash
2 targetbase=$1
3 [ -z "$targetbase" ] && exit
4 [ ! -d $targetbase ] && exit
5 #set -x
6 check_base() {
7 # Debugging function - call it to view the current ACL and mode bits
8 getfacl $targetbase
9 ls -ld $targetbase
10 echo ---------------------------------------------
11 }
12 # Remove any ACLs
13 setfacl -R -b $targetbase
14 # Set basic permissions
15 chown -R owner $targetbase
16 find $targetbase -type d -exec chmod 2755 {} \;
17 find $targetbase -type f -exec chmod 644 {} \;
18 # Set Default Mask
19 setfacl -d -m m:rwx $targetbase
20 # User1 with Default
21 check_base
22 setfacl -m u:user1:rwx $targetbase
23 check_base
24 setfacl -d -m u:user1:rwx $targetbase
25 # User2 with Default
26 setfacl -m u:user2:r-x $targetbase
27 setfacl -d -m u:user2:r-x $targetbase
28 # Apply recursively
29 getfacl $targetbase | setfacl -R -M- $targetbase
第 22 行的语句打开组写入模式位(该位在第 16 行被关闭)
该脚本的输出如下所示,使用了一些为测试目的而创建的示例目录。
root@kompir:/tmp/perms# /apply-sec perms1/
# file: perms1/
# owner: owner
# group: root
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:mask::rwx
default:other::r-x
drwxr-sr-x+ 4 owner root 4096 Jun 9 09:20 perms1/
---------------------------------------------
# file: perms1/
# owner: owner
# group: root
# flags: -s-
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:mask::rwx
default:other::r-x
drwxrwsr-x+ 4 owner root 4096 Jun 9 09:20 perms1/
---------------------------------------------
请注意,第二次调用调试函数以显示模式时,将重新打开组写入权限。
为什么会发生这种情况,这是预期的行为吗?可以避免吗?
答案1
请注意,第二次调用调试函数以显示模式时,将重新打开组写入权限。
事实并非如此,请查看您得到的输出:
# file: perms1/
[...]
group::r-x
您在输出中看到的ls
不再是组权限,而是限制指定用户和组 ACL 条目可以授予的权限的 ACL 掩码。
请参阅acl(5)
手册页。我之前的回答中有更长的解释
touch/mkdir 似乎忽略默认 ACL