chmod, umask 차이 / 개념정리
root계정만 쓰다 보니 chmod 와 umask의 개념이 비슷해져버려서 혼란이 왔었다. 나는 똥멍청이다.
개념을 다시 정리해보자.
- chmod
파일, 디렉터리등의 권한을 변경하는데 사용한다. 권한을 부여할수도, 뺏을 수도 있다.
-주로 permission deny 된 몇개의 파일 권한을 추가할 때 사용
- umask
생성될 파일, 디렉터리의 기본(default) 권한 값을 설정하는 데 사용.
-umask 사용시 앞으로 생성될 모든 파일의 기본 권한값이 바뀌게 된다.
-생성된 파일 뿐만 아니라 touch로 수정시간이 변경된 파일도 권한이 변경된다.
umask에 의해 생성되는 권한은 "최대 권한-umask" 값이다.
디렉터리의 최대 권한은 777, 파일의 최대 권한은 666이다.
여기서 umask 값을 뺀 값이 파일,디렉터리를 생성할 때 자동으로 부여되는 default 권한 값이다.
777-022 -> 기본 디렉터리 권한 = 755
666-022 -> 기본 파일 권한 = 644
umask 값 | 000 | 022 |
생성되는 파일 권한 | 666 | 644 |
생성되는 디렉터리 권한 | 777 | 755 |
-> 헷갈렸던 부분 : umask는 chmod와 반대로 권한을 박탈하는 명령어. 그러나 반대의 개념은 아님을 명심하자.
chmod 022는 일부 파일의 읽기 권한을 부여/수정하는 명령어지만, umask 022라면 모든 파일의 읽기 권한을 뺏는 명령어이다.
[시나리오]
1. umask 022 설정
2. 파일 생성시 umask 022에 의해 666-022로 생성된 파일 권한은 644
3. 사용자가 해당 파일을 수정하고 싶음
4. chmod g+w, o+w (022를 추가)또는 chmod 666(644에서 022가 추가 된)를 해주면 됨.
r | w | x |
u - user | g - group | o - other |
4 | 2 | 1 |
전체 시스템에 영향을 미치기 위해서는 /etc/profile 파일에 umask 값을 수정해줘야 한다.
49라인쯤에 umask 가 있을 것이다. 그 값을 수정해주면 된다.
현재 접속되어 있는 쉘에 대해서만 일회성으로 바꾸려면 현재 터미널에
umask ***을 써주면 된다.
+ 사실 umask는 저렇게 최대권한에서 뺴도 되긴 하는데 이건 야매..방법이고
정석적으로는 비트로 바꿔서 and 연산해서 푼다.
xor로 하는 방법도 있는데 파일만 and 로 예시 하나만 들겠다.
-파일 r w x
UMASK 값(022) 2진수 -> 000 010 010
UMASK 2진수의 보수 -> 111 101 101
파일의 기본 허가권(666) 2진수->110 110 110
UMASK 보수 AND 파일 최대 허가권한 => 파일 허가권한
111 101 101
110 110 110 AND 연산
------------------------------
= 110 100 100 => 644 (rwx r-- r--)