[Linux] 13. 고급 권한 관리
(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