ACL은 파일의 유효 권한을 어떻게 계산합니까?

ACL은 파일의 유효 권한을 어떻게 계산합니까?

생성된 새 파일과 하위 디렉터리에 대한 wheel그룹 권한을 부여하기 위해 다음 명령을 실행했습니다 .rwx

[belmin@server1]$ ls -la
total 24
drwxr-sr-x+   2 guards guards  4096 Aug 27 15:30 .
drwxr-xr-x  104 root   root   12288 Aug 27 15:19 ..

[belmin@server1]$ sudo setfacl -m d:g:wheel:rwX .

[belmin@server1]$ getfacl .
# file: .
# owner: guards
# group: guards
# flags: -s-
user::rwx
group::r-x
group:wheel:rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:wheel:rwx
default:mask::rwx
default:other::r-x

effective그러나 루트로 파일을 생성할 때 권한이 어떻게 계산되는지 완전히 명확하지 않습니다 .

[belmin@server1]$ sudo touch foo

[belmin@server1]$ getfacl foo
# file: foo
# owner: root
# group: guards
user::rw-
group::r-x                      #effective:r--
group:wheel:rwx                 #effective:rw-
group:guards:rwx                #effective:rw-
mask::rw-
other::r--

이것이 무엇을 의미하는지 자세히 설명해 줄 수 있는 사람이 있나요?

답변1

effective권한은 실제(실제?) 권한을 와 결합하여 결정됩니다 mask. mask파일은 이므로 rw-모든 effective권한은 꺼집니다 x.

답변2

짧은 답변: 비트온 마스크를 수행하려면 setfaclafter를 사용하여 명시적으로 설정 해야 합니다 touch. 보안은 암시적 설정을 금지합니다.

setfacl -n -m m::rwx foo

"-n"은 마스크 재계산을 억제합니다(필요하지 않을 수도 있음).
"m::rwx"는 마스크 값을 "rwx"로 설정합니다. "m::x"는 모든 읽기 및 쓰기를 비활성화합니다.


마스크가 왜 "rw-"인지 알 수 없습니다. touch파일이 생성되는 기본 디렉터리는 OP 예제 전체에서 동일하게 유지된다고 가정합니다 .

  1. "foo"에 대한 디렉토리 항목에는 소유자 "root"가 표시되어야 합니다(디렉토리에 SUID 비트가 설정되어 있으므로 sudo 명령 및 그룹 "guards"로 인해. 권한은 기본적으로 "-rw-...r--"로 설정됨). "- ...rx..."(SUID 비트로 인해 작은 s로 표시됨)

  2. 다음은 디렉터리 기본값이 되어야 하는 ACL입니다. ACL은 상속되므로 ACL이 생성되는 것을 원하지 않으며 ACL 마스크는 "rwx"의 디렉터리 기본값이어야 합니다.

그러나 생성된 경우 새 ACLe가 기본값에서 시작되고 다시 마스크를 "rwx"로 남겨두기를 원합니다. 이는 기본값에서 시작되지 않은 경우 기본 ACL의 개념에 어긋나는 것으로 보입니다. "기본" ACL은 명명된 사용자 및 명명된 그룹 ACL만 제공합니다.

이제 질문이 생깁니다. 마스크 ACLe는 무엇이어야 합니까? 기본 마스크 항목에서 "rwx"가 되기를 원합니다. 그러나 공백 마스크를 사용하여 생성한 다음 다양한 법률 용어를 적용할 수 있습니다.

  1. 임시 ACL은 user::rw-, group::rx, other::r--, group:wheel:rwx, group:guards:rwx 및 마스크:::(설정되지 않음)입니다 setfacl. 동일 파일 생성에는 규칙이 적용됩니다.

조항이 있습니다:

ACL에 명명된 사용자 또는 명명된 그룹 항목이 포함되어 있고 마스크 항목이 없는 경우 그룹 항목과 동일한 권한을 포함하는 마스크 항목이 생성됩니다.

이는 ACL 그룹 항목이 파일 디렉터리 항목에서 생성된 경우 ACL 마스크를 "rx"로 설정하고, ACL 그룹 항목이 기본 ACL에서 나온 경우 ACL 마스크를 "rx"로 설정합니다. (어쨌든 이 경우 결과는 같습니다.)

또 다른 조항이 있습니다:

기본 ACL에 명명된 사용자 항목 또는 명명된 그룹 항목이 포함되어 있고 마스크 항목이 없는 경우 기본 ACL의 그룹 항목과 동일한 권한을 포함하는 마스크 항목이 추가됩니다. ...마스킹된 항목의 권한은 마스크된 항목의 영향을 받는 모든 권한의 통합을 포함하도록 추가로 조정됩니다.

이 규칙이 적용되면 마스크는 "rx"(이전 항목과 동일한 논리)로 시작한 다음 "마스크 항목의 영향을 받는 모든 권한의 통합"으로 조정됩니다.

"마스크 항목의 영향을 받는 권한"은 명령 문서에 정의되어 있지 않습니다 setfacl. POSIX ACL 문서에 따르면 다음과 같습니다.

마스크는 자신이 속한 그룹에 대한 모든 액세스 권한과 모든 사용자 및 그룹 항목의 조합입니다.

가산적인 "결합"이라는 단어가 주어지면 "조합"을 논리적 OR로 읽습니다. 즉, 그룹이나 사용자 ACLe에 "x" 권한이 있는 경우 마스크에는 "x"가 포함됩니다.

  1. 이 모든 논리에 따르면 OP 예제의 마스크 값은 어떤 논리 경로를 따르든 "rwx"여야 합니다.

실행에 사용된 x가 마스크에 나타나지 않기 때문에 위의 추론에는 결함이 있는 것 같습니다.

따라서 공개 문서 소스에서 "숨겨진" 마스크 계산 방법에 대한 몇 가지 규칙이 있어야 합니다(또는 버그를 발견했습니다).

내 결론은 "x"가 항상 무조건 제거되고 문서가 느슨하다는 것입니다.

이 변경은 아마도 "보안" 이유로 이루어졌을 것입니다. 어떤 파일도 암시적으로 실행 가능해서는 안 되지만 생성 후에는 실행 가능 비트를 켜야 합니다.

관련 정보