为什么 setfacl 通过打开 group-write 来影响 filemode

为什么 setfacl 通过打开 group-write 来影响 filemode

我有一个脚本,用于在文件和目录上重新应用 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

相关内容