1. ACL 소개
파티 주최자(또는 시스템 관리자)라고 상상해봐. 어떤 방은 손님들이 자유롭게 다닐 수 있도록 하고, 어떤 방은 네 허락이 있어야만 들어갈 수 있게 하고 싶다고 치자. Linux의 기본 접근 권한 rwx은 소유자(user), 그룹(group), 그리고 나머지(others) 이렇게 세 가지 카테고리만 관리할 수 있어. 근데, 특정 친구한테만 방에 접근할 권한을 주고 싶다면? 권한의 표준 모델만으로는 "야, 그건 안 돼"라고 할 거야. 바로 이럴 때 ACL이 도움을 주려고 등장하지.
ACL (Access Control Lists)은 기존의 삼중 권한 시스템의 한계를 해결해서 특정 사용자와 그룹에게 접근 권한을 부여할 수 있게 만들어줘.
ACL의 주요 기능:
- 특정 사용자와 그룹에 대한 파일과 디렉토리의 개별 권한 설정.
- 디렉토리 내부의 새로운 파일에 대한 권한 상속.
- 전통적인
chmod접근 방식보다 더 유연한 설정.
2. ACL이 활성화되었는지 확인하는 방법?
ACL을 관리하기 전에, 시스템에서 ACL을 지원하는지 확인해 보자. 명령어를 사용해서 확인할 수 있어:
mount | grep acl
파일 시스템이 acl 옵션으로 마운트되었다면, 준비 완료야! 그렇지 않다면 acl 옵션을 추가해서 파티션을 다시 마운트해야 해:
sudo mount -o remount,acl /your/mount/point
이제 준비가 끝났어. 실습에 들어갈 시간이야.
3. ACL 작업을 위한 주요 명령어
| 명령어 | 설명 |
|---|---|
getfacl |
파일이나 디렉토리의 현재 ACL 목록을 확인. |
setfacl |
파일이나 디렉토리의 ACL 설정 또는 수정. |
setfacl -m |
현재의 액세스 권한 수정 (modify). |
setfacl -x |
특정 액세스 권한 삭제 (remove). |
setfacl -b |
파일이나 디렉토리의 모든 ACL 기록 삭제. |
setfacl -d |
디렉토리의 기본 (default) 권한 설정, 파일에 상속됨. |
각 명령어를 예로 들어 살펴보자!
현재 ACL 확인 getfacl
파일 example.txt가 있다고 가정하고, ACL을 사용하여 현재의 액세스 권한을 확인하고 싶다면 단 한 줄의 명령어면 충분해:
getfacl example.txt
대략적인 출력은 다음과 같아:
# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---
이 목록은 표준 권한을 보여줘: 소유자 user1는 읽기와 쓰기가 가능하고, 그룹 group1은 읽기만 가능하며, 나머지 사용자들은 접근 권한이 없어.
개별 액세스 권한 설정 (setfacl)
이제 user2 사용자가 example.txt 파일에 쓰기 권한을 가져야 한다고 가정해보자. 다음과 같이 할 수 있어:
sudo setfacl -m u:user2:rw example.txt
명령어 의미:
-m: 권한 수정.u:user2:rw: 사용자user2에 대한 권한 추가 또는 변경 (read-write).
결과를 확인하자:
getfacl example.txt
출력은 이렇게 보여:
# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw # 추가된 규칙!
group::r--
other::---
개별 권한 삭제 setfacl -x
이제 user2 사용자가 더 이상 쓰기 권한을 가지지 않아야 한다고 결정했을 경우, 권한을 삭제할 수 있어:
sudo setfacl -x u:user2 example.txt
확인:
getfacl example.txt
user2에 대한 추가적인 규칙은 이제 없어!
그룹에 권한 설정
ACL을 사용하면 특정 사용자뿐만 아니라 전체 그룹에 대해 권한을 설정할 수도 있어. 예를 들어, devteam 그룹에게 읽기 및 쓰기 권한을 부여하려면 다음을 실행하면 돼:
sudo setfacl -m g:devteam:rw example.txt
기본 권한 설정 setfacl -d
특정 디렉토리 내에서 새 파일 및 디렉토리에 대해 자동으로 권한을 설정해야 하는 경우가 자주 있어. 예를 들어, developer 사용자에게 project_dir 디렉토리 내 모든 파일에 대해 쓰기 권한을 부여하려면 다음과 같이 해야 해:
sudo setfacl -d -m u:developer:rw project_dir
권한을 확인하려면 이렇게 하면 돼:
getfacl project_dir
이제 project_dir 안의 모든 새 파일 및 하위 디렉토리는 기본적으로 이 규칙이 적용돼.
모든 ACL 삭제 setfacl -b
파일에 대한 모든 ACL을 완전히 지우려면:
sudo setfacl -b example.txt
이제 파일은 표준 권한 모델 user:group:others로 돌아가.
4. ACL의 실질적인 활용
시나리오: 프로젝트에서 공동 작업
예를 들어, /project 디렉토리에 저장된 프로젝트가 있다고 해볼게. 그리고 세 사람이 작업 중이야:
Alice는 완전 접근 권한(읽기, 쓰기, 실행)을 가져야 해.Bob는 파일을 읽기만 해야 해.Eve는 디렉토리를 전혀 볼 수 없어야 해.
이걸 ACL로 설정하는 방법은 다음과 같아:
Alice에게 완전 접근 권한 주기:sudo setfacl -m u:alice:rwx /projectBob에게 읽기 전용 접근 권한 주기:sudo setfacl -m u:bob:r-- /projectEve는 아무 것도 안 해도 돼 — 기본적으로 접근 권한이 없어.
현재 ACL 목록을 확인해 보자:
getfacl /project
출력:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
이제 Alice는 제한 없이 작업할 수 있고, Bob는 파일을 읽기만 할 수 있으며, Eve는 디렉토리에 접근할 수 없어.
5. 발생할 수 있는 오류와 해결 방법
ACL이 작동하지 않아요, 설정했는데도요. 아마도 파티션이
acl옵션으로 마운트되지 않았을 수도 있어.mount를 사용해서 확인하고 필요하면 다시 마운트해봐.기본 권한과 ACL 간의 충돌. ACL은 항상 기본 권한보다 우선이야. 예를 들어, "others"가 읽기를 금지하고 있어도, ACL은 특정 사용자에게 접근을 허용할 수 있어.
상속된 ACL을 잊어버릴 때. 만약
-d(default) 권한을 설정했다면, 이 규칙이 새로운 파일에 상속되었는지 확인해봐.
왜 중요한 걸까?
ACL을 통한 권한 관리는 다양한 사용자와 그룹에 대한 접근을 유연하게 설정할 수 있게 해줘. 특히 롤에 따라 접근 권한을 배분해야 하는 업무 서버에서 유용하지. 예를 들어, ACL은 회사에서 특정 내용을 아는 사람들만 접근할 수 있도록 제한하는 데 사용돼 — 보안의 핵심 중 하나야.
추가로, ACL에 대한 공식 문서를 확인해서 더 잘 이해해 볼 수도 있어.
GO TO FULL VERSION