1.ACL 기본 개념
기존 UGO 권한 체계는 특정 유저/그룹에만 접근 제어를 적용할 수 있는 한계가 있습니다. 세밀한 권한 관리를 위해 ACL(Access Control List)을 사용할 수 있습니다. ACL 설정은 root 권한이 필요하며, getfacl/setfacl 명령어로 관리합니다.
// 테스트 파일 준비
[root@lqz ~]# cp /etc/passwd /root/passwd
[root@lqz ~]# ll passwd
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt
// 기본 ACL 구조 확인
[root@lqz ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw- // 소유자 권한
group::r-- // 소유 그룹 권한
other::r-- // 기타 사용자 권한
1.ACL 권한 설정 예시
-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwd
alice: 읽기/쓰기 권한
bgx: 접근 금지
jack: 읽기 권한
익명 사용자: 읽기/쓰기 권한
// 사용자 생성
[root@lqz ~]# useradd alice
[root@lqz ~]# useradd bgx
[root@lqz ~]# useradd jack
// 개별 권한 설정
[root@lqz ~]# setfacl -m u:alice:rw passwd
[root@lqz ~]# setfacl -m u:bgx:- passwd
[root@lqz ~]# setfacl -m o::rw passwd
[root@lqz ~]# setfacl -m g:jack:r passwd
// 권한 우선순위 규칙
1. ACL 우선순위가 높은 규칙이 적용됨
2. 다중 그룹 권한이 있을 경우 최대 권한이 적용됨
2.ACL 정보 조회
[root@lqz ~]# ll passwd
-rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd
[root@lqz ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:bgx:---
user:alice:rw-
group::r--
group:jack:r--
mask::rw-
other::rw-
3.ACL 제거 방법
// 특정 그룹 권한 제거
[root@lqz ~]# setfacl -x g:jack passwd
// 특정 사용자 권한 제거
[root@lqz ~]# setfacl -x u:bgx passwd
// 전체 ACL 제거
[root@lqz ~]# setfacl -b passwd
// 디렉토리 기본 ACL 제거
[root@lqz ~]# setfacl -k dir
4.도움말 확인
[root@lqz ~]# man setfacl
// ACL 복사 예제
[root@lqz ~]# setfacl -m u:alice:rw,u:bgx:r,g:jack:rw file1
[root@lqz ~]# getfacl file1 |setfacl --set-file=- file2
2.ACL 마스크 기능
mask는 특정 사용자/그룹의 최대 권한을 제한하는 역할을 합니다. 마스크 값은 ACL 설정 시 자동 계산되며, 명시적으로 조정할 수 있습니다.
// 마스크 권한 제한
[root@lqz ~]# setfacl -m mask::rw filename
핵심 정리
- 마스크는 소유자와 other 제외한 모든 접근자에 영향
- 실제 최대 권한 결정 요소
- ACL 재설정 시 마스크 값 초기화됨
3.ACL 기본 권한
default ACL은 디렉토리 내 새 파일에 자동으로 상속되는 권한입니다.
// 디렉토리 및 하위 파일 권한 설정
[root@lqz ~]# setfacl -R -m u:alice:rwX /opt
[root@lqz ~]# setfacl -m d:u:alice:rwX /opt
// 결과 확인
[root@linux-node1 ~]# getfacl /opt/
default:user:alice:rwx
default:group::rwx
default:mask::rwx
default:other::rwx
4.ACL 실무 사례
사례 1: 파일 권한 관리
요구사항: tom 소유, mary 읽기/쓰기, admin 그룹 읽기/쓰기/실행, jack 읽기, 나머지 차단
// 사용자 및 그룹 준비
[root@lqz ~]# useradd tom
[root@lqz ~]# useradd mary
[root@lqz ~]# groupadd admin
[root@lqz ~]# gpasswd -a mary admin
// 파일 준비
[root@lqz ~]# cp /etc/passwd /root/
[root@lqz ~]# chown tom:admin passwd
[root@lqz ~]# chmod 644 passwd
// ACL 적용
[root@lqz ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd
// 결과 확인
[root@lqz ~]# getfacl passwd
user::rwx
user:jack:r--
user:mary:rw-
group:admin:rwx
mask::rwx
other::---
사례 2: 디렉토리 권한 관리
요구사항: controller 그룹 소유, sodor 그룹 읽기/쓰기/실행, james 사용자 접근 금지
// 그룹 및 사용자 생성
[root@lqz ~]# groupadd controller
[root@lqz ~]# groupadd sodor
[root@lqz ~]# useradd student -G controller
[root@lqz ~]# useradd thomas -G sodor
[root@lqz ~]# useradd james -G sodor
// 디렉토리 준비
[root@lqz ~]# mkdir /shares/steamies -p
[root@lqz ~]# chown -R :controller /shares/steamies/
[root@lqz ~]# chmod g+s /shares/steamies/
// ACL 설정
[root@lqz ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/
[root@lqz ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/
// 결과 확인
[root@lqz steamies]# getfacl /shares/steamies/
group:sodor:rwx
user:james:---
default:group:sodor:rwx
default:user:james:---