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

주목하라 있다는 outsideinside파일은 서로 다른 권한이 있습니다. 특히, 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 이 다른 것으로 .)

여기에서 파일 outsideinside파일은 서로 다른 권한을 갖지만, 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.