공대생의 에러일기

chmod, umask 차이 / 개념정리 본문

리눅스

chmod, umask 차이 / 개념정리

냥늉냥 2022. 11. 1. 23:53
반응형

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--)

Comments