Linux

[Linux] 특수 권한 : SetUID, SetGID, 스티키비트

유큰 2024. 5. 16. 00:03

[Linux] 특수 권한 : SetUID, SetGID, 스티키비트

 

리눅스 특수 권한,SetUID,SetGID,스티키비트


🎯 특수권한

 

리눅스에서 특수권한이란 기존 읽기, 쓰기, 실행 권한 외에 예외적으로 대체할 수 있는 권한을 말합니다.

특수권한에는 SetUID, SetGID, 스티키비트(StickyBit)가 있습니다.

 

☑️ SetUID

 

파일의 SetUID 비트가 설정되면 사용자가 파일을 실행할 때, 파일의 소유자 권한으로 실행됩니다.

 

예를 들어, /usr/bin/passwd 프로그램을 실행하여 사용자의 패스워드를 바꾸죠?

ykhan@raspbeerypi:/etc# grep ykhan /etc/passwd
ykhan:x:1622:1622:,,,:/home/ykhan:/bin/bash

 

passwd 프로그램은 /etc/shadow 파일에 접근하여 password를 바꿀 수 있답니다.

(위 코드에서 'x'라고 되어있는부분이 /etc/shadow에 비밀번호가 암호화되어 저장되어있다는 뜻입니다)

 

그런데 문제는 root사용자만이 /etc/shadow에 접근가능합니다.

이 설정대로라면, 일반 사용자들은 /etc/shadow에 접근 못하니까 비밀번호를 못바꾼잖아요? (root만 바꿀수있으니까)

 

그래서 일반사용자가 passwd 프로그램을 사용하여 비밀번호를 바꿀 수 있게, 프로그램 실행시, 일반사용자의 권한이 아닌, root(소유자)권한으로 프로그램을 실행할 수 있도록 임시로 설정한다는 거에요!

root@raspberrypi:/usr/bin# ls -al passwd
-rwsr-xr-x 1 root root 72048 Mar 23  2023 passwd

 

/usr/bin/passwd의 권한을 보시면 소유자권한에 rw's' , 즉, 실행권한을 의미하는 'x' 대신 's'가 붙어있는게 보이시죠?

이게 해당 프로그램에 SetUID가 설정되었다는 의미입니다!

 

SetUID를 설정하시려면 아래와 같이 소유자권한(u)에 's'를 추가하시면 됩니다.

$ chmod u+s ykhan.sh
$ chmod u=srwx,g=r,o=r ykhan.sh

 

☑️ SetGID

 

파일의 SetGID 비트(s)가 설정되면 사용자가 파일을 실행할 때, 파일의 소유자 그룹 권한으로 실행됩니다.

 

설정방법은 그룹 권한(g)에 's'를 추가하시면 됩니다!

$ chmod g+s ykhan.sh
$ chmod u=rwx,g=sr,o=r ykhan.sh

 

☑️ 스티키 비트(Sticky Bit)

 

보안을 위해 일반사용자의 특정 디렉토리 삭제권한을 제한하는 것

 

예를 들어 모든 사용자가 모든 권한으로 접근가능한 temp_dir(drwxrwxrwx)이라는 디렉토리가 있다고 가정해볼게요

스티키비트
temp_dir

그런데 이렇게 되면 사용자 누구라도 이 디렉토리를 지울 수 있기때문에 보안상에 문제가 발생할 수 있어요

그래서 모든 사용자가 접근가능하지만 삭제는 못하도록할 때 스티키비트('t')를 설정해 삭제권한을 제한할 수 있어요

 

즉, 모든 사용자가 접근 가능하여 rw 가능하지만, 삭제는 해당 디렉토리의 소유자만 삭제 가능하도록 하는 것입니다.

 

대표적으로 스티키비트가 지정되어있는 디렉토리는 /tmp가 있어요

리눅스 스티키비트
스티키비트가 설정되어있는 tmp 디렉토리

 

스티키비트를 추가하는 방법으로는 권한설정시 다른사용자 권한(o)에 문자 't'를 추가해주시면 됩니다

$ chmod o+t temp_dir

 


읽어주셔서 감사합니다 🥰