특수 권한 [SETUID, SETGID, STICKY BIT]

2022. 5. 12. 19:21Programing Language/Linux

  • SETUID
  • SETGID
  • STICKY BIT

리눅스 특수권한은 3가지가 있다. 3가지 특수권한 모두 파일 실행에 관련된 기능[x, excute]으로 사용된다. 

실행권한 자리 x대신에 SETUID->s[USER 권한], SETGID->s[GROUP 권한], STICKYBIT->t[OTHER 권한]가 들어간다.

x 권한이 없는 경우에는 대문자 기호가 들어간다.

 

기존권한인 read[r], write[w], execute[x] 가 4, 2, 1 인 것과 같이 특수권한 역시 SETUID[s] -> 4, SETGID[s] -> 2, STICKY BIT[t] -> 1 의 값을 가진다.

특수권한을 부여하는 방법으로는 문자형태, 숫자형태로 구분이 된다.

두 방법 모두 chmod라는 명령해서 접근을 해야된다.

문자명령형식은 chmod g/u/o["+" or "-" or "="]s/s/t [파일]

숫자명령형식은 chmod[권한번호][파일] 로 명령을 하면된다.

숫자형태인 경우 SETUID를 주고 싶다면 기존 파일이 644로 권한설정된 파일에 chmod 4644[파일] 형태로 부여하면 되고 SETGID인 경우 chmod 2644[파일], STICKY BIT인 경우 chmod 1644[파일] 로 부여하면 되고 3개 모두 포함해서 주고 싶다면 chmod 7644[파일] 형태로 주면 된다.

 

○ SETUID

파일을 실행하고 종료될때까지 파일의 소유자의 UID를 얻는다.

즉 일시적으로 파일 소유자의 권한을 얻어 실행이 가능하도록한다.

현재 SETUID 권한으로 설정되어있는 파일들이다.

여기서 SETUID가 적용되어 있는 대표적인 파일은 /usr/bin/passwd 파일인데 계정의 비밀번호를 바꿀 수 있도록 해주고 /etc/passwd로 접근하여 변경한다. root만 변경이 가능하기 때문에 일반 유저가 사용하기 위해서는 root를 거쳐 변경해야 되지만 /usr/bin/passwd은 SETUID가 적용되었기 때문에 일반 유저들도 임시적으로 root 권한으로 /etc/passwd 파일을 수정할 수 있게 되었다.

 

한번 실제로 SETUID를 적용해보기 위해 먼저 test.c 파일을 생성하고 현재 권한은 777인 것을 확인할 수 있다.

 

기존의 777앞에 4의 허가권을 붙여주고 chmod 4644 test.c 라고 명령하니 user의 실행권한이 s로 변경된 것을 확인 할 수 있다.

 

 

○ SETGID

파일을 실행하고 종료될때까지 파일의 소유그룹의 권한을 얻는다.

즉 일시적으로 파일 소유 그룹의 권한을 얻어 실행이 가능하도록한다.

 

현재 SETGID 권한으로 설정되어있는 파일들이다

 

SETGID를 적용해 보기 위해 이번에도 test.c 에다 권한을 부여했다.

SETGID의 허가권인 2를 붙여주어 chmod 2777 test.c 라고 명령하니 그룹의 실행권한이 x -> s 로 변경된 것을 확인할 수 있다.

 

 

SETGID 에는 한가지 특징이 있는데 원래 파일의 소유자를 변경하는 권한은 root만 가능하지만 SETGID 에서는

디렉터리에 SETGID를 설정할 경우 그 디렉터리 안에서 누가 만들더라도 GID로 적용되어 생성이 된다.

root 권한으로 디렉토리 setgid_test를 생성하고 chmod 2777 의 권한을 부여하였다.

권한을 root가 아닌 dgu로 변경하고 디렉토리 SETGID로 설정된 setgid_test 안에 디렉토리 gid_test_dir 와 파일 gid_test.txt 를 생성했다.

리스트를 보니 SETGID 의 영향을 받아 정말 그룹이 root로 나오는 것을 확인 할 수 있다.

좀 더 깊게 들어가기 위해 SETGID 의 영향을 받는 디렉토리 gid_test_dir/ 에 들어가서 새로운 파일을 생성해 보았다.

확인해보니 역시 그룹이 root로 되어있고 SETGID 가 하위 모든 파일에 적용되는 것을 확인 할 수 있다.

 

○ STICKY BIT

일반 사용자들에게 디렉터리에서 파일 생성 권한을 부여한다.

즉 STICKY BIT 가 적용된 디렉토리안에 파일을 생성하게 되면 누구나 생성된 디렉토리안에 파일을 생성할 수 있지만 수정, 삭제 권한은 해당 파일은 생성한 소유자와 root만 갖게 된다.

보통 공용디렉토리에 STICKY BIT 가 대부분 적용되어 있다.

 

STICKY BIT 적용된 대표적인 폴더는 tmp 가 있다.

tmp는 임시파일로 모든 사용자가 사용하는 공용디렉토리인데 

파일의 소유자나 root가 아닌 다른 사용자가 777권한으로 설정된 파일을 삭제, 변경하면 문제가 발생하게 되므로 STICKY BIT 로 설정되어 있다.

 

 

실제로 tmp 디렉토리에 접근하면 other 권한이 x -> t 로 설정된 것을 확인 할 수 가 있다.

'Programing Language > Linux' 카테고리의 다른 글

about yum  (0) 2022.05.26
install gcc & gcc options  (0) 2022.05.25
whereis & $PATH & background  (0) 2022.04.11
Linux commands related to process  (0) 2022.04.09
Linux commands related to network  (0) 2022.04.08