linux에서 ACL 및 MASK 라는 제목의 예제를 찾았습니다 . 이 기사에서는 ACL과 umask
상호 작용 방식을 이해하는 데 도움이되는 다음 예제를 보여줍니다 .
배경
파일이 Linux 시스템에서 작성되면 기본 권한 0666
이 적용되는 반면 디렉토리가 작성되면 기본 권한 0777
이 적용됩니다.
예 1-파일
umask를 077로 설정하고 파일을 터치한다고 가정하십시오. 우리 strace
는 이것을 할 때 실제로 무슨 일이 일어나고 있는지 볼 수 있습니다 :
$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile
이 예에서는 시스템 호출 open()
이 권한 0666으로 이루어 졌음을 알 수 있지만 umask 077
커널에 의해 적용되면 다음 권한이 제거되고 (0 ---rwxrwx
) rw-------
일명 0600으로 남습니다 .
예-2 디렉토리
기본 사용 권한이 0666이 아니라 0777이라는 점을 제외하고 동일한 개념을 디렉토리에 적용 할 수 있습니다.
$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777) = 0
drwxr-xr-x 2 saml saml 4096 Jul 9 10:55 testdir
이번에는 mkdir
명령을 사용하고 있습니다. mkdir
명령은 시스템 호출이라고합니다 mkdir()
. 위의 예에서 mkdir
명령 mkdir()
이 defaul 권한 0777
( rwxrwxrwx
)으로 시스템 호출을 호출 했음을 알 수 있습니다 . 이번에 022
는 다음과 같은 권한 의 umask를 사용 하여 제거 ( ----w--w-
)되므로 rwxr-xr-x
디렉토리를 만들 때 0755 ( )로 남습니다 .
예 3 (기본 ACL 적용)
이제 디렉토리를 만들고 기본 ACL이 그 안에있는 파일과 함께 디렉토리에 적용될 때 발생하는 상황을 보여 드리겠습니다.
$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir
$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
이제 파일을 만들어 봅시다 aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
이제 새로 작성된 파일의 권한을 얻으십시오.
$ getfacl --all-effective acldir/aclfile
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
마스크를 주목하십시오 mask::rw-
. mask::rwx
디렉토리를 만들 때와 다른 이유는 무엇 입니까?
체크 luvly
파일의 생성에 사용 된 어떤 기본 권한 볼 로그 파일 :
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
약간 혼란스러워지는 곳입니다. rwx
디렉토리를 만들 때 마스크를 설정 하면 파일을 만들 때와 동일한 동작이 예상되지만 작동하지 않습니다. 커널이 open()
기본 권한으로 함수를 호출하기 때문 입니다 0666
.
요약
- 파일은 실행 권한 (마스킹 또는 유효)을 얻지 못합니다. ACL, umask 또는 mask & ACL 중 어떤 방법을 사용하든 중요하지 않습니다.
- 디렉토리는 실행 권한을 얻을 수 있지만 마스킹 필드 설정 방법에 따라 다릅니다.
- ACL 권한 아래있는 파일에 대한 실행 권한을 설정하는 유일한 방법은을 사용하여 수동으로 설정하는 것
chmod
입니다.
참고 문헌
mask::rw-
. 그러나 그것은 실제로 당신의 질문이 아닙니다. 맞습니까?