디렉토리 및 파일에서 다른 ACL 설정


15

rwx모든 사람이 모든 디렉터리를 사용할 수 있고 새로 만든 모든 파일이 되도록 파일 공유에 대한 기본 권한을 설정하고 싶습니다 rw.

이 공유에 액세스하는 사람은 모두 같은 그룹에 있으므로 걱정할 필요가 없습니다.

모든 사용자의 umask 등을 변경하지 않고 ACL을 통해이 작업을 수행했습니다. 내 현재 호출은 다음과 같습니다.

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

내 문제는 새로 만든 모든 하위 디렉토리rwx원하지만 새로 만든 파일 만 원한다는 것 rw입니다.

원하는 최종 결과를 얻는 더 좋은 방법이 있습니까? 별도 파일의 디렉토리에 대한 ACL 설정에 대한 몇 가지 방법에 비슷한 맥락에서, 거기에 chmod +xchmod +X?

감사

답변:


12

Gilles가 지적했듯이 setfacl기본 권한은 최대 권한을 지정하며 기본적으로 umask. 따라서 파일 rw을 만든 응용 프로그램에서 파일을 실행하도록 특별히 요청하지 않은 경우 새로 만든 파일이됩니다 .

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

위의 유효 파마에 주목하십시오. (예 gcc를 들어 실행 파일 및 cp복사중인 파일이 실행 파일인지 여부 와 같이 생성 된 파일에서 실행 비트를 설정하도록 요청하는 프로그램은 거의 없습니다 .)

아니면 첫 번째 setfacl 명령이 원하는 방식으로 작동하고 있지만 두 번째 명령은 그렇지 않은 것입니까? 즉, 다른 일반 파일에 실행 권한을 부여하지 않고 이전 파일에 대한 권한을 수정하여 디렉토리를 통과 할 수 있는지 확인하려고합니다.

내 버전은 원하는대로 정확하게 setfacl허용 X합니다. 예 :

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

사용중인 버전이이를 setfacl지원하지 않으면 사용하지 find않겠습니까?

권한 덮어 쓰기, 파일의 경우 rw, dirs의 경우 rwx로 설정

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

기존 그룹 권한을 기반으로 mygroup ACL 권한 설정

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

그룹 마스크가 효과적인 권한을 제공하는지 확인하고 싶을 것입니다. 그렇지 않은 경우 다음도 실행해야합니다.

$ find . -type d -exec chmod g+rwX '{}' ';'

4

미래의 독자들에게 setfacl파일에 실행 비트를 추가하지 않고 기존 파일 / 폴더 에서 사용 하려면 해결책은 @Mikel의 대답의 일부입니다 .

내 setfacl 버전은 X를 원하는대로 정확하게 허용합니다. 예 :

setfacl g:mygroup:rwX

setfacl문서 에서 관련 발췌 :

perms 필드는 읽기 (r), 쓰기 (w), 실행 (x), 파일이 디렉토리이거나 이미 일부 사용자 (X)에 대한 실행 권한이있는 경우에만 실행 권한을 나타내는 문자의 조합입니다 .


2

Linux ACL을 이해하는 한 setfacl -Rdm g:mygroup:rwx share_name정확히 원하는 것을 수행합니다. 실험:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

그런 다음 그룹의 다른 사용자로 mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

무슨 일이야?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

에 대한 유효 ACL mygroup은 ACL_MASK ACL_GROUP항목 mygroup( rwx)이있는 ( )에 대한 항목 의 결과입니다 rw-.

ACL (5) 매뉴얼 페이지는 "액세스 검사 알고리즘"의 계산이 설명합니다. ACL_MASK항목이 생성되는 방법을 설명하지는 않지만 실제로 올바른 일이 발생하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.