hann-blume
Linux - 특수권한 (SetUID, SetGID, StickyBit) 본문
리눅스에는 흔히 우리가 아는 퍼미션(허가권)외에
'특수 권한' 이 존재한다.
일반적인 권한은 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 |