티스토리 뷰

SetUID & SetGID, StickyBit 적용된 터미널화면

리눅스 시스템에서 하나의 파일 사용을 위해서는 파일 종류마다 접근 Permission 이 정해져 있다. 따라서 이런 파일 종류와 퍼미션을 나타내기 위해서 각 bit마다 순서와 의미가 있는 16bit 표현값을 사용하게 된다. 

여기서 앞부분 4bit 는 파일의 종류, 그 다음 3bit는 특수권한을 갖고, 나머지 9bit는 각각 주체별로 3bit씩 할당하여 user, group, others 권한을 갖게 되는 것은 이미 설명하였다. 이제 특수권한비트에 대해서 알아보도록 하자. 

 

[특수 권한 비트 SetUID & SetGID]

- 개요와 개념

 

참조) 잠시동안 내가 아닌 해당 파일 주인의 권한으로 프로세스 실행하기


SUID 는 Set UID의 약자로서 프로세스가 실행 중인 동안 일시적으로 해당 실행 파일의 소유자, 소유그룹의 권한으로써 자원에 접근할 수 있도록 하는 권한 설정이다.
즉, SUID가 설정된 프로그램을 실행시키면 프로세스로 동작하는 동안에 RUID는 실행시킨 사용자의 UID로 설정되고 EUID는 실행파일 소유자의 UID로 설정된다.
따라서 실행시킨 사용자(user)와는 무관하게 프로세스가 실행중인 동안에는 실행파일 소유자의 권한으로 자원에 접근하게 된다.

 

참조) ruid , euid
: real uid( real user id ) 는 실제 본인의 id 를 이야기한다. 이 녀석의 값은 변하지 않는다. ( root 는 바꿀 수 있다. )
: euid 는 현재 휘두를 수 있는 권한을 나타낸다. euid 는 기본적으로 ruid 와 같은 값이다.
  그러나 setuid bit 이 세팅된 프로그램을 수행시킬 때, 다른 값으로 할당될 수 있다.

   -rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd

passwd 파일( setuid bit 이 세팅되어 있음 )을 user2 라는 ruid 를 가진 user 가 실행시키면, 이 때 ruid 는 user2 이지만, euid 는 owner 인 root 가 된다.
이렇게 수행시킬 때 바뀌기 전 original 값을 SUID ( Saved euid ) 라고 하며, 수행이 끝나면 euid 를 이 값으로 되돌린다.

 

SGID 는 Set GID의 약자로서 위에서 SUID로 인해 RUID와 EUID가 해당 UID로 설정되는 것과 같이, SGID로 인해 RGID와 EGID가 해당 GID로 설정된다.
이러한 SGID가 설정되지 않은 프로세스를 실행시키면 RUID와 EUID, RGID와 EGID가 동일하게 설정된다.
즉, 프로세스를 실행시킨 사용자의 UID와 GID로 RUID, EUID와 RGID, EGID가 설정되어 해당 권한으로 자원에 접근하게 되는 것이다.

참조) rgid, egid
일반적으로 EUID=RUID, EGID=RGID 이다.
즉 어떤 사용자가 실행한 프로세스의 EUID는 사용자의 UID와 동일하다. 

EGID는 유효한 사용자 그룹 식별자를 의미하는 Effective GID의 약자로서 프로세스가 실행중인 동안에만 부여되는 GID이다. 
이것 역시 파일과 같은 자원 접근 권한을 판단하기 위한 ID로서 '파일 만들기 및 파일 액세스'에 영향을 준다. 

 

 

 


 

 

[특수 권한 비트 실행 권한]

설정된 특수권한 비트에 실행 권한이 없을 경우 소문자s, 소문자t 가 아닌 대문자 S 와 T로 표시되는 경우가 있다. 

 

예를 들어
root가 아닌 A라는 계정 일반 사용자가 아래 리눅스 명령으로써 패스워드를 변경한다고 생각해 보자.
  $ passwd
당연히 변경된 패스워드는 리눅스의 패스워드 파일인 /etc/shadow 에 저장 됨을 확인할 수 있다.

그렇지만 /etc/shadow 파일의 퍼미션은 다음과 같이 되어있다.
  -rw------- 1 root root 24736 Oct 23 17:54 /etc/shadow

현재 /etc/shadow 파일은 root는 읽고 쓰기, root그룹과 others 는 아무 권한이 없는 상태이다.

그런데 어떻게 A라는 계정 사용자가 명령을 내려서 /etc/shadow 파일이 갱신이 될 수 있을까?
바로 여기에 SetUID의 비밀이 숨어있다.

아래 명령을 내려보도록 하자.
 $ ls -al /bin/passwd
 -rws--x--x 1 root root 32888 Mar 11 2009 /bin/passwd

소유주의 실행 권한, 첫 번째 execute(x)가 있어야 될 자리에 소문자 s 가 보일 것이다.

바로 이게 SetUID 다. 
쉽게 설명하자면 시스템의 어떠한 계정이라도 /bin/passwd 파일을 실행하는 동안에는 소유주 즉 root의 권한을 갖는다는 것이다.
물론 실행이 종료되면 다시 A라는 계정의 권한으로 돌아온다.

SetGID 권한은 위와 동일하지만 일반적으로 디렉터리에 설정되고 소유그룹(group)의 권한을 갖는다는 차이만 있다. 
 -r-xr-sr-x 1 root mail /usr/bin/mail

소유그룹의 실행 권한, 두 번째 execute(x)가 있어야 될 자리에 s 가 보일 것이다.
하지만 역시 실행 권한이 없을 경우 대문자 S 로 표시된다.

 

 

 

 

 - 다음 "SUID SGID " - 

 

[CentOS7][초보][특수권한][소유자권한.그룹권한]

- UNIX 시스템은 파일에 대한 접근 권한 및 파일 종류를 나타내기 위해 16bit를 사용한다. - 각 3bit씩 총 9bit는 소유자 접근권한(user), 그룹 소유자 접근권한(group), 기타 사용자 접근권한(other)의 권한

modu4you.com