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
'LINUX 운영체제 보안' 카테고리의 다른 글
파일암호화 - 비대칭키 암호화 생성 방법 (0) | 2019.10.28 |
---|---|
CentOS ACL(접근제어목록) 설정하기 (0) | 2019.10.28 |
CentOS - find 명령어 사용하기 (0) | 2019.10.21 |
CentOS su, su - (1) | 2019.10.07 |
CentOS sudo 명령어 (0) | 2019.10.07 |
댓글