IT/리눅스

[Linux] 파일의 특수 권한 (Set-UID, Set-GID, Sticky-Bit)

몬스터r 2022. 12. 29. 17:13

[Linux] 파일의 특수 권한 (Set-UID, Set-GID, Sticky-Bit)

오늘은 특수 권한에 대해 알아보도록 하겠다. 사용자는 간혹 root 권한이 필요한 경우가 있다. 그러나 root 권한을 직접적으로 부여 할 순 없기 때문에 특수한 권한을 설정하여 일부 권한만 허용할 수 있다. 그것이 바로 특수 권한이다. 특수 권한에는 세 가지 속성이 있고, 각각 Set-UID, Set-GID, Sticky-Bit라고 한다.

 

이 특수 권한은 퍼미션처럼 파일에 설정이 되어 있다면 직접적으로 나타나는데, rwx와는 다른 형식으로 나타난다. 또한 보안에 상당히 예민할 수 있는 부분이기 때문에 설정할 때는 주의를 기울여야 한다.

 

 

 

 

Set-UID


Set-UID가 설정되는 파일은 주로 실행 파일에 설정이 된다. Set-UID가 설정된 파일을 실행하면 파일은 실행자를 소유자라고 인식하게 된다.

 

 

 

jake, hope라는 두 개의 계정이 있다고 가정하겠다.

 

파일에 대한 소유권은 jake가 가지고 있고, hope가 Set-UID가 설정된 파일을 실행하면 파일은 jake가 파일을 실행했다고 생각한다. 그렇기 때문에 이 파일이 실행되는 동안 hope는 jake라고 인식이 된다.

 

이렇게 되면 어떤 작업이 가능하냐면, jake가 소유한 다른 파일을 hope는 평소에 수정할 수 없지만, Set-UID가 설정된 실행 파일을 통해 jake의 다른 파일을 수정할 수 있게 된다.

 

따라서 정말 필요한 경우가 아니라면 사용하는 것을 지양해야 한다.

 

 

 

Set-UID는 허가권에서 소유자 권한의 실행 권한자리에 s로 출력된다.

# Set-UID가 설정되지 않은 실행 파일
-rwxr-xr-x. 1 jake jake   19592 Oct 18 23:29 a.out

# Set-UID가 설정된 실행 파일
-rwsr-xr-x. 1 jake jake   19592 Oct 18 23:29 a.out
# 소유자의 실행 권한이 x 대신 s로 표시

 

설정 방법 

chmod 4xxx file_name

[root@haechan test_dir]$ ls -l
-rwxr-x-r-x. 1 root root   8 Oct 18 23:29 test1

[root@haechan test_dir]$ chmod 4755 test1

[root@haechan test_dir]$ ls -l
-rwsr-x-r-x. 1 root root   8 Oct 18 23:29 test1

 

 

Set-GID


Set-GID는 Set-UID와 같이 실행파일에 설정하거나 디렉토리에 설정하는 방식 둘 중 하나를 사용한다.

실행파일에 설정하게 되면 파일이 실행자의 그룹을 소유 그룹으로 인식하게 되는 방식으로 작동 된다.

 

이론적으로는 실행 파일에 지정되지만 실무에서는 보통 디렉토리에 Set-GID를 설정한다.

Set-GID가 설정된 디렉토리 내부에서 다른 그룹의 사용자가 파일을 생성할 때, 파일을 생성한 사용자의 그룹을 상관하지 않고 무조건 디렉토리에 설정된 그룹의 권한을 갖게된다.

 

Set-GID는 허가권에서 그룹 권한의 실행 권한자리에 s로 출력된다.

# 일반적인 파일 생성
[hope@haechan test_dir]$ ls -l
drwxrwxrwx. 1 jake jake   8 Oct 18 23:29 test1

[hope@haechan test_dir]$ cd test1; touch file1; ls -l file1
-rw-rw----. 1 hope hope   0 Oct 18 23:29 file1 
# 파일의 소유권은 hope에게 있는 것을 확인

# Set-GID 설정, 디렉토리의 그룹 실행권한이 x 대신 s로 표시
[hope@haechan test1]$ ls -l 
drwxrwsrwx. 1 jake jake   8 Oct 18 23:29 test1

[hope@haechan test_dir]$ cd test1; touch file1; ls -l file1
-rw-rw----. 1 hope jake   0 Oct 18 23:29 file1 
# 파일의 그룹 소유권은 jake 그룹에 있는 것을 확인

 

설정 방법

chmod 2xxx file_name

[root@haechan test_dir]$ ls -l
-rwxr-x-r-x. 1 root root   8 Oct 18 23:29 test1

[root@haechan test_dir]$ chmod 2755 test1

[root@haechan test_dir]$ ls -l
-rwxr-s-r-x. 1 root root   8 Oct 18 23:29 test1

 

 

Sticky-Bit


Sticky-Bit는 Set-UID나 Set-GID와는 다르게 디렉토리에 설정되는 특수 권한이다. Sticky-Bit가 설정된 디렉토리는 공용 디렉토리로 사용 되며, /tmp가 대표적인 예다. /tmp는 보통 응용 프로그램이 생성하는 임시 파일들이 저장 된다.

 

Sticky-Bit에 대해 쉽게 설명하면 응용프로그램 1이 저장한 '임시 파일'을 응용프로그램 2로 삭제하지 못하도록 설정하는 권한이다.

 

Sticky bit가 설정된 directory는 other의 실행 권한이 x -> t로 표현 된다.

[root@haechan /]# ls -l
drwxrwxrwt. 1 root root   8 Oct 18 23:29 tmp
# Other 사용자의 실행 권한이 t로 표시

 

설정 방법

chmod 1xxx directory_name

[root@haechan /]# ls -l
drwxrwxrwx. 1 root root   8 Oct 18 23:29 tmp

[root@haechan /]# chmod 1777 tmp

[root@haechan /]# ls -l
drwxrwxrws. 1 root root   8 Oct 18 23:29 tmp

 

 

 

 

같이 보면 좋은 글


https://lhc9763.tistory.com/27

 

[Linux] 파일 및 디렉토리의 소유권과 허가권

[Linux] 파일 및 디렉토리의 소유권과 허가권 오늘은 리눅스에서의 소유권과 허가권에 대해 알아보도록 하겠다. 소유권 (Ownership) 파일이나 디렉토리를 소유하여 소유권을 주장하는 것, root 계정은

lhc9763.tistory.com

https://lhc9763.tistory.com/19

 

[Linux] 리눅스 디렉토리 구조 및 역할

[Linux] 리눅스 디렉토리 구조 및 역할 오늘은 리눅스에서 사용하는 디렉토리들의 종류와 역할을 알아보도록 하자. 리눅스의 최상위 디렉토리는 root 디렉토리(/)라고 한다. 루트 디렉토리에는 아

lhc9763.tistory.com