umask
ACL 활성화가 새로 생성된 파일의 기본 마스크에 어떤 영향을 미치는지 누군가 설명해 줄 수 있습니까 ? 이에 대한 문서가 있습니까?
예:
$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc x.c -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx #effective:rw-
group::---
mask::rw-
other::---
나는 예측한다 mask:rwx
. 실제로, umask
예를 들어 설정한 후에 027
예상되는 동작을 얻습니다 .
답변1
다음과 같은 제목의 예를 찾았습니다.Linux의 ACL 및 MASK. 이 기사에서는 umask
ACL과 ACL이 상호 작용하는 방식을 이해하는 데 도움이 되는 다음 예를 설명합니다 .
배경
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
커널이 해당 권한을 적용하면 다음 권한이 제거되고( ---rwxrwx
) 0600만 남게 되는 것을 볼 수 있습니다 rw-------
.
예 - 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()
기본 권한 0777
( )으로 시스템 호출을 호출하는 것을 볼 수 있습니다 rwxrwxrwx
. 이번에는 다음 권한에 대한 umask가 제거( )되었으므로 022
디렉터리 생성 시 ----w--w-
0755( )가 남습니다 .rwxr-xr-x
예시 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 또는 마스크 및 ACL 중 어떤 방법을 사용하는지는 중요하지 않습니다.
- 디렉터리는 실행 권한을 얻을 수 있지만 이는 마스크 필드 설정 방법에 따라 다릅니다.
- ACL 권한에 따라 파일에 대한 실행 권한을 설정하는 유일한 방법은 수동으로 설정하는 것입니다
chmod
.
인용하다
답변2
보안상의 이유로 Linux 운영 체제에서는 실행 비트가 있는 파일의 자동 생성을 허용하지 않습니다. 이는 사이버 공격자가 서버에 액세스할 경우 해당 파일에 프로그램을 작성하고 실행하는 것을 방지하기 위한 것입니다. 이것은 단지 안전 예방조치일 뿐입니다. chmod 유틸리티를 사용하여 파일을 생성한 후에는 항상 파일의 실행 비트를 수동으로 설정해야 합니다.