정보보안공부
Linux_리눅스 setuid / setgid / stickybit 본문
리눅스 setuid / setgid / stickybit
- 오라클 가상 머신 사용
- CentOS6
<setuid / setgid / stickybit>
#1 setuid
- 사용자가 실행파일을 실행 시 소유자의 권한으로 실행하는 권한
# chmod u+s 파일이름
# chmod 4755 파일이름
*** 대표적인 setuid파일 /usr/bin/passwd
- 비밀변경을 할수있는 명령어가 passwd이므로 해당
-> setuid를 제거하고 실행하면 위와같이 오류가 발생한다.
-> 파일소유자가 root에 setuid가 되어있는 파일은 의심해야하지만 위처럼 setuid가 없다면 반드시 필요한 동작이 안되는 경우가 발생한다.
*** 악의적인 setuid 예
-> setuid가 설정되어있다면 root만 접근가능한 /etc/shadow파일에도 일반사용자들이 접근할 수 있다. ( /etc/shadow 파일 소유자가 root 이기 때문에 )
-> tail명령어는 일반사용자도 사용가능하지만 root만이 접근가능한 /etc/shadow파일을 일반사용자가 tail명령어로 볼수 있다는 것은 보안상 매우 취약한 것이다.
-> tail명령어인 tail실행파일의 파일소유자가 root이기때문에 setuid를 설정한다면 tail명령어 사용시 일반사용자들도 root의 권한으로 root만이 접근가능한 파일에 접근할 수 있는 것이다.
==> 수상한 파일(실행파일)에 setuid가 되어있다면 꼭 필요한 설정인지 확인해야한다.
*** setuid 설정방법
-> s와 S의 차이는 s는 setuid와 실행권한이 둘다 있는것이고 S는 setuid만 있고 실행권한은 없는것을 의미한다.
-> 대부분 setuid는 실행권한과 함께있으므로 이런것도 있다는 것만 알아두자
*** 백도어 프로그램
- 일반사용자가 실행파일을 실행시 소유자의 권한(root의 권한)으로 root와 동일한 권한을 획득하여 악의적으로 사용가능
- /tmp디렉토리는 공유디렉토리이므로 /tmp안에서 테스트한다.
-> 파일 실행시 root권한으로 bash 쉘을 실행할 수 있는 악의적인 프로그램 작성
-> setuid(0)은 userid를 0으로 만드는데 root의 권한으로 실행해야 동작되는 코드이다. ( 파일소유자가 root라면 동작된다. )
-> userid가 0이라는것은 root를 의미한다.
-> system명령어를 통해 bash쉘을 사용한다.
-> gcc를 이용해 컴파일을 할 수 있다.
-> chmod u+s로 setuid설정을 했을 때와 설정을 안 했을 때의 차이를 구분해야한다. setuid설정을 안했다면 test1(일반사용자)로 파일을 실행시 코드안에 setuid(0)이 동작하지않고 system("/bin/bash")만 동작하여 bash쉘만 실행된다. 하지만 setuid 설정을 한뒤 test1(일반사용자)로 파일을 실행한다면 backdoor파일의 소유자는 root이므로 root의 권한으로 setuid(0)이 동작되어 root권한을 갖는 bash쉘이 실행된다.
-> setuid는 파일의 소유자의 권한으로 실행되기 때문에 파일의 소유자가 root라면 주의깊게 살펴봐야 할 필요가 있다.
==> 백도어 프로그램도 파일소유자가 root여야 동작된다 따라서 파일 소유자가 root라면 의심할 필요는 있다는 것이다.
#2 setgid
- 사용자가 실행파일을 실행 시 그룹의 권한으로 실행하는 권한
# chmod g+s 파일이름
# chmod 2755 파일이름
*** setgid 설정방법
-> s와 S의 차이는 s는 setgid와 실행권한이 둘다 있는것이고 S는 setgid만 있고 실행권한은 없는것을 의미한다.
-> 대부분 setgid는 실행권한과 함께있으므로 이런것도 있다는 것만 알아두자
#3 stickybit
- 디렉토리에 stickbit가 설정되어 있으면 공유 디렉토리로 사용한다.
- 파일의 소유자와 root만 해당파일을 지우거나 파일명을 변경할 수 있다
# chmod o+t 파일이름
# chmod 1777파일이름
*** 대표적인 stickybit 디렉토리 : /tmp
-> 일반적으로 공유 디렉토리는 모든사용자가 이용할 수 있도록 rwxrwxrwx권한을 사용한다.
-> 하지만 사용시 user1 사용자의 파일을 user2 사용자가 마음대로 지우거나 변경한다면 큰 문제가 발생한다.
-> 따라서 stickybit를 이용해 모든 사용자들이 자유롭게 파일/디렉토리를 생성할 수 있지만 해당파일 삭제시 해당사용자와 root만 변경 또는 삭제하도록 하는 설정 사항이다.
*** stickybit 설정법
-> chmod o+t 파일명 또는 chmod 1755 파일명을 이용한다.
*** 파일삭제
- stickybit가 없는 경우
-> test1 사용자가 만든파일을 test2 사용자가 지울 수 있다. 공유 디렉토리지만 남의 파일을 삭제하면 해당 파일을 만든 사용자는 정작 사용할 수 없기 때문에 매우 문제가 된다.
- stickybit가 있는경우
-> /tmp/test1.txt의 소유자는 user1 이므로 user1과 root만 파일을 삭제할 수 있다.
-> test2 사용자는 해당 /tmp/test_stickybit.txt 파일에 대해 파일삭제를 할 수 없다.
*** 파일이름변경
- stickybit가 없는 경우
-> test1 사용자가 만든파일의 이름을 test2 사용자가 변경할 수 있다. 공유 디렉토리지만남의 파일의 이름을 변경하면 해당 파일을 만든 사용자는 변경된줄 알 수 없기 때문에 매우 문제가 된다.
- stickybit가 있는경우
-> /tmp/test1.txt의 소유자는 user1 이므로 user1과 root만 파일의 이름을 변경할 수 있다.
-> user2 사용자는 해당 /tmp/test1.txt 파일에 대해 파일의 이름변경을 허용하지 않는다.
'Linux' 카테고리의 다른 글
Linux_리눅스 vi / vim 간단한 사용 (0) | 2018.07.05 |
---|---|
Linux_리눅스 파이프 / 리다이렉션 (0) | 2018.07.05 |
Linux_리눅스 퍼미션 / chmod / chown / chgrp (0) | 2018.07.05 |
Linux_리눅스 명령어 find / grep (0) | 2018.07.05 |
Linux_리눅스 심볼릭링크 / 하드링크 (1) | 2018.07.05 |