반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

hann-blume

Linux - 특수권한 (SetUID, SetGID, StickyBit) 본문

Linux

Linux - 특수권한 (SetUID, SetGID, StickyBit)

hann-blume 2020. 2. 25. 16:13

 

 

 

리눅스에는 흔히 우리가 아는 퍼미션(허가권)외에

'특수 권한' 이 존재한다.

 

일반적인 권한은 rwxrwxrwx의 형태이다.

 

아래 설명에서는 시각적으로 도움을 주기위해 

rwxrwxrwx 처럼 붙여 쓰지않고 세자리씩 

rwx rwx rwx 처럼

띄어서 작성했다.

 

TYPE OWNER 소유자-user GROUP 그룹 OTHER 제3자
d , -
디렉터리, 파일
r     w     x r     w     x r     w     x
4     2     1 4     2     1 4     2     1

 

특수 권한은 

SetUID, SetGID, StickyBit

이렇게 세 가지의 종류가 있다.

 

먼저 SetUID

SetUID는 rwx rwx rwx가 아닌

rws rwx rwx

의 형태이다.

세 번의 rwx중 첫 번째 rwx의 x가  s로 표기된다.

퍼미션값도 4XXX의 형태가된다.

ex) 4777

 

 

SetGID

SetGID는

rwx rws rwx

세번의 rwx중 두 번째  rwx의 x가  s로 표기된다.

퍼미션값은 2XXX의 형태가된다.

ex) 2777

 

 

StickyBit

SetUID와 SetGID는 x의 자리가 s로 바뀌지만

StickyBit는 t로 바뀐다

rwx rwx rwt

바뀌는 위치 또한

세번의 rwx중 마지막 세 번째  rwx의 x가  t로 표기된다.

퍼미션값은 1XXX의 형태가된다.

 

 

특수권한 별로 기능은 다음과 같다

특수권한 기능
SetUID / SetGID

이 두 특수권한은 퍼미션값 s의 위치가 OWNER와 GROUP으로 서로 다르지만 기능은 같다.

실행파일을 사용자가 사용할 경우 권한이 없을 수 있다.

이 때 실행파일에 SetUID / SetGID 값이 있으면 실행하는

동안만 파일 소유자의 권한을 빌려준다.

StickyBit

StickyBit는 공유 디렉터리로 사용하기 위한 특수권한이다.

단 해당 공유 디렉터리의 변경 및 삭제는

'소유자' 만 가능하다.

 

 

아래의 표를 보자

/usr/bin/passwd passwd 실행 비밀번호 변경 root : root
4755 O O rws r-x r-x
755 O X rwx r-x r-x
4750 X X rws r-x ---
777 O O rwx rwx rwx

SetUID 와 SetGID는 위에서 명시한 것과 같이 기능이 같기 때문에 위 표에서는

SetUID만 예로 사용했다. 4가지 예시 모두 소유권은 root : root 이다.

 

지금부터 집중해서 천천히 읽어보길 권한다.

 

먼저 표의 첫번째, 4755를 보자.

SetUID를 가진 755이다. 

바로아래는 SetUID가 없는 일반 755권한이다.

 

우리는 비밀번호를 변경하는 명령어로 passwd라는 명령어를 이용한다.

하지만 이 명령어는 /usr/bin이라는 디렉터리안에 있는 명령어이고

이 명령어는 root권한을 가진 관리자만 이용할 수 있는 명령어이다.

즉, 관리자가 아니면 passwd라는 명령어를 이용할 수 없다.

 

또한 모든 명령어는 실행파일이기 때문에 x권한이 있다면 실행시킬 수 있다.

이 점은 4755 와 755 모두 x권한이 있기에 실행시킬 권한 자체는 있는 셈이다.

 

여기서 /usr/bin/passwd의 권한이 4755로 SetUID(또는 SetGID)를 가진다면

root가 아닌 제3자(일반 사용자) 또한 passwd라는 명령어를 이용할 수 있게 된다.

 

하지만 /usr/bin/passwd의 권한이 SetUID가 없는 755라면

제3자는 passwd라는 명령어를 x권한이 있기때문에 실행은 시킬 수 있지만

비밀번호 변경은 시킬 수 없다.

 

 

이제 4750을 보자.

제3자(일반 사용자)는 권한이 0으로 그 어떤 권한도 없다.

따라서 특수권한 SetUID가 있더라도 x권한이 없기 때문에

passwd 명령어의 실행도, 비밀번호 변경도 할 수 없다.

 

 

777

777은 SetUID가 없지만 제3자(other) 또한 7로 모든 권한을

갖기 때문에 passwd의 명령을 실행시키고 비밀번호 변경을 할 수있다.

 

 

여기서 알 수 있는 사실은

분명히 root권한만 사용할 수 있는 것에 (또는 소유자만 사용할 수 있는 것에)

SetUID(SetGID) 라는 특수권한을 주게되면

x권한만 있다면 누구나 사용하고 이용할 수 있게 된다는 것이고,

특수권한이 없더라도 모든권한(7)이 주어지면

마찬가지로 누구나 사용하고 이용할 수 있다는 것이다.

 

즉, 특수권한은 시스템의 보안성을 떨어지게 한다.

따라서 특수권한은 잘 사용하지 않기도 한다.

그리고 제3자(other)에게 7권한을 주는 일은

정말 특별한 필요한 상황이 아니라면

절대 없어야 한다. 

 

 

 

여기까지 리눅스의 특수권한에 대한 설명이 끝났다.

반응형

'Linux' 카테고리의 다른 글

Linux - RPM(Redhat Package Management)  (0) 2020.02.25
Linux - Umask  (0) 2020.02.25
Linux - 데이터 압축 유틸리티  (0) 2020.02.23
Linux - 계정 복구  (0) 2020.02.23
Linux - 허가권/소유권  (0) 2020.02.23