Linux

[Linux] 13. 고급 권한 관리

훈티 2022. 7. 26. 23:27

(Week 3 - Day 2) - (2/2)

(Week 3 - Day 3) - (1/2)

확장 권한

SetUID

실행권한이 있는 바이너리 파일 또는 스크립트 파일에만 사용한다.

파일을 소유하고 있는 사용자의 권한으로 프로세스를 실행하게 된다.

대표적으로 passwd 명령에서 사용된다.

which passwd
/bin/passwd

ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 JUL 26 2022 /bin/passwd

SetGID

setuid처럼 바이너리 파일 또느 스크립트 파일에 설정되어 있으면 명령을 실행할 때

프로세스의 사용자 그룹이 파일의 사용자 그룹으로 실행된다.

하지만 일반적으로는 바이너리 파일보다 디렉토리에 설정하여 사용하는 경우가 많다.

 

setgid가 설정되어 있는 대표적인 디렉토리는 /run/log/journal 이다.

ls -ld /run/log/journal
drwxr-sr-x. 3 root systemd-fournal 60 JUN 23 14:00 /run/log/journal/

Stickybit

디렉토리의 기타 사용자 권한에 읽기, 쓰기, 실행 권한이 모두 있으면 모든 사용자가 다 건드릴 수 있다.

삭제 또한 마찬가지이다.

 

이를 방지하게 위해 stickybit를 사용하면 소유자만이 파일을 삭제할 수 있다.

(내가 블로그에 올린 글은 나만 삭제할 수 있다.)

 

stickybit가 설정된 대표적인 디렉토리는 /tmp와 /var/tmp이다.

ls -ld /tmp/ /var/tmp/
drwxrwxrwt. 15 root root 4096 Feb 23 16:30 /tmp/
drwxrwxrwt. 7 root root 4096 Feb 23 12:12 /var/tmp/

ACL

- access control list : 접근 제어 리스트

- 파일을 소유한 사용자와 사용자 그룹을 제외한 사용자와 그룹에게 별도의 권한을 부여할 수 있다.

확인 명령어

getfacl file-name

getfacl /root/acl/fileB
getfacl: Removing leading '/' from absolute path names
# file : root/acl/fileB
# owner : root
# group : root
user::re-
group::r--
other::r--

설정 명령어

setfacl [OPTION] FILE

일반 ACL : 개별 파일/디렉토리에 적용하는 ACL

기본 ACL(Default ACL) : 디렉토리에 적용하는 ACL로 하위 파일에 ACL을 상속하는 ACL

 

일반 ACL

- 개별 파일 및 디렉토리에 적용하는 ACL

ACL Entry 작성 형식

소유자           u::PERMS

소유 그룹       g::PERMS

기타 사용자    o::PERMS

특정 사용자    u:USER:PERMS

특정 그룹       g:GROUP:PERMS

권한

r - 읽기

w - 쓰기

x - 실행(무조건 실행 권한 부여)

X - 실행(실행 권한 있는 파일에만 실행 권한을 부여)

일반 ACL 설정

$ setfacl -m ACL_ENTRY FILE

일반 ACL 제거(한개)

- 하나의 일반 ACL Entry만 제거

$ setfacl -x ACL_ENTRY FILE

일반 ACL 제거(전체)

- 일반 ACL 전체 제거

$ setfacl -b FILE

일괄적 일반 ACL 생성

$ setfacl -R -m ACL_ENTRY DIRECTORY

기본 ACL

- Default ACL

- 디렉토리에 적용하는 ACL로 디렉토리 하위 파일에 ACL을 상속하는 ACL

기본 ACL ENTRY 작성 형식

소유자  d:u::PERMS

소유그룹  d:g::PERMS

기타사용자 d:o::PERMS

특정사용자 d:u:USER:PERMS

특정그룹 d:g:USER:PERMS

권한

r - 읽기
w - 쓰기
x - 실행(무조건 실행 권한 부여)
X - 실행

기본 ACL 설정

$ setfacl -m d:ACL_ENTRY DIRECTORY
OR
$ setfacl -d -m ACL_ENTRY DIRECTORY

기본 ACL 제거(한개)

$ setfacl -x DEFAULT_ACL_ENTRY DIRECTORY

기본 ACL 제거(전체)

$ setfacl -k DIRECTORY