확장 권한 / 특수 권한

Woo Yong·2023년 8월 4일
0

Linux

목록 보기
5/7
post-thumbnail

권한


리눅스에서는 시스템에 존재하는 파일에 대한 접근을 관리하기 위해 파일에 권한(Permission)을 설정하거나 해제하는 방식을 사용한다
.

대부분의 경우 읽기, 쓰기, 실행과 같은 기본 권한을 설정하여 파일에 대한 접근을 제어할 수 있다.

확장권한


확장권한은 리눅스의 기본권한 (r,w,x)외의 기능을 사용할 수 있도록 확장된 권한이다.
확장권한에는 setuid, setgid, sticky bit가 있다.

✔︎ setuid

setuid는 실행권한이 있는 바이너리 파일 또는 스크립트파일에만 사용이 가능하다.
보통 사용자가 실행파일을 실행하면 당연하게 실행한 사용자가 주체가 되어 프로세스를 실행한다.

📌 하지만 setuid가 설정되어있는 파일은 실행한 사용자가 아니라 파일을 소유하고 있는 사용자의 권한으로 프로세스를 실행한다.

passwd명령어를 예시로 들어보자.

1️⃣ 특정 명령어의 위치를 알려주는 which 명령어를 통해 passwd 명령어의 위치를 확인한다.
2️⃣ passwd명령어 위치 파일을 확인해보면 -rwsr-xr-x로 setuid가 설정되어있다는 것을 볼 수 있다.
그리고 파일 소유자가 root 라는 것을 확인할 수 있다.
📌 그러므로 setuid가 설정된 실행파일은 파일을 실행하는 사람이 아니라 소유자의 권한으로 실행되기 때문에 passwd 명령어를 입력하면 파일의 소유자(root)가 실행하는 것으로 프로세스가 실행된다.

3️⃣ 하지만 passwd 명령어를 통해 /etc/shadow(패스워드 정보)가 변경되는 것이기 때문에 /etc/shadow의 파일의 권한도 확인해봐야한다.
🤔 그런데 실행권한이 없다 ? 어떻게 실행이 되는걸 까?
💬 root 사용자는 파일에 대한 권한을 어느정도 무시할 수 있는 사용자이기 때문에 /etc/shadow파일을 수정할 수 있는 것이다.

📌 즉, 일반 사용자가 passwd명령어를 입력하더라도 setuid설정파일로 root(소유권자)사용자 권한으로 /etc/shadow 파일을 변경할 수 있었던 것이다.


✔︎ setgid

setgid는 setuid처럼 바이너리 파일 또는 스크립트 파일에 설정되어 있으면 명령을 실행할 때 프로세스의 사용자 그룹이 파일의 사용자 그룹으로 실행된다.
일반적으로 setgid는 바이너리 파일보다 디렉토리에 설정하여 사용하는 경우가 많다.

만약 setgid가 설정되어 있다면 해당 디렉토리에서 파일을 생성했을 때 파일의 사용자 그룹은 파일을 생성한 사용자의 기본 그룹으로 지정되지 않고 setgid가 설정된 디렉토리의 사용자 그룹으로 상속된다. ( 사용자의 기본그룹으로 지정이되는 것이 아니라 setgid가 설정된 디렉토리의 사용자그룹으로 상속된다.)

📌 setgid는 setuid와 다르게 사용자 그룹 권한(rwxr-sr-x) 중 실행권한에 설정 됩니다.

/run/log/journal 명령어를 예시로 들어보자.

1️⃣ /run/log/journal디렉토리에 안에 dir1디렉토리와 file1파일을 각각 생성한다.
2️⃣ 생성한 dir1, file1의 내용을 확인한다.

3️⃣ 내용을 확인해보면 setgid가 설정된 /run/log/journal 디렉토리의 그룹(systemd-journal)이 상속된 것을 볼 수 있다.

✔︎ sticky bit

만약 어떤 디렉토리의 기타 사용자 권한에 r(읽기), w(쓰기), x(실행) 권한이 모두 설정되어 있다면 시스템의 모든 사용자는 해당 디렉토리에서 파일을 생성, 수정, 삭제가 가능해진다.

하지만 생성은 할 수 있더라도 아무나 삭제한다면 문제가 발생할 수 있다.
💡 이때 sticky bit를 설정하면 파일의 소유권자만 파일을 삭제할 수 있다. (아무나 삭제가 불가능하다) 그리고 sticky bit설정은 디렉토리에만 설정 가능하고, 리눅스 시스템에서 sticky bit가 설정된 대표 디렉토리는 /tmp/var/tmp가 있다.

sticky bit는 기타 사용자 권한의 실행권한에 설정된다. 실행권한 x 대신 t로 표시되며 설정되어있지 않는 경우 T로 표시된다.

/tmp디렉토리를 예시로 들어보자.

1️⃣ root 계정으로 접속 후, sticky bit가 설정된 /tmp디렉토리에 접근하여 file1을 생성한다.
그리고 file1의 내용을 살펴보면 소유권자가 파일을 생성한 root로 설정되어있는 것을 확인할 수 있다.

2️⃣ 그리고 일반 사용자 계정(wooyong)으로 접속하여 file1을 삭제하면 삭제가 될까 ? file1의 권한이 없다고 나온다
🤔 /tmp파일은 권한이 777인데 왜 삭제가 안되는 걸까 ?
💬 그 이유는 바로 사용자 권한의 실행권한에 t로 설정된 sticky bit 설정 떄문 인 것이다.

📌 즉, sticky bit가 설정된 파일은 root와 파일 생성자(소유권자)만 삭제만 가능하다.

✏️ 정리


  • setuid 가 설정된 파일은 실행하는 사용자의 권한으로 실행되는 것이 아니라 파일 소유권자로 실행되는 것이다.
    실행하는 순간에만 그 파일의 소유자 권한으로 실행된다는 것이다.


  • setgid가 설정된 디렉토리 내 파일들은 파일 파일 생성시 그룹 소유권자가 파일 생성자가 아니라 setgid가 설정된 그룹 소유권자를 상속받는다.

  • sticky bit가 설정되면 디렉토리 내 파일이나 디렉토리에 대해서 생성, 수정은 가능하지만, 소유자,root사용자가 아니면 삭제를 못한다.
    생성, 수정이 자유롭기 때문에 누구나 자유롭게 사용할 수 있게 공용 디렉토리에 사용된다.
profile
Back-End Developer

0개의 댓글