티스토리 뷰

16bit로 표현된 파일 접근 권한 및 파일 종류

- UNIX 시스템은 파일에 대한 접근 권한 및 파일 종류를 나타내기 위해 16bit를 사용한다. 
- 각 3bit씩 총 9bit는 소유자 접근권한(user), 그룹 소유자 접근권한(group), 기타 사용자 접근권한(other)의 권한을 기술하는데 사용한다. 
- 4bit는 파일의 종류 표현에 사용하고, 
- 3bit는 특수권한에 사용. 즉 특수권한 3bit는 각각 421인데, 이것은 아래와 같다. 
  > 절대 표기값 : SUID = 4000 / SGID = 2000 / Sticky Bit = 1000

 

[리눅스 SUID, SGID, Sticky-bit]

- 개념

 : SUID(Set User ID) : 프로그램을 실행할 때 해당 프로그램에 설정되어있는 소유자의 권한으로 실행한다.
 : SGID(Set Group ID) : 프로그램을 실행할 때 해당 프로그램에 설정 되어있는 그룹의 권한으로 실행한다.
 : Sticky Bit : 모든 사용자들에게 디렉토리의 접근과 해당 디렉토리 내에 있는 모든 파일에 대한 읽기(R), 쓰기(W) 권한은 허용하지만 삭제는 해당 파일의 소유자나 절대 권한을 가지고 있는 Root 계정만 할 수 있도록 지정한다. 

suid, sgid와 sticky bit는 위 퍼미션 외에 추가된 퍼미션으로 실행 및 삭제 권한을 보완한다.
suid, sgid는 실행 파일에만 적용된다. 파일이 실행된 프로세스는 실행한 사용자 소유로 실행 권한이 부여되지만 suid, sgid를 설정한 파일의 프로세스는 소유자나 그룹 소유자의 ID로 실행된다. 실행 권한에 s로 명시된다.
  예) passwd: 이 명령은 /etc/passwd, /etc/shadow와 같은 root 소유자 파일을 변경함으로 실행 시 파일 소유자인 root의 권한으로 실행된다.
  suid: 4000, u+s
  sgid: 2000, g+s

 

- Setuid

  • 실행 시 그 파일의 소유자 권한을 획득하여 실행됨. 동일한 권한으로 실행
  • SetUID(s)란, 말 그대로 파일을 실행할 때 Set(적용해라) UID(파일의 소유자로)입니다.
  • 다시말해, SetUID가 적용된 파일을 실행하면, 실행 파일이 끝날 때까지 파일의 소유자의 UID가 되는 겁니다. 
  • 그럼 왜 "소유자 자체"가 아니라 "소유자 UID"로 바뀌는 것일까요? "UID"란 계정을 가리키는 "유일한 숫자"여서 "UID를 쓴다"는 것은, "UID가 가리키는 계정을 사용하는 것"과 마찬가지이기 때문입니다.
  • 이것이 얼마나 대단하고 위험 한 것이냐면 SetUID가 설정돼 있는 "root"의 파일을 실행하면 실행이 끝날 때까지 실행하는 사람의 UID가 root의 UID "0"이 되어  root의 권한을 갖는 겁니다.
     > 예)   -r-sr-xr-x root sys /etc/chk/passwd
     > 설명) /etc/chk/passwd 파일은 Owner의 실행권한이 s이므로 setuid 설정이 되어 있다. 따라서, 일반 사용자 계정으로 해당 파일을 실행하더라도 해당 파일의 소유자인 root의 권한으로 실행된다.

 

 

 

- Setgid

  • 실행 시 그 파일의 소유그룹 권한을 획득하여 실행됨. 
  • SetGID(s)란, 파일을 실행할 때 Set(적용해라) GID(파일의 그룹으로)입니다.
  • "SetGID"가 설정된 파일을 실행하면, 실행이 끝날 때까지 자신의 GID가 파일 그룹의 GID로  바뀌는 거죠.
     > 예)  -r-xr-sr-x root mail /etc/chk/mail
     > 설명) /etc/chk/passwd 파일은 Group의 실행권한이 s이므로 setgid 설정이 되어 있다. 따라서, 일반 사용자 계정으로 해당 파일을 실행하더라도 해당 파일의 소유그룹인 mail의 권한으로 실행된다.

 

참조)
만약 root 소유의 자원에 대하여 일반 사용자의 직접 접근을 차단하면서 기능상 필요한 부분만을 접근하도록 허용할 필요가 있는 경우 별도의 root 소유 프로그램을 통해  SUID, SGID를 설정하여 사용하는 것이 보안적인 측면과 운영적인 측면에서 매우 효율적이다.

다만 root 권한이 필요 없는 프로그램에 소유주가 root로 되어 있으면서 setuid가 설정된 경우는 보안상 매우 취약하다. 이런 이유로 관리자는 SUID, SGID가 설정된 프로그램을 주기적으로 확인할 필요가 있다.

대표적인 예로
일반 사용자가 패스워드 변경을 위해 사용하는 명령어가 있다.
 $ passwd

이 passwd 명령어는 /usr/bin/passwd에 위치하는 root 소유의 실행파일이다.
이 파일은 SUID, SGID가 설정되어 있기 때문에 root만이 접근 가능한 /etc/shadow 파일에 접근하여 패스워드를 변경할 수 있다.
이렇듯 SetUID, SetGID권한은 일반 사용자가 특정사용자나 그룹의 권한을 갖을 수 있으므로 잘못 설정할 경우에는 아주 위험한 경우들이 생겨나므로 조심해야 된다.

보통 해킹당한 시스템에서 root권한으로 실행되는 백도어등을 많이 심어두고 언제라도 그 파일을 실행해서 root권한을 획득하는 경우가 많다.
그래서 root 비번을 변경하더라도 계속 크래킹이 이뤄지는 것이다.

root 소유의 SUID, SGID 실행파일을 주기적으로 검사하기 위해서는 find 명령어의 -perm 옵션을 이용하는 것이 유용하다.
해당 내용은 다음 다음 챕터에서 다루고자 한다.

 

 

 

 - 다음 "SUID SGID Sticky-bit 2" - 

 

[CentOS7][초보][특수권한][Sticky bit]

Sticky bit [스티키 비트(1000)]가 설정된 디렉터리는 누구나 파일을 만들 수 있지만 자신의 소유가 아닌 파일은 삭제할 수 없다. 즉 일종의 공유 디렉터리라고 볼 수 있는데 sticky bit 가 붙은 가장 유

modu4you.com