“umask”란 무엇이며 어떻게 작동합니까?


190

umask는 파일 권한 을 제어하는 ​​것으로 생각 하지만 완전히 이해하지는 못합니다.

터미널umask 0644 에서 실행 한 후 명령 행 텍스트 편집기로 작성한 파일을 읽을 수 없습니다 . 해당 파일의 권한 이 기본값 대신으로 설정되어 있습니다.nano00220755

umask는 어떻게 작동합니까? 난 그냥에서의 umask에 각 숫자를 제거 할 수 있다고 생각 0777, 7 - 6 = 1그리고 7 - 4 = 3, 그래서 권한이있을 것으로 예상 0133하지만, 분명히, 이것은 사실이 아니다.

  1. 정확히 umask 란 무엇입니까? 내가 "Linux noob"인 것처럼 나에게 설명해라
  2. umask로 어떻게 계산합니까?
  3. umask의 사용 사례는 무엇입니까?

app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
grabantot

답변:


143

umask는 응용 프로그램이 파일에 설정할 수없는 권한 세트 역할을합니다. 프로세스 의 파일 모드 작성 마스크 이며 디렉토리 자체에 설정할 수 없습니다. 대부분의 응용 프로그램은 실행 권한이 설정된 파일을 만들지 않으므로 기본값은 666이며 umask에 의해 수정됩니다.

소유자에 대한 읽기 / 쓰기 비트와 다른 사용자에 대한 읽기 비트를 제거하도록 umask를 설정 했으므로 777응용 프로그램에서 와 같은 기본값 은 파일 권한이 133됩니다. 이것은 당신 (그리고 다른 사람들)이 파일을 실행할 수 있고 다른 사람들이 파일에 쓸 수 있음을 의미합니다.

소유자가 아닌 다른 사람이 파일을 읽거나 쓰거나 실행하지 못하게 077하려면 그룹 및 다른 사람에 대한 해당 권한을 끄는 것과 같은 umask를 사용해야 합니다.

반대로 umask of 000는 새로 만든 디렉토리를 모든 사람이 읽고 쓸 수 있고 내림차순으로 만들 수 있습니다 (권한은 777). 이러한 umask는 안전하지 않으므로 umask를로 설정해서는 안됩니다 000.

Ubuntu의 기본 umask 022는 새로 만든 파일을 모든 사람이 읽을 수 있지만 소유자 만 쓸 수 있음을 의미합니다.

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Ubuntu Oneiric (11.10)부터 기본 umask가 완화되어 002소유자 그룹에 대한 쓰기 액세스가 확장되었습니다.

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

umask보기 및 수정

현재 umask 설정을 보려면 터미널을 열고 다음 명령을 실행하십시오.

umask

현재 쉘의 umask 설정을 077과 같은 다른 것으로 변경하려면 다음을 실행하십시오.

umask 077

이 설정이 작동하는지 테스트하려면 파일을 작성하고 (기존 파일의 파일 권한에 영향을 미치지 않음) 파일에 대한 정보를 표시하십시오.

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

umask 설정은 동일한 쉘에서 시작된 프로세스에 의해 상속됩니다. 예를 들어, gedit터미널에서 실행하여 텍스트 편집기 GEdit을 시작하고 gedit를 사용하여 파일을 저장하십시오. 새로 만든 파일은 터미널에서와 동일한 umask 설정의 영향을받습니다.

사용 사례 : 다중 사용자 시스템

여러 사용자가 공유하는 시스템에있는 경우 다른 사용자가 홈 디렉토리의 파일을 읽을 수 없도록하는 것이 좋습니다. 이를 위해 umask는 매우 유용합니다. 다음을 사용 ~/.profile하여 새 줄을 편집 하고 추가 하십시오 .

umask 007

이 umask 변경 사항을 ~/.profile적용 하려면 다시 로그인 해야합니다. 다음으로, 월드의 읽기, 쓰기 및 실행 비트를 제거하여 홈 디렉토리에있는 파일의 기존 파일 권한을 변경해야합니다. 터미널을 열고 다음 을 실행하십시오.

chmod -R o-rwx ~

이 umask 설정을 시스템의 모든 사용자에게 적용하려면에서 시스템 전체 프로파일 파일을 편집하십시오 /etc/profile.


3
그렇다면 umask의 숫자는 무엇을 의미합니까? 왜 777그룹과 다른 사람들이 그룹에 글을 쓸 077수 있지만 그들이 할 수 없다는 것을 의미합니까?
HelloGoodbye

3
또한 umask가 000이면 파일 권한은이라고 777합니다. 따라서 기본 마스크를 022사용하면 파일 권한이 755, 즉에 해당 -rwxr-xr-x하지 않아야 -rw-r--r--합니까?
HelloGoodbye

12
인정해야한다,이 설명은 나에게 도움이 된 것보다 더 혼란 스러웠다.
Connel Hooley

8
주의 하는 것이 우분투의 기본 umask를 0002로 변경 이 답변이 게시 된 후 한 달입니다.
Jeff Puckett

