본문 바로가기
Programming/Linux

[Linux] umask 기본접근권한 설정 및 진리표

by 고양이해적 2022. 10. 23.

📌 umask 

유닉스계열에서 사용하는 새로생성된 파일 혹은

디렉토리의 접근권한값을 설정 하는 명령어이다.

 

 

현재 mask값 확인하는 명령어

-S 옵션이 붙으면 8진수가 아닌 문자로 출력한다.

 

 

 

 

이미지와 같이 test 파일을 생성했을때 rw-rw-r-- (664) 라는 권한을 갖는 이유는

mask 값이 0002 이기 때문인것인데, 아래 풀이를 참고 하면되겠다.


📜 일반파일

일반파일이 가지는 최대권한은 rw-rw-rw- (666) 이다.

일반파일의 성격상 실행이 필요한 대상(.sh 파일 제외)

아니기 때문에 x(excute)의 값은 가지지 않는다.

 

📂 디렉토리

디렉토리가 가질수 있는 최대권한은 rwxrwxrwx (777) 이다.
디렉토리를 접근하기 위해 이동하는것이 x(excute) 하는 개념이기때문이다. 

 

따라서 mask는 최대권한값을 기준(666,777) 으로 설정된 값(0002)을 연산한다. 

umask의 기본접근권한은

2진수값 ➡️ 현재mask값 ➡️ XOR연산 ➡️ 8진수 순으로 출력 된다. 

 

 

 

✅ XOR Gate (Exclusive OR 로 발음한다.)

연산 시 표기는 ⊕ 기호로 나타낸다.

 

XOR는 각 비트수를 가지고 연산을 하게 되는데
둘 중 비교한 값이 같으면 0, 둘 중 비교한 값이 다르면 1로 출력한다.

 

Input Output Input, Output examples
A B A XOR B  
0 0 0 00 ➡️ 0
0 1 1 0⊕1 ➡️ 1
1 0 1 1⊕0 ➡️ 1
1 1 0 1⊕1 ➡️ 0

 

 

✅ umask 값이 0002일때 일반파일 권한 풀이

  user group others
문자표기 rw- rw- rw-
2진수 110 110 110 
mask(002 기준) 000 000 010 
XOR 110 110 100
8진수 6 6 4

 

2진수 : 권한이 있으면 1, 없으면 0

mask(002 기준) : 십진수 "2" 를 이진수로 변환하면 "10"

XOR : 2진수값과 mask 값을 연산

8진수 :  XOR값을 10진수로 변환 후 8진수로 표기

 

따라서 상기 이미지의 test 파일을 새로 생성 했을때  rw-rw-r-- (664)의 권한이 있는것이다.

그런데 매번 설정시 복잡하게 계산을 해야할까? (귀찮게) 

 

💡 그냥 권한의 최대값에서 mask값을 빼면 된다. 💡

디렉토리가 가지는 권한 최대가 아까 777이라고 하였다.

umask값이 022 이라면 777-022=755 (!)

 

굳이 풀이를 하자면 아래와 같이 정리 할 수 있겠다.

 

✅ umask 값이 0022일때 디렉토리 권한 풀이

  user group others
문자표기 rwx rwx rwx
2진수 111 111 111 
mask(022 기준) 000 010 010 
XOR 111 101 101
8진수 7 5 5

 

 

✅ 그런데 666-777=? 으로 연산을 해야 할 경우에는 -111일까?

 

리눅스 시스템에서는 umask 진리표를 기준으로 파일,디렉토리 권한을 부여하기때문에 

진리표에 의해서 0으로 계산한다.


umask 진리표
요청 권한 1 1 0 (값이 작은경우 : 666) 0
마스크 1 0 1 (값이 큰 경우 : 777) 0
부여된 권한 0 1 0 (해당 예제가 여기에 해당됨) 0

 

 

✅ 666-777=000 풀이

  user group others
문자표기 rw- rw- rw-
2진수 110 110 110 
mask (777기준) 111 111 111
XOR 001 001 001
umask 진리표 000 000 000

 

마스크값을 적용하는 과정에서

마스크값이 2진수값보다 작을때는 XOR으로 연산 하고
2진수값보다 마스크값이 더 클때 진리표에 의해서 0으로 연산 한다.

 


✅ 일반적으로 많이 사용하는 mask값

mask값 일반파일 8진수 파일 권한 디렉토리 8진수 디렉토리 권한
022 644 rw-r--r-- 755 rwxr-xr-x
027 640 rw-r----- 750 rwxr-x---
077 600 rw------- 700 rwx------

 

 

 

 

 

잘못계산되었거나 틀린사실이 있으면 댓글로 알려주세요. 정정하겠습니다 😀

 

 

참고한 사이트

https://www.computernetworkingnotes.com/linux-tutorials/how-to-change-default-umask-permission-in-linux.html