접근 제어 목록 (ACL, Access Control List) - 접근 제어 행렬을 객체 기준으로 분할한 구현 방식

핵심 인사이트 (3줄 요약)

  1. 본질: ACL(접근 제어 목록)은 접근 제어 행렬을 객체(파일) 기준으로 분할하여, 각 파일에 "누구(Object)가 어떤 권한(Subject)을 가지는지" 목록을 저장하는 방식이다.
  2. 가치: 파일 접근 시 해당 파일의 ACL만 확인하면 되므로 중앙 테이블 탐색 없이 $O(1)$ 시간에 접근 권한을 검증할 수 있다.
  3. 한계: 사용자가 퇴사하거나 권한을 회수할 때, 해당 사용자가 포함된 모든 파일의 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줄 비유 설명

  1. ACL은 각 교실마다 **"이 교실에 출입 가능한 학생 명단"**을 게시하는 것과 같다. 교실 문 앞에 명단이 붙어있어, 학생이 들어올 때 문지기가 명단을 확인하면 된다.

  2. 권한 회수는 퇴사하는 직원이 작업한 모든 파일의 앞명부를 수정해야 하는 것과 같다. 만약 그가 100개의 파일에 접근했다면, 100개 모든 명부를 찾아 수정해야 한다.

  3. ACL vs Capability는 "교실별 명부"와 "학생별 출입증"의 차이와 같다. 교실별 명부는 수정이 쉽지만, "이 학생은 어디 갈 수 있나"를 알려면 모든 명부를 뒤져야 한다.