7
@HelloGoodbye umask가 있으면 000권한이 제거되지 않습니다. 같은 응용 프로그램 touchnano기본적으로 파일을 만들 666파일 권한이 남아 있도록 666만의 umask를이 022때문에 그룹과 다른 사람에 대한 쓰기 비트를 제거 666하기 위해 사라지게 644일명 -rw-r--r--고려 mkdir의 모드를 생성하는 기본 777의 umask를 함께 022에 권한을 줄일 수755
제프 Puckett

38

허용 된 답변에 대한 좋은 토론 외에도 umask12.04 이상에서 관리되는 방법과 관련하여 에 대해 더 많은 점을 추가 할 가치가 있습니다.

Umask와 pam_umask

공식적인 메모는 다음 과 같이 기본 umask는 현재 있으며 in이 /etc/login.defs아닙니다 ./etc/profile/etc/profile

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask아래에 간단하게 설명되어 있으며 사용자 정의 umask 설정을 사용자가 배치하는 기본 파일은 여전히 ​​그렇습니다 ~/.profile.

Pam_umaskUbuntu 운영에 중요한 많은 PAM 모듈 중 하나입니다 (다른 모듈apropos '^pam_' 의 맨 페이지를 찾기 위해 실행 ). 에서 위한 pam_umask것이 주목된다

pam_umask는 현재 환경의 파일 모드 작성 마스크를 설정하는 PAM 모듈입니다. umask는 새로 작성된 파일에 지정된 기본 권한에 영향을줍니다.

기본 umask에 대한 참고 사항

기본 umask가 022 인 경우에도 기본 775 권한으로 새 폴더를 작성하고 기본 664 권한으로 작성된 파일 을 $HOME작성할 수 있습니다 . 처음에는 모순되는 것처럼 보이고 설명 할 가치가 있습니다.mkdirtouch

우분투에서 기본 umask는 022이지만, /etc/login.defs조건이 충족되면 루트 사용자가 아닌 사용자에 대해 umask를 002 로 설정할 수 있는 설정이 있으므로 전체 내용은 아닙니다 (아래 발췌 참조). 일반 설치에서는 /etc/login.defs설정이 포함되어 있습니다 USERGROUPS_ENAB yes. 이것은 무엇입니까

uid가 gid와 같고 username이 기본과 동일한 경우 루트가 아닌 사용자에 대해 umask 그룹 비트 설정을 소유자 비트와 동일하게 할 수 있습니다 (예 : 022-> 002, 077-> 007). 그룹 이름.

따라서 내 stat폴더 mkdir와 같은 단일 사용자 시스템에서 새 폴더를 만들 때 다음과 같은 이유가 있습니다 (uid 및 gid는 동일 함).

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

자세한 내용은 man pam_umaskUbuntu 맨 페이지 온라인을 참조하십시오 .


두 번째 부분에 뭔가 빠진 것 같습니까? (USERGROUP_ENABLE?) +1 업데이트 된 정보
Lekensteyn

2
@Lekensteyn 이상하게도, 설정 /etc/login.defsUSERGROUPS_ENAB yes확인 후 확실 합니다. 해당 파일의 구문이 약간 다릅니다.

방금 파일과 소스를 확인했는데이 설정 (및 기타 설정)의 이름이 "_ENAB"로 혼동됩니다.
Lekensteyn

33

이것은 꽤 오래되었지만 언급 할 가치가 있습니다. 파일 시스템 권한과 달리 umask를 계산합니다. 8 진 umask는 비트 NOT을 사용하여 인수의 단항 보수의 비트 AND를 통해 계산됩니다. 8 진법은 다음과 같습니다.

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

그런 다음 umask 적절한 선점을 설정하도록 계산할 수 있습니다.

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

파일에 대한 최종 권한 계산

기본 권한에서 umask를 빼면 다음과 같이 파일의 최종 권한을 결정할 수 있습니다.

666 – 022 = 644
  • 파일 기반 권한 : 666
  • umask 값 : 022
  • 새 파일의 권한을 얻으려면 빼기 (666-022):644 (rw-r–r–)

디렉토리에 대한 최종 권한 계산

기본 권한에서 umask를 빼면 다음과 같이 디렉토리의 최종 권한을 결정할 수 있습니다.

777 – 022 = 755
  • 디렉토리 기본 권한 : 777
  • umask 값 : 022
  • 새 디렉토리의 권한을 얻으려면 빼기 (777-022):755 (rwxr-xr-x)

3
나는 최종 허가가 어떻게 계산되는지 생각하지 않습니다.이 경우 마스크 해제 값이 077어떻게 뺄 666-077까요?
Sufiyan Ghori 2016 년

5
@SufiyanGhori Baron의 설명은 파일 승인을 위해 완료되지 않았습니다. 귀하의 경우와 추후의 계산에서 기억하기 쉽도록 다음과 같은 방법으로 빼야합니다. 6-0 6-7 6-7이 세 가지 결과가 -1이면 0이되도록하십시오. 최종 결과 : 600
Huy.PhamNhu

