개요
ACL은 전통적인 Unix 권한 모델(소유자, 그룹, 기타)을 넘어선 유연한 권한 관리를 제공합니다. 특정 사용자나 그룹에 대해 파일 또는 디렉토리에 대한 접근 권한을 명시적으로 지정할 수 있습니다. 이는 여러 사용자가 공유하는 환경에서 복잡한 권한 요구사항을 충족시키는 데 유용합니다.
주요 특징
- 세분화된 권한 제어
- 특정 사용자/그룹에 대한 권한 부여
- 기본 권한(umask)과 함께 작동
- 디렉토리의 기본 ACL 설정 가능
설치
`acl` 기능 자체는 리눅스 커널에 내장되어 있지만, `getfacl` 및 `setfacl` 명령어를 사용하기 위해서는 `acl` 패키지를 설치해야 합니다. 대부분의 리눅스 배포판에서 기본으로 설치되어 있지 않을 수 있습니다.
Debian/Ubuntu
sudo apt update && sudo apt install acl
Debian 또는 Ubuntu 기반 시스템에서 `acl` 패키지를 설치하는 명령어입니다.
CentOS/RHEL/Fedora
sudo yum install acl
CentOS, RHEL 또는 Fedora 기반 시스템에서 `acl` 패키지를 설치하는 명령어입니다.
사용 예시
ACL은 주로 `getfacl` (ACL 조회)과 `setfacl` (ACL 설정) 명령어를 통해 관리됩니다. 다음은 몇 가지 일반적인 사용 예시입니다.
파일의 ACL 조회
getfacl my_file.txt
`getfacl` 명령어를 사용하여 특정 파일 또는 디렉토리의 현재 ACL을 확인합니다.
특정 사용자에게 읽기/쓰기 권한 부여
setfacl -m u:user1:rw my_file.txt
`setfacl -m` 옵션을 사용하여 'user1' 사용자에게 'my_file.txt'에 대한 읽기(r) 및 쓰기(w) 권한을 부여합니다.
특정 그룹에 실행 권한 부여
setfacl -m g:dev_group:x my_script.sh
`setfacl -m` 옵션을 사용하여 'dev_group' 그룹에 'my_script.sh'에 대한 실행(x) 권한을 부여합니다.
ACL 엔트리 제거
setfacl -x u:user1 my_file.txt
`setfacl -x` 옵션을 사용하여 'user1'에 대한 ACL 엔트리를 제거합니다.
디렉토리에 기본 ACL 설정
setfacl -m d:u:user2:rwx my_directory/
새로 생성되는 파일이나 디렉토리가 특정 ACL을 상속받도록 디렉토리에 기본 ACL을 설정합니다. `d:` 접두사를 사용합니다.
모든 ACL 제거
setfacl -b my_file.txt
`setfacl -b` 옵션을 사용하여 파일 또는 디렉토리의 모든 확장 ACL 엔트리를 제거하고, 전통적인 권한으로 되돌립니다.
팁 & 주의사항
ACL을 사용할 때는 기존 권한 시스템과의 상호작용을 이해하는 것이 중요합니다.
ACL과 전통적인 권한
- ACL이 설정된 파일/디렉토리의 `ls -l` 출력에는 권한 문자열 끝에 `+` 기호가 붙습니다.
- ACL은 전통적인 권한(소유자, 그룹, 기타) 위에 추가적인 권한을 부여합니다. `mask` 엔트리는 ACL의 최대 유효 권한을 제한합니다.
- ACL을 너무 복잡하게 설정하면 권한 관리가 어려워질 수 있으므로, 필요한 경우에만 신중하게 사용해야 합니다.
mask 엔트리 이해
ACL을 설정하면 `mask` 엔트리가 자동으로 생성되거나 업데이트될 수 있습니다. 이 `mask`는 사용자(u:), 그룹(g:), 명명된 사용자(u:name:), 명명된 그룹(g:name:) 엔트리에 부여된 최대 유효 권한을 정의합니다. `mask`보다 더 많은 권한을 부여하려 해도 `mask`에 의해 제한됩니다. `setfacl -m m::rw`와 같이 수동으로 `mask`를 설정할 수 있습니다.
파일 시스템 지원
ACL을 사용하려면 파일 시스템이 ACL을 지원해야 합니다. ext2, ext3, ext4, XFS 등 대부분의 최신 리눅스 파일 시스템은 ACL을 지원합니다. 파일 시스템 마운트 시 `acl` 옵션이 활성화되어 있는지 확인해야 할 수 있습니다 (예: `/etc/fstab`).