본문 바로가기

Basic Theory/Linux

setUID란?

Set이란 말은 '변경하다'란 뜻을 가지고 있고, UID는 여러분도 아시다시피 User ID의 약자이다. 따라서 SetUID는 'ID를 변경한다.'라고 해석된다.


설명하자면 SetUID는 일시적으로 자신의 ID를 변경하는 것을 말한다.


그럼 왜 일시적으로 자신의 아이디를 변경할까? 

예) linux에서 개인계정 비밀번호호 변경시 /etc/shadow 도 변경이 된다. 이 때 passwd 명령어를 실행하는 동안에 '루트로의 일시적인 아이디 변경'이 되는 것이다. 결국 shadow 파일은 사용자의 권한이 아닌 root 권한으로 변경이 된 셈이다.


정리하자면

1. SetUID는 파일에 걸린다!

2. SetUID가 걸린 파일을 실행하면 나의 아이디가 변경된다.

3. 파일의 실행이 끝나면 다시 원래의 아이디로 돌아온다.


[guest@jack2 practice]$ ls -al /usr/bin/passwd

-r-s--x--x    1 root     root        16336  2월 14  2003 /usr/bin/passwd


그 동안 알고 있던 d, r, w, x 이 네가지 이외 s 를 확인할 수 있다.

바로 이 s가 SetUID를 의미한다. 이 부분은 x(실행권한)이 있어야 할 부분인데 s가 들어가 있다. 그것은 바로 s가 x를 포함하고 있기 때문이다.


따라서 위의 파일을 분석하면 다음과 같다.


/usr/bin/passwd 파일은 root에게 읽기와 실행(s가 x를 포함하기때문)이 있고, root라는 그룹에게는 실행 권한만 있고, 위를 제외한 사용자들에게도 실행 권한만 있다.


하지만 root에게 SetUID가 걸려있기 때문에 어느 사용자라도 저 파일을 실행할 때는 root의 권한을 갖게 된다.


그렇다면 서버 전체에서 SetUID가 걸린 파일은 어떻게 찾을 수 있을까?

[guest@jack2 practice]$ find / -perm -4000


이 명령어를 이용해서 찾을 수 있다.

" / 에서 부터, 적어도 SetUID가 걸린 모든 파일을 찾아라"

위에서 4000 앞에 붙은 -가 바로 '적어도'를 의미하며, -perm 은 '권한을 찾겠다' 라는 옵션이다. 그 뒤의 '4' 자가 바로 SetUID를 의미하며, '000'은 rwx 모두를 의미한다.

(*참고* : find 는 -perm 옵션 외에 -name(이름), -user(유저), -group(그룹) 옵션이 있다.)


이 옵션들을 서로 조합하여 동시에 사용하면 

[guest@jack2 practice]$ find / -user root -perm -4000

=> root 권한으로 SetUID가 걸린 파일을 찾아라


[출처] ftz.hackerschool.org - trainer10


그 외 참고 자료   

SU 리눅스포털 - 파일(디렉토리의) 소유권과 퍼미션, 속성, SetUID PDF 자료