/
Linux 의 특수 권한 - SetUid, SetGid, Sticky Bit

Linux 의 특수 권한 - SetUid, SetGid, Sticky Bit


setuid 와 setgid 란?

유닉스나 리눅스 에는 setgid(Set User Id), setuid(Set Group Id) bit 라는 특별한 속성이 있습니다.

이 비트가 붙은 파일이나 디렉터리를 볼 경우 s 로 표시됩니다.

아래는 ls -l /usr/bin/passwd 를 실행한 예제입니다.

파일의 사용자 퍼미션 부분의 's' 표시는 setuid 비트이며 그룹 퍼미션 부분의 's' 표시는 setgid 비트로 /usr/bin/passwd 는 setuid 비트가 설정되어 있고 소유자가 root 인 것을 알수 있습니다.


setuid 가 붙은 프로그램은 실행시 소유자의 권한으로 전환되며 setgid 가 붙은 프로그램은 실행시 소유 그룹의 권한으로 전환됩니다.


setuid setgid 가 필요한 이유는 일반 사용자가 변경할 수 없는 파일이지만 변경이 필요한 경우가 있어서 입니다.


예로 사용자의 암호를 담고있는 /etc/shadow 파일은 root 만 읽을수 있고 수정은 불가하지만  사용자가 암호를 변경할 경우 /etc/shadow 파일이 변경되어야 합니다.


그래서 암호를 변경하는 /usr/bin/passwd 는 setuid 비트가 붙어 있으며 이 비트가 있으면 실행시 파일의 소유자 권한으로 전환되므로 root 권한을 갖게 되어 /etc/shadow 파일에 변경된 암호를 기록할 수 있게 됩니다.


파일에 setuid 비트를 붙이려면 root 권한으로 다음과 같이 맨 앞에 4 를 붙여서 지정하면 됩니다. 

chmod 4755 setuid-prog


마찬가지로 파일에 setgid 비트는 root 권한으로 다음과 같이 맨 앞에 2 를 붙여서 지정합니다.

chmod 2755 setgid-prog

setuid, setgid 비트는 보안에 큰 위협이 되며 이때문에 SELinux 같은 강제 접근 통제(MAC; Mandatory Access Control) 가 필요합니다.

setuid, setgid 가 붙은 프로그램은 다음 find 명령어로 찾을 수 있습니다.

find /bin /usr/bin /sbin -perm -4000 -o -perm -2000 |xargs ls -l


sticky bit

스티키 비트(1000)가 설정된 디렉터리는 누구나 파일을 만들수 있지만 자신의 소유가 아닌 파일은 삭제할 수 없습니다. 즉 일종의 공유 디렉터리라고 볼수 있는데 sticky bit 가 붙은 가장 유명한 사례는 유닉스의 임시 파일을 쓰는 디렉터리인 /tmp 입니다.

디렉터리에 스티키 비트를 붙일 때 누구나 읽고, 쓰고, 실행할 수 있도록 777 권한을 줘야 하며 다음은 /opt/mytmp 에 스티키 비트를 부여하는 예제입니다.

chmod -R 1777 /opt/mytmp


파일이나 디렉터리의 자세한 정보를 보는 명령어인 stat 를 사용해서 stat /tmp 를 실행하면 Access 부분이 1777 이 지정된 것을 확인할 수 있습니다. 

$ stat /tmp/

  File: /tmp/
  Size: 129             Blocks: 0          IO Block: 4096   directory
Device: ca02h/51714d    Inode: 8409696     Links: 5
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:tmp_t:s0
Access: 2019-10-29 16:34:47.112000000 +0000
Modify: 2020-08-09 13:57:39.442115154 +0000
Change: 2020-08-09 13:57:39.442115154 +0000
 Birth: -

같이 보기



Related content

chmod, setfacl 실행시 "Operation not permitted" 에러 발생
chmod, setfacl 실행시 "Operation not permitted" 에러 발생
More like this
세밀한 접근 권한 사용
세밀한 접근 권한 사용
More like this
리눅스 블록 디바이스의 uuid 를 출력하는 blkid 명령어 사용법
리눅스 블록 디바이스의 uuid 를 출력하는 blkid 명령어 사용법
More like this
파일 유형(file type)을 알려주는 linux file 명령어 사용법
파일 유형(file type)을 알려주는 linux file 명령어 사용법
More like this
표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR)란
표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR)란
More like this
puttygen 설치 및 OpenSSH 개인키를 RSA 개인키로 변환
puttygen 설치 및 OpenSSH 개인키를 RSA 개인키로 변환
More like this