umask는 ACL에 어떤 영향을 줍니까?


12

umaskACL이 활성화 된 경우 누군가 가 새로 작성된 파일의 기본 마스크에 어떤 영향을 미치는지 설명 할 수 있습니까 ? 이것에 관한 문서가 있습니까?

예:

$ 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예상되는 동작이 나타납니다.


u77의 umask를 사용하면을 얻을 수 있습니다 mask::rw-. 그러나 그것은 실제로 당신의 질문이 아닙니다. 맞습니까?
slm

@ slm 이것은 내 질문의 일부입니다. 새 파일의 마스크가 umask에 어떻게 의존하는지 알고 싶습니다. 077 을 사용하면 디렉토리의 기본 마스크가 mask::rw-아닌 mask::rwx것이 무엇인지 놀랐습니다 .
jofel

좋아, 나는 이것을 정리하는 데 도움이되는 예제로 지금 대답을 업데이트하고있다. 몇 분만 기다려주세요.
slm

질문 은 밀접한 관련이 있습니다.
jofel

답변:


10

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입니다.

참고 문헌


@jofel-이것이 의미가 있는지 알려주십시오.
slm

@s 자세한 답변에 감사드립니다. chmod syscall의 그룹 권한은 파일 마스크 ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx)에 영향을 미칩니다 . 아마도 이것에 대해 새로운 질문을 시작해야 할 것입니다.
jofel

@ jofel-네, 다른 질문처럼 들립니다.
slm

@sIm 그리고 그것은 이미 여기에 답변 되었습니다 .
jofel

"리눅스 시스템에서 파일을 만들 때 기본 권한 0666이 적용됩니다 ..." -응용 프로그램을 만드는 데 달려 있기 때문에 정확하지 않습니다.
ilkkachu

2

보안상의 이유로 Linux 운영 체제는 실행 비트를 사용하여 파일을 자동으로 만들 수 없습니다. 이는 사이버 공격자가 이러한 파일에 프로그램을 작성하여 서버에 액세스 할 수있는 경우 실행하지 못하도록합니다. 안전 예방책 일뿐입니다. chmod 유틸리티를 사용하여 파일을 만든 후에는 파일에서 실행 비트를 영원히 수동으로 설정해야합니다.

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