Umask가 작동하지 않음

Umask가 작동하지 않음

어떻게 활용하는지 알아보려고 합니다 umask.

나는 umask 027이로 인해 다른 사람이 아닌 그룹에 대한 모든 권한, 읽기 및 실행 권한을 얻을 것으로 예상했습니다.

기본값인 777 - 027 = 750을 기준으로 합니다.

하지만 내가 실행할 때 :

umask 027
touch test
ls -l test

나는 돌아왔다:

-rw-r----- 1 philip philip 0 Jun  3 12:14 test

이것은 내가 전혀 기대했던 것이 아닙니다.

내 이해에 어떤 ​​문제가 있습니까 umask?

답변1

umask는 권한을 추가할 수 없으며 문제의 파일을 생성한 프로세스에서 설정한 일부 권한 비트를 마스크하는 데만 사용됩니다.

umask는 새로 생성된 파일이나 디렉터리의 권한을 수정하기 위해 및 기타 파일 생성 시스템 호출 open(2)에서 사용됩니다 . mkdir(2)특히 umask의 권한은 mode 매개변수에서 로 변경되고 open(2)꺼집니다 mkdir(2).

(매뉴얼 페이지umask(2))

touch명시적으로 비공개로 알려진 항목이나 실행 가능해야 하는 항목을 생성하지 않을 때(이 경우 각각 또는 를 0666사용함 ) 대부분의 다른 응용 프로그램에서 수행하는 것처럼 권한을 사용하여 파일을 생성합니다 . 이메일 클라이언트와 같은 것들은 권한 비트를 강제로 추가하는 데 사용될 수 있다면 문제가 됩니다 . 소유자만 접근할 수 있는 파일을 생성할 수 없습니다!06000777umaskssh-keygen

$ umask 027; rm xxx; strace -etrace=open touch xxx 2>&1 | grep xxx ;  ls -l xxx
open("xxx", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-r----- 1 itvirta itvirta 0 Jun  3 20:40 xxx

더 넓은 권한을 가진 파일을 생성하도록 준비하면 실행 비트도 표시됩니다.

$ umask 027; rm yyy; 
$ perl -MFcntl -e 'sysopen F, "yyy", O_WRONLY|O_CREAT, 0777'
$ ls -l yyy
-rwxr-x--- 1 itvirta itvirta 0 Jun  3 20:40 yyy*

마찬가지로 x비트 설정 없이 디렉토리를 생성할 수 있습니다.

$ perl -MFcntl -e 'mkdir "ddd", 0666'
$ ls -ld  ddd
drw-r----- 2 itvirta itvirta 4096 Jun  3 20:45 ddd/

관련 정보