기본 허가권,퍼미션 지정(제어, 설정)하기(umask와 작동 원리)

by 조쉬 posted Jan 12, 2023
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

허가권 설정 확인하기

1. 파일 생성으로 기본 허가권 어떻게 설정되어있는지 확인해보자

먼저 파일을 생성한 후에 ls 명령어를 이용해서 새로 생성된 파일은 어떤 허가권을 갖는지 확인해볼까요?

ubuntu 홈 디렉터리에 new.txt(우분투 유저가 생성)와 roototxt.txt(root 유저가 만듬)을 생성해줬어요.

또 디렉터리 허가권도 설정하기 위해 디렉터리도 하나 생성해줬어요.

 

 

 

[빨간색 점으로 표시해놓은 라인이 생성된 파일과 디렉터리입니다]

보니까 파일을 생성한 자가 파일을 소유하고 있네요

 

1. roottxt.txt 파일

허가권 정보: (-rw-r--r--, 644

root 사용자가 생성할 경우, 본인 제외한 다른 사용자들은 읽는 권한(r)밖에 없어요 (관리자일 경우)

2. new.txt 파일

허가권 정보: (-rw-rw-r--, 664)

반면 사용자가 파일을 생성하면 자신과 그룹사용자는 읽고 수정할 수 있지만 다른 분들은 읽는거밖에 할 수 없다는게 default라는 것을 알 수 있습니다. (일반 사용자일 경우)

3. ubuntuDir 디렉터리

허가권 정보: (drwsrwsr-x, 775)

디렉터리의 경우 디렉터리임을 나타내는 d와 함께 소유자 및 소유자그룹은 rwx모든 권한을 갖고 있네요 

참고로 x실행 권한이 있어야 해당 디렉터리로 이동할 수 있습니다. (관리자가 디렉터리를 생성했던 일반 사용자가 생성했던 775를 기본으로 갖습니다)

 

umask가 필요한 이유?

하지만 위처럼 권한을 제한하기 보다 만드는 파일을 모두가 실행할 수 있게 하고 싶은데 이럴 경우 매번 생성하고 파일 권한을 또 따로 바꿔줘야 하니까 얼마나 번거롭겠어요. 안그래도 리눅스는 보안이 중요한데! 그 때 그 상황에 맞게 기본 설정을 세팅하는 게 좋겠죠 즉 매번 파일이나 디렉터리 설정해줄때마다 매번 번거롭게 허가권 지정하기 귀찮으니까 디폴트로 허가권 값을 정해놓고 싶다! --> umask 명령어로 지정할 수 있다. 

 

You can always chmod a file, but you won't have to do that very often if the files by default have the permissions you want.

chmod써서 변경할 수 있지만, 원하는 값으로 퍼미션 값을 설정해놓으면 매번 번거롭게 작업할 필요는 없겠죠 

 

2. umask 명령어로 기본 허가권 확인하기 

이를 위한 명령어가 umask입니다. umask는 기본 허가권이 어떻게 세팅되어있는지 확인할 수도 있고 지정할 수도 있습니다. 즉 파일 생성으로 기본허가권이 어떻게 세팅되는지 확인할 수도 있지만, umask라는 명령어로도 확인 가능하다는 것

 

umask 명령어

파일이나 디렉터리 생성 시 부여되는 기본 허가권을 지정하는 명령

$ umask [option] [값]

 

옵션 

 옵션

 내용 

 -S  

 umask 값을 문자로 표기한다. 

허가권을 설정할 수도 있지만 -S옵션을 통해 현재 기본 허가권 문자로 볼 수도 있어요.

umask를 썼더니 이상한 숫자값이 나오는데 이 숫자는 숫자모드로 기본허가권을 표시해준 것이랍니다.

자세한건 아래 'UMASK로 허가권 제어하기'의 문자모드와 숫자모드에서 설명하도록 할게요.

ubuntu@developer:~$ umask -S
u=rwx, g=rx, o=rx
ubuntu@developer:~$ umask
0022

 

UMASK로 허가권 제어하기

기본 허가권을 살펴봤으니 이제 허가권을 제어해볼게요 참고로 이렇게 umask 명령어를 이용해서 적용하는 방법은 휘발성 방식입니다. 재부팅하면 원래 값으로 돌아와요 (하지만 서버는 오래 켜놓는 경우가 많고 켜진 동안 파일 생성할 파일은 많죠)

 

umask를 설정하거나 값을 확인하는 방법은 두 가지 모드가 있습니다. 문자모드! 숫자모드!

문자모드

먼저 허가권에 관련된 명령어이니 만큼 chmod 포스팅에서 배웠던 +,-,= operation과 u,g,o,a 등 문자를 사용해서 umask를 설정할 수 있습니다. 의미와 사용 방법은 chmod 포스팅에서 설명했었어요. 저번 시간에 배웠던 표 복습차 다시 한 번 투척~! 

 

[operations] 

 +

  allow the specified file permissions to be enabled for the specified user classes 

 (permissions that are not specified are unchanged in the mask)

  플러스! 허가권을 추가하는 개념이예요. 기존 허가권에 더해지는 개념이기 때문에 

 지정해주지 않은 허가권은 기존꺼를 따라요

 -

 prohibit the specified file permissions from being enabled for the specified user classes

 (permissions that are not specified are unchanged in the mask)

 허가권 빼기! 추가 +와 반대 개념으로 기존 허가권에서 제외시켜줍니다.

 = 

 allow the specified file permissions to be enabled for the specified user classes

 (permissions not specified will be prohibited by the mask during file creation) 

 허가권을 지정해줍니다 그런데 이 =의 경우 +처럼 추가개념이 아니기 때문에 

 지정하지 않은 허가권은 불허, 즉 권한이 제외됩니다 (밑에 예시에 다시 한번 풀어서 언급해드려요)

[ugoa]

 u

 User (the owner of the file) 소유자 

 g

 group (any member of the file's defined group) 그룹 

 o 

 Other (anyone else) 소유자, 그룹 멤버를 제외한 다른 사람들 

 a  

 All (equivalent to ugo) ugo다 합친 전체  

 

예시로 아래 명령어를 살펴봅시다. 

1. umask u+w
2. umask u-x,g=r,o+w

1. umask u+w

파일이 새로 생성되면 소유자가 쓸 수 있는 허가권을 갖게 됩니다. (+이기 때문에 기존 허가권에 w(쓰기)권한을 추가한 것이므로 쓰기 권한만 갖는 것은 아니예요 더해지는 개념) umask u=w 해야지 소유자가 읽기, 실행 권한을 제외한 w권한만 갖게 되는 것입니다.

 

확인을 위해 umask u+w 명령어를 시행한 후 new2.txt를 생성하고 umask u=w 후 new3.txt를 생성해 비교해봤어요

 

 

new3.txt는 user 부문이 --w 권한을 갖는 반면 new2.txt는 기존 default인 new.txt와 똑같다는 것을 확인할 수 있습니다.

(원래 new.txt에 w권한이 있었으므로 u+w를 해서 w를 추가해도 똑같은거죠)

 

2. umask u-x,g=r,o+w

허가권에서 배웠던 것처럼 여러 변경을 컴마(,)를 이용해서 함께 설정할 수 있습니다.

 

숫자모드

숫자모드는 좀 달라요 

umask는 숫자모드에서 초기 설정 권한에서 삭제할 권한 부문을 지정해요. 즉 삭제!! 마이너스!! 제거!!! 특징을 같습니다.

 

★ umask 결과 : 최대권한(umask적용 안된 기본 권한)에서 각 파일의 권한을 뺀 값.

최대권한은 파일의 경우 0666, 디렉터리의 경우 0777입니다.

 

먼저 현재 ubuntu 사용자에서 umask만 써서 현재 설정을 확인해볼게요.  umask를 입력하면 0002라는 값이 나오는데요

1
2
ubuntu@sever:~$ umask
0002
cs

이 상태에서 ubuntu 계정으로 파일을 생성하면 0666-0002 = 0664 허가권의 파일이 생성되고

디렉터리를 생성하면 0777-0002=0775 허가권으로 생성됩니다. 

 

[root일때로 한 번 더 체크해보기]

root로 사용자를 바꾸고 umask를 입력했을 경우에는 0022가 나옵니다. 

(우리가 umask를 따로 지정해준적은 없지만 초기 리눅스는 umask값이 이와 같이 지정되어 있습니다.)

 

숫자가 r는 4, w는 2, x는 1을 의미한다고 했던거 기억하시나요? 

In Linux, the default permissions value is 666 for a regular file, and 777 for a directory

파일은 기본적으로 0666의 퍼미션을, 디렉터리는 0777의 퍼미션을 가져요  (umask가 0일 경우) 

 

 

우분투 계정으로 umask 0000 명령을 통해 umask에 설정되어 있던 값을 없애준 후 파일을 생성해주면 

um0.txt는 -rw-rw-rw-(666) 의 허가권을 갖는 것을 볼 수 있습니다. 

즉 666은 umask 권한 제거가 적용이 안된, 원래 최고 기본 파일 허가권인거죠.

root로 권한을 바꿔서 파일을 생성해줬지만 애초에 umask 0000명령어를 ubuntu 사용자가 쳤기 때문에 root 파일에는 적용되지 않고 644가 나온 것을 확인할 수 있어요

 

기본 허가권인 777, 666을 갖게 되면 소유주와 소유그룹, 다른 사람 모두가 파일에 접근해서 맘대로 수정해버리고 파일을 삭제해버리는 등 악용할 수 있다는 뜻이예요. 그래서 리눅스는 umask값을 022로 설정(root)해서 소유자를 제외한 다른 계정에서는 write기능을 이용해 맘대로 데이터를 바꿔버리거나 삭제하지 못하게 해놓은 겁니다. 왜 umask 값이 우리가 설정되지 않아도 적용돼 있는지 알겠죠?

 

즉~

리눅스가 설정해놓은 umask 값 0002(일반 사용자의 경우)나 0022가 의미하는 것은 ~ 

'파일의 기본 퍼미션인 0666에서 0002 권한을 제외시킨 0664 권한을 얘가 파일 생성했을 때 기본 허가권으로 정하겠다.' 입니다

즉 0666에서 2의 값을 갖는 w가 제외되어 0664 사용자 ubuntu가 파일을 생성했을 때 파일이 갖는 허가권이 되는거죠

그래서 허가권 설정하기  내용에서 빨간색 2번 줄을 보면 결과가 666-662= 664가 나온 것입니다.

 

 

 

← umask 값에 따른 기본 파일 허가권 값

 

 

umask 작동 원리

(논리회로 개념이 조금 들어갑니다)

technically, the mask is negated (its bitwise compliment is taken) and this value is then applied to the default permissions using a logical AND operation

우리가 파일을 생성할 때 갖는 허가권은 umask 값에 보수를 취한다음에 AND 연산을 해줌으로써 설정됩니다.

The result is that the umask tells the operating system which permission bits to "turn off" when it creates a file. 

이러한 방법으로 umask가 파일이 생성될 때 어떤 권한의 스위치를 끌지 (turn off) 정해주는거죠

 

즉 실제로 빼기를 수행하는 건 아니지만 실제 빼기 과정과 유사한 개념이기 때문에 그냥 이해하기 쉽게 빼기를 했다고 생각하는거예요.