Linux 시스템 보안 기초 · 21/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
기본 rwx는 소유자·그룹·기타 딱 세 주체만 구분합니다. '특정 사용자 한 명에게만 읽기 허용' 같은 세밀한 제어는 ACL(Access Control List) 로 합니다. 문제는, ACL로 부여된 권한은 ls -l에 잘 드러나지 않아 '숨은 권한'이 될 수 있다는 점입니다.
ACL은 파일마다 '추가 접근 규칙 목록'을 붙입니다.
getfacl: ACL 조회setfacl -m u:bob:rw file: bob에게 rw 부여mask: ACL로 부여 가능한 최대 권한 상한핵심: ACL이 걸린 파일은 ls -l의 권한 끝에 + 가 붙습니다. 이 +를 놓치면 실제 접근 가능자를 오판합니다.
ls -l 로 본 권한: -rw-r-----+ ← 끝의 '+' 가 ACL 존재 표시
│
▼
getfacl 로 실제 규칙 확인:
user::rw-
user:bob:rw- ← rwx엔 안 보이던 'bob의 쓰기 권한'
group::r--
mask::rw-
커널의 권한 검사는 ACL이 있으면 기본 rwx 대신 ACL 항목을 참조합니다. mask는 그룹·명명 사용자 항목의 유효 권한 상한을 정합니다(mask가 r--면 u:bob:rw여도 실제로는 r--만 유효).
보안 관점의 핵심: 공격자가 setfacl로 자신에게 은밀히 권한을 부여하면, 소유자·그룹은 그대로라 ls -l만 보는 관리자는 눈치채기 어렵습니다. 그래서 + 표시와 getfacl 점검이 중요합니다.
# ACL이 걸린 파일 찾기 (권한 끝 + 표시)
ls -l /path | grep '+'
# 특정 파일의 ACL 전체 규칙 확인
getfacl secret.txt
# 재귀적으로 명명 사용자 ACL 탐지
sudo getfacl -R -s /etc /home 2>/dev/null | grep -E '^# file|^user:[^:]'
실습 환경에서 setfacl로 bob에게 권한을 준 뒤 getfacl 실제 결과입니다. (실제 캡처)
$ getfacl secret.txt
# file: secret.txt
# owner: root
# group: root
user::rw-
user:bob:rw-
group::r--
mask::rw-
other::r--
user:bob:rw- 라인이 ACL로 추가된 권한입니다. ls -l에는 root root만 보이지만 실제로는 bob도 쓸 수 있습니다. 이런 '숨은 쓰기 권한'이 민감 파일에 있으면 곧 조사 대상입니다.
ls -l상 권한은 엄격한데 +로 실제 접근자가 늘어남ACL은 정당한 도구지만, 공격자에게는 '눈에 안 띄는 권한 부여' 수단이 됩니다.
ls -l의 + 표시 스캔 후 getfacl 정밀 확인setfacl 실행 감사(auditd execve)ACL 변경은 rwx 변경보다 탐지가 어려워, auditd로 setfacl 실행과 setxattr syscall을 감사하는 것이 효과적입니다. Wazuh FIM은 확장 속성(xattr) 변경까지 감지하도록 설정할 수 있어, 민감 파일의 은밀한 ACL 부여를 잡아냅니다. 발견 시 부여 대상 사용자를 조사 포인트로 삼습니다.
[ ] ls -l의 + 표시로 ACL 파일 식별
[ ] getfacl로 명명 사용자 권한 확인
[ ] mask 상한 점검
[ ] setfacl/setxattr 감사 설정
다음 편에서는 22. Linux Capabilities 이해 를 다룹니다. root의 전체 권한을 잘게 쪼갠 Linux Capabilities의 개념을 봅니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.