touch/mkdir이 기본 ACL을 무시하는 것 같습니다.

touch/mkdir이 기본 ACL을 무시하는 것 같습니다.

나는 이것이 어리석은 실수라고 확신하지만 나 스스로 그것을 알아낼 수는 없는 것 같으니 한번 살펴보세요.

현재 폴더에 대한 ACL을 다음과 같이 설정했습니다.

zigbee2mqtt@nuc:/tmp/folder$ getfacl .
# file: .
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rwx
user:stack:r-x
user:zigbee2mqtt:rwx
user:milkpirate:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:stack:r-x
default:user:zigbee2mqtt:rwx
default:user:milkpirate:rwx
default:group::---
default:mask::rwx
default:other::---
zigbee2mqtt@nuc:/tmp/folder$ id
uid=978(zigbee2mqtt) gid=977(zigbee2mqtt) groups=977(zigbee2mqtt)

이제 다음과 같이 해당 폴더에 폴더/파일을 만들 때:

zigbee2mqtt@nuc:/tmp/folder$ touch foo; mkdir bar

그러면 폴더에 다음 권한이 부여됩니다 foo.

zigbee2mqtt@nuc:/tmp/folder$ getfacl foo
# file: foo
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rwx
user:stack:r-x
user:zigbee2mqtt:rwx
user:milkpirate:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:stack:r-x
default:user:zigbee2mqtt:rwx
default:user:milkpirate:rwx
default:group::---
default:mask::rwx
default:other::---

지금까지는 좋아 보인다.

그러나 파일의 ACL은 사라진 것 같습니다.

# file: bar
# owner: zigbee2mqtt
# group: zigbee2mqtt
user::rw-
user:stack:r-x                  #effective:r--
user:zigbee2mqtt:rwx            #effective:rw-
user:milkpirate:rwx             #effective:rw-
group::---
mask::rw-
other::---
  1. mask그러기를 바랍니다 rwx(원함).
  2. 왜냐하면 groupother은 (원하는) 동일한 ---권한이지만 다음과 같습니다.ls -la
zigbee2mqtt@nuc:/tmp/folder$ ls -la
total 20
drwxrwx---+  3 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 .
drwxrwxrwt  16 root        root        4096 Jan 15 17:59 ..
-rw-rw----+  1 zigbee2mqtt zigbee2mqtt    0 Jan 15 17:55 bar
drwxrwx---+  2 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 foo

그러나 나는 다음과 같은 것을 기대합니다.

zigbee2mqtt@nuc:/tmp/folder$ ls -la
total 20
drwxrwx---+  3 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 .
drwxrwxrwt  16 root        root        4096 Jan 15 17:59 ..
-rw-------+  1 zigbee2mqtt zigbee2mqtt    0 Jan 15 17:55 bar
drwx------+  2 zigbee2mqtt zigbee2mqtt 4096 Jan 15 17:55 foo

편집하다: 좋아, 몇 가지 테스트를 해보니 모든 것이 예상대로 작동하는 것 같았지만 결과는 ls -la올바른 결과를 반영하지 않는 것 같습니다.

zigbee2mqtt@nuc:/tmp/folder$ sudo -u nginx -g zigbee2mqtt bash
nginx@nuc:/tmp/folder$ ls
ls: cannot open directory '.': Permission denied

답변1

목록에 표시되는 것은 ls"레거시" 권한 비트입니다. 이는 ACL을 지원하지 않는 시스템에 대한 모든 권한이며 ACL을 지원하지 않는 도구(또는 사용자!)가 사용할 수 있는 모든 권한입니다. .

"레거시" 그룹 권한 비트아니요그룹 ACL에 해당하지만 ACL 마스크(acl(5)매뉴얼 페이지):

ACL 항목과 파일 권한 비트 간의 대응

ACL에 의해 정의된 권한은 파일 권한 비트에 의해 지정된 권한의 상위 집합입니다.

파일 소유자, 그룹 및 기타 권한과 특정 ACL 항목 간에는 대응 관계가 있습니다. 소유자 권한은 ACL_USER_OBJ 항목의 권한에 해당합니다.ACL에 ACL_MASK 항목이 있는 경우 그룹 권한은 ACL_MASK 항목의 권한에 해당합니다. 그렇지 않고 ACL에 ACL_MASK 항목이 없으면 그룹 권한은 ACL_GROUP_OBJ 항목의 권한에 해당합니다. 다른 권한은 ACL_OTHER 항목의 권한에 해당합니다.

마스크의 목적은 ACL 항목이 명명된 사용자, 명명된 그룹 또는 소속 그룹에 부여할 수 있는 권한을 제한하는 것입니다. 어느 정도까지는 세 가지 "전통적인" 권한 비트 세트가 1) 소유 사용자, 2) 명시적으로 정의된 기타 사용자(ACL 없음: 그룹의 구성원 소유, ACL 있음: 기타 지정된 사용자)에 적용되는 것으로 생각할 수 있습니다. 사용자 또는 다른 명명된 그룹의 구성원) 및 3) 기타 모든 사람.

실제 추론은 사용자나 프로그램이 소유자만 파일에 대한 쓰기 액세스 권한을 갖도록 하려는 경우 이와 같은 방법이 chmod go-w여전히 트릭을 수행할 것이라는 것입니다.참가자가 ACL을 모르더라도.

따라서 ACL 항목이 있기 때문에 그룹 목록에 표시되도록 의도적 rwx으로 ls설계된 것입니다 . 출력은 단순히 소유 사용자 이외의 다른 사용자가 파일에 대한 읽기, 쓰기 및/또는 실행 권한을 가지고 있음을 암시합니다. 마스크를 (예: 또는 적절한 명령 사용) 로 설정하면 이러한 ACL 항목이 무효화 됩니다 .user:zigbee2mqtt:rwxuser:stack:r-xls000chmod g-rwxsetfacluser:zigbee2mqttuser:stack


를 사용하여 파일을 생성하고 touch볼 때 mask::rw-이는 대부분의 다른 도구가 대신 touch권한이 있는 일반 파일을 생성하여 이러한 비트를 보존하기 때문입니다. 대부분의 파일은 실행 가능하지 않아야 합니다. ACL에 관계없이 시스템 호출에 전달된 권한은 변경 권한을 사용하는 것처럼 여전히 유효합니다 . 이러한 비트를 끄는 것 외에도 프로그램은 권한 비트를 .06660777xopen()chmod()x0600

관련 정보