접근 제어 목록 (ACL, Access Control List) - 접근 제어 행렬을 객체 기준으로 분할한 구현 방식
핵심 인사이트 (3줄 요약)
- 본질: ACL(접근 제어 목록)은 접근 제어 행렬을 객체(파일) 기준으로 분할하여, 각 파일에 "누구(Object)가 어떤 권한(Subject)을 가지는지" 목록을 저장하는 방식이다.
- 가치: 파일 접근 시 해당 파일의 ACL만 확인하면 되므로 중앙 테이블 탐색 없이 $O(1)$ 시간에 접근 권한을 검증할 수 있다.
- 한계: 사용자가 퇴사하거나 권한을 회수할 때, 해당 사용자가 포함된 모든 파일의 ACL을 찾아 업데이트해야 하는 $O(N)$ 작업이 필요하다.
1. 개요 및 배경 (Context & Necessity)
1.1 전역 테이블의 한계
전역 테이블에서는 사용자 퇴사 시:
- 시스템의 모든 권한 튜플을 스캔
- 해당 사용자가 포함된 튜플을 모두 삭제
수백만 개 파일 환경에서 이는 수시간에서 수일이 소요될 수 있다.
1.2 ACL의 해결책
ACL은 "파일(Object)ごとに(각각)" 권한 목록을 저장한다:
[ 파일 A의 ACL ]
- 사용자A: {Read, Write}
- 사용자B: {Read}
[ 파일 B의 ACL ]
- 사용자B: {Read, Write}
- 사용자C: {Read}
2. 아키텍처 및 핵심 원리 (Deep Dive)
2.1 ACL vs Capability: 두 가지 분할 방식
| 구분 | ACL (행 분할) | Capability (열 분할) |
|---|---|---|
| 분할 기준 | 객체(파일) 기준 | 주체(사용자) 기준 |
| 저장 위치 | 파일 inode에 부착 | 프로세스 PCB에 저장 |
| 권한 회수 | 파일 ACL에서 삭제 ($O(1)$) | 모든 프로세스 티켓 회수 ($O(N)$) |
| 사용자 조회 | 해당 사용자가 접근 가능한 파일 탐색 어려움 | 사용자의 티켓 목록만 확인 ($O(1)$) |
2.2 Unix/Linux의 ACL: 9비트 시스템
전통적인 Unix/Linux의 파일 권한은 3group × 3bit = 9bit 구조다:
[ 예: chmod 755 file.txt ]
rwxr-xr-x (Owner: 7=rwx, Group: 5=r-x, Others: 5=r-x)
이는 simplified ACL로, 소유자/그룹/기타 세 가지 항목만 관리한다.
2.3 확장 ACL
현대 시스템에서는 세밀한 ACL을 지원한다:
# Linux 확장 ACL 설정
setfacl -m u:alice:rw /data/report.txt
# 사용자 alice에게 report.txt에 읽기/쓰기 권한 부여
3. 실무 적용: Windows NTFS ACL
3.1 Windows 보안 탭
Windows 탐색기에서 파일 우클릭 → 속성 → 보안 탭에서 보는 것이 바로 NTFS ACL이다.
3.2 ACL 항目の構造
[ NTFS ACL 항목 ]
Principal (사용자/그룹) | Access Type (허용/거부) | Permissions (권한)
alice | Allow | Read, Write
NETWORK SERVICE | Deny | Full Control
4. 기대효과 및 결론
- 권한 회수의 용이성: 특정 파일의 권한 변경 시 해당 파일 ACL만 수정
- 분산 관리: 각 파일 소유자가 직접 권한을 관리 가능
- 역방향 조회 어려움: "이 사용자가 접근 가능한 파일 목록" 조회 시 전체 파일 스캔 필요
관련 개념 맵 (Knowledge Graph)
| 관련 개념 | 설명 |
|---|---|
| 접근 제어 행렬 (573장) | ACL의 수학적 원본 |
| 전역 테이블 (574장) | ACL과 비교되는 중앙 집중형 구현 |
| Capability (576장) | ACL과 대칭되는 주체 중심 구현 |
| RBAC (577장) | ACL에서 사용자 그룹핑을 추가한 모델 |
👶 어린이를 위한 3줄 비유 설명
-
ACL은 각 교실마다 **"이 교실에 출입 가능한 학생 명단"**을 게시하는 것과 같다. 교실 문 앞에 명단이 붙어있어, 학생이 들어올 때 문지기가 명단을 확인하면 된다.
-
권한 회수는 퇴사하는 직원이 작업한 모든 파일의 앞명부를 수정해야 하는 것과 같다. 만약 그가 100개의 파일에 접근했다면, 100개 모든 명부를 찾아 수정해야 한다.
-
ACL vs Capability는 "교실별 명부"와 "학생별 출입증"의 차이와 같다. 교실별 명부는 수정이 쉽지만, "이 학생은 어디 갈 수 있나"를 알려면 모든 명부를 뒤져야 한다.