setfacl이 그룹 쓰기를 켜서 파일 모드에 영향을 미치는 이유

setfacl이 그룹 쓰기를 켜서 파일 모드에 영향을 미치는 이유

파일과 디렉터리에 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을 무시하는 것 같습니다.

관련 정보