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