1
@ Huy.PhamNhu 맞지 않습니다. 기본 권한이 666이고 umask가 033이면 확실하게 633을 얻을 수 없습니다.
maaartinus

7
아니, 아니. 빼기를 사용하여 umask를 계산할 수는 없습니다 (일부 값에서만 작동하지만 전부는 아님). umask를 "비활성화 비트"로 생각해야합니다. Sufiyan과 Wisbucky의 다른 답변을 참조하십시오.
wisbucky

33

다른 사람들은 umasking의 개념을 설명하고 왜 필요한지 설명했습니다. 2 센트를 더하고 권한이 실제로 어떻게 계산되는지에 대한 수학적 예를 보여 드리겠습니다.

우선, "마스크"는 산술적 의미에서 "빼기"를 의미하지 않습니다. 차용이나 캐리가 없으며, 둘째 umask는 마스크입니다. 빼는 숫자가 아닙니다.

셋째, 마스크는 권한 비트를 끕니다. 이미 해제되어 있으면 umask권한이 변경되지 않습니다.

예를 들어, 077파일 인 파일 666및 디렉토리 인 시스템 기본값에서 마스크를 해제해야한다고 가정 하십시오 777.

사용할 명령은

umask 077

(이진수로 값을 마스크 해제 000 111 111)

이 언 마스크가하는 것은 처음 6 개의 LSB (최하위 비트) 1중 하나가 있으면 해제되고 이미 해제되어 있으면 변경되지 않습니다.

최종 권한은 다음과 같이 계산됩니다.

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

110값이 모두 어떻게 바뀌 었는지 관찰하십시오 000.

비슷하게,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

7
이것이 답이되어야합니다!
Abdelouahab

@SufiyanGhori 따라서 umask 177(001 111 111) 인 경우, 첫 번째 7 번째 최하위 비트 인 경우1
Kasun Siyambalapitiya

맞습니다 @KasunSiyambalapitiya
Sufiyan Ghori

1
수식도 이와 같습니다result = file permission & (!umask)
Eric Hodgins

1
@EricHodgins : 그렇습니다.
Naidu를 Amit

14

기본 사상:

당신이 대부분의 인간과 같고 도대체 "비트 umasks가 비트 단위 AND를 사용하여 인수의 단항 보수의 비트 단위 AND를 통해 계산 됨" 이 무엇을 의미하는지 이해하지 못한다면 여기 간단한 설명이 있습니다.

우선, "마스크"가 무엇인지 생각하십시오. 마스크가 무언가를 차단합니다. 마스킹 테이프를 생각하십시오. 이 경우 umask는 새 파일이나 디렉토리를 만들 때 권한을 차단 / 비활성화하는 마스킹 테이프와 같습니다.

새 디렉토리를 만들 때 기본 권한은 octal 777 (111 111 111)이고 새 파일은 octal 666 (110 110 110)입니다. 특정 권한을 차단 / 비활성화하도록 umask를 설정했습니다.

  • 마스크 비트는 1해당 권한을 차단 / 비활성화하는 것입니다 (해당 비트 위에 마스킹 테이프를 넣습니다).
  • 마스크 비트를 0사용하면 권한을 통과 할 수 있습니다 (해당 비트 위에 마스킹 테이프 없음).

따라서 octal 022 (000 010 010)마스크는 및를 비활성화 group write하고 others write다른 모든 권한이 통과하도록 허용합니다.

계산:

다음은 022 umask를 사용하여 새 파일 (기본 666 권한)에 대한 계산 예입니다.

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

그래서 새 파일을 만들 때 644의 결과가 나타납니다.

더 쉬운 방법 :

그러나 역 마스크 계산으로 인해 혼란 스러우면 상징적 umask 표기법을 사용하는 더 쉬운 방법이 있습니다. 이 방법을 사용하면 마스크 비트 대신 통과 비트 만 지정하면됩니다.

  • umask u=rwx,g=rx,o=rx위한 수단은 통과 수 user rwx, group rx, other rx. 어느 비활성화 의미한다 group w, others w. 이 명령을 실행하면 check umask을 얻게 022됩니다.
  • umask u=rwx,g=,o=통과 허용을 의미합니다 user rwx. group및에 대한 모든 액세스를 비활성화합니다 others. 이 명령을 실행하면 check umask을 얻게 077됩니다.

보너스 계산 :

"비트 형 NOT을 사용하여 인수의 단항 보수의 비트 단위 AND를 통해 계산 된 8 진수 umask"가 무엇을 의미하는지 이해 하려면 여기에 설명 할 수있는 몇 가지 논리 테이블이 있습니다. 마스크 비트 1는 비활성화를 0의미하고 통과한다는 의미입니다.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

로 테이블을 만들면 NOT(mask)간단한 AND논리 테이블입니다!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

따라서 공식은 다음과 같습니다. result = perm AND (NOT mask)

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