FreeBSD는 왜 w 마스크를 잃어 버렸지 만 데비안은 그것을 유지 했습니까?


10

FreeBSD ACL과 Linux ACL의 동작 차이를 이해하려고합니다. 특히 기본 ACL에 대한 상속 메커니즘.

데비안 9.6과 FreeBSD 12에서 다음을 사용했습니다.

$ cat test_acl.sh
#!/bin/sh

set -xe

mkdir storage
setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage

touch outside
cd storage
touch inside
cd ..

ls -ld outside storage storage/inside

getfacl -d storage
getfacl storage
getfacl outside
getfacl storage/inside

umask

데비안 9.6에서 다음과 같은 결과가 나옵니다.

$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r--  1 aaa aaa    0 Dec 28 11:16 outside
drwxr-xr-x+ 2 aaa aaa 4096 Dec 28 11:16 storage
-rw-rw----+ 1 aaa aaa    0 Dec 28 11:16 storage/inside

+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---

+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---

+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--

+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx          #effective:rw-
mask::rw-
other::---

+ umask
0022

주목하라 있다는 outside및 inside파일은 서로 다른 권한이 있습니다. 특히, outside파일은 -rw-r--r--이 사용자에 대한 기본값이며 inside파일은 -rw-rw----내가 지정한 기본 ACL에 따라storage 디렉토리를 입니다.

FreeBSD 12에서 동일한 스크립트의 출력 :

$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r--  1 aaa  aaa    0 Dec 28 03:16 outside
drwxr-xr-x  2 aaa  aaa  512 Dec 28 03:16 storage
-rw-r-----+ 1 aaa  aaa    0 Dec 28 03:16 storage/inside

+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---

+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x

+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--

+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx      # effective: r--
mask::r--
other::---

+ umask
0022

(참고 데비안 은 FreeBSD에서 사용하지 않는 곳을 getfacl사용하지 않더라도 기본 ACL을 표시 -d하지만 실제 ACL은 생각하지 않습니다.storage 이 다른 것으로 .)

여기에서 파일 outside과 inside파일은 서로 다른 권한을 갖지만, inside파일에는 데비안 버전의 그룹 쓰기 권한이 없습니다. 아마도 데비안 w의 마스크가 FreeBSD의 마스크에서를 잃어 버렸기 때문일 것입니다 w.

FreeBSD는 왜 w마스크를 잃었 지만 데비안은 그것을 유지 했습니까?


1
getfacl storage두 시스템 모두에 무엇이 표시됩니까?
— Mikel

고정 그룹 비트 ( g+s)를 사용하지 않는 경우에도 동일하게 작동합니까 ?
— sebasth

@Mikel getfacl정보 를 표시하기 위해 원래의 질문 내용을 업데이트했습니다 .
— Roxy

@sebasth setgid 비트를 제거하기 위해 원래 질문을 업데이트했습니다. 관련이 없습니다.
— Roxy

하는 ACL을 설정 한 후 storage, ls 표시해야합니다+ , 유사 나는 기대 getfacl출력하기 여러분이 데비안 시스템에있어 것과 유사합니다. setfacl성공 종료 코드를 리턴 했습니까 ?
— sebasth

답변:


1

요컨대 나는 umask를 다르게 사용한다고 가정합니다.

0022는 정확히 그룹-다른 설정 해제 W입니다. 쓰기 금지를 제거하고 결과를 확인하기 위해 umask를 변경할 수 있습니다.

솔라리스 일명 SunOS 매뉴얼 (및 주석도 포함)과 관련이 있기 때문에 "... 디렉토리에 기본 ACL 항목이 포함되어 있으면 umask (1)가 적용되지 않습니다."


1
하나의 권리와 다른 하나가 잘못 되었습니까? 이것이 준수해야하는 표준이 있습니까?
— Roxy

나는 이것에 대한 전문가는 아니지만 (철학적으로도) FreeBSD의 WEB man은 umask를 계산해서는 안된다고 명시 적으로 말하는 "정식"(논쟁 적으로) 구현 (SunOS)에 대한 항목을 가지고 있습니다 : freebsd.org/cgi/man.cgi?query= setfacl & manpath = SunOS + 5.10
— poige

"… 디렉토리에 기본 ACL 항목이 포함되어 있으면 umask (1)가 적용되지 않습니다.…"
— poige

FreeBSD의 자체 매뉴얼 페이지는 언급되지 않았 umask으므로 이것은 정의 되지 않은 행동으로 보입니다. FreeBSD의 ACL 구현이 SunOS와 동일하게 작동합니까?
— Roxy

분명히 그것은 (멘션) 원인이 아니며 언급 된 것과 수행 된 것 사이의 모순을 분명히 볼 수 있습니다.
— poige
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.