본문 바로가기
LINUX 운영체제 보안

리눅스 - SetUID, SetGID,Sticky Bit

by 웹하는빡통 2019. 10. 21.

setuid,setgid,stickbit 설명을 하기 전 접근권한 구조에 대해서 간단하게 설명 하겠다. 

접근권한은 8진수 또는 r(읽기권한,4), w(쓰기권한,2),x(실행권한,1) 문자로 표현이 가능하다.

8진수로 표현할때 권한의 합으로 표시하게 되는데 ex)755(rwxrxrx)
3자리(3bit)로 소유자, 그룹 소유자, 기타 사용자를 설정 할 수 있다. 

그림과 같이 0755에서 0이 특수권한을 의미하는 부분이다. 여기에 setuid,setgid,sticky bit를 설정 할 수 있다.

 

 

1. sticky bit 란?

유닉스 운영체제는 기본적으로 파일의 소유자가 아니면 해당 디렉토리 내의 파일을 지우거나 수정하지 못하도록 기본적인 umask를 설정한다. 하지만 모든 사용자 계정이 파일을 만들고 수정, 삭제할 수 있는 디렉토리가 있다. 바로 /tmp와 /var/tmp다.두개의 디렉토리는 퍼미션이 기본적으로 777로 설정되어 있어 누구나 임의의 파일을 생성하고 수정하고 삭제할 수 있는 공용 디렉토리이다.

 

sticky bit는 8진수(1rwx)나 기호(o+t/u+t)를 이용하여 비트를 설정 할 수 있는데
스티키 비트 제거를 할때는 "-"기호를 이용 한다. "ex)(o-t/u-t)"  


리눅스의 경우 o+t, 유닉스(솔라리스)의 경우 u+t로 설정 한다.
권한 변경을 할때는 chmod를 이용하면 된다.
sticky bit가 설정 되어 있으면 기타 사용자 접근권한에 소문자 t는 실행권한이 있는거고 대문자 T는 실행권한을 가지고 있지 않는 의미이다.

 

그래서 등장한 것이 sticky bit 다. 이 두개의 디렉토리에 퍼미션이 777 퍼미션을 갖는 파일들과 디렉토리들이 생겨난다 하지만 이 파일들이 필/불필요한 파일인지 알 수 없다보니 다른 사용자들이 퍼미션 설정이 777이된 파일에 접근 할 수가 있다는 거다. 만약 그 파일 중 현재 사용중인 파일이라면 문제가 생길 것이다 그래서 사용하는 것이 sticky bit 다. 

 

sticky bit가 설정된 디렉토리

1. 퍼미션이 777인 파일에 대해서 파일의 소유자만이 삭제를 할 수 있다. (수정이나 실행, 읽기는 모두 허용된다.)


2. sticky bit가 설정된 디렉토리 자체도 소유자만이 접근 할 수 있음.

3. root 최고 권한이므로 어떤 곳에서도 접근이 가능함.


결론은 퍼미션이 아무리 777이여도 파일을 만든 계정과 root에서만 삭제할 수 있다. 

 

chmod 1755로 sticky bit를 설정한다. 앞에 1은 sticky bit의 특수권한을 의미하고 절대모드로는 1000을 쓴다.

 

그 결과 기타 사용자 접근 권한에 -t라는 sticky bit가 설정이 된 것을 알 수 있다.

2. setuid

사용자(실제 실행 중인 사용자)에서 root소유자 권한으로 실행하는 권한
ex) chmod u+s 파일이름
     chmod 4755 파일이름 
-setuid 비트:8진수 4000

대표적 setuid 파일 /usr/bin/passwd

지금 부터 setuid를 간단하게 설정해보도록 하겠다.

test1, test2 파일 권한을 확인해본 결과 -rw-r--r--이라는 것을 알 수 있다. 이제 여기에 setgid설정을 해보자.

 

설정 결과 소유자 권한에 s가 생긴 것을 알 수 있다. 

"-"를 이용하여 setuid 설정을 해제 해보자 그 결과 원래 초기 퍼미션 설정으로 돌아간 것을 알 수 있다.

이젠 8진수로 설정을 해보자. 전 사진과 똑같이 소유자권한에 s가 생긴 것을 알 수 있다.

3.setgid

사용자가 실행파일을 실행 시 그룹의 권한으로 실행하는 권한

chmod g+s 파일이름
chmod 2755 파일이름

-setgid 비트:8진수 2000 

 

`

댓글