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 '{}' ';'