getfacl 명령어 사용법

파일·디렉터리에 설정된 ACL(접근 제어 목록) 항목을 확인하는 명령어입니다.

권한·보안 관리연결 실습 문제 3개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

getfacl [옵션] 파일...

getfacl 은 파일이나 디렉터리에 설정된 ACL(Access Control List) 항목을 출력하는 명령어입니다. 소유자·그룹·기타(owner/group/other) 3단계 권한만으로는 표현할 수 없는 "특정 사용자 한 명에게만 쓰기 허용", "특정 그룹에게만 읽기 허용" 같은 세분화된 권한을 확인할 때 사용합니다. 출력에는 파일명, 소유자, 소유 그룹 등의 헤더 주석과 user/group/mask/other 항목이 표시됩니다.

실무에서는 배포 계정에만 설정 파일 쓰기 권한을 주거나, 감사(audit) 담당 그룹에 로그 읽기 권한만 부여한 뒤 그 결과를 검증하는 용도로 사용합니다. 권한을 설정하는 setfacl 과 짝을 이루며, getfacl 은 조회 전용입니다. ls -l 에서 권한 문자열 끝에 + 기호가 보이면 ACL 이 설정된 파일이므로 getfacl 로 상세 내용을 확인합니다.

리눅스마스터·RHCSA·LPIC 시험에서는 setfacl 로 권한을 부여한 뒤 getfacl 로 결과를 확인하는 흐름이 출제됩니다. 디렉터리의 기본(default) ACL 상속 설정이 올바른지 판단하는 문제에서도 사용됩니다.

자주 쓰는 옵션

옵션의미
-R, --recursive디렉터리 하위 항목까지 재귀적으로 출력getfacl -R /srv/project-docs
-a, --access접근 ACL 만 출력(기본 ACL 제외)getfacl -a /srv/project-docs
-d, --default기본(default) ACL 만 출력getfacl -d /srv/project-docs
-c, --omit-header파일명·소유자 등 헤더 주석을 생략getfacl -c /srv/releases/app.env
-t, --tabular표(tabular) 형식으로 출력getfacl -t /srv/releases/app.env
-n, --numeric사용자·그룹을 이름 대신 숫자 ID로 출력getfacl -n /srv/releases/app.env
-e, --all-effective모든 항목에 유효 권한(#effective) 주석을 표시getfacl -e /srv/releases/app.env
-E, --no-effective유효 권한 주석을 표시하지 않음getfacl -E /srv/releases/app.env
-s, --skip-base기본 권한만 있는(ACL 항목이 없는) 파일은 건너뜀getfacl -R --skip-base /srv/project-docs
-p, --absolute-names경로 앞의 / 를 제거하지 않고 그대로 출력getfacl -p /srv/releases/app.env

실무 예시

ACL 없는 파일 확인

준비: mkdir -p /tmp/demo; echo 'KEY=value' > /tmp/demo/app.env; chmod 640 /tmp/demo/app.env

$ getfacl /tmp/demo/app.env
getfacl: Removing leading '/' from absolute path names
# file: tmp/demo/app.env
# owner: root
# group: root
user::rw-
group::r--
other::---

ACL 을 따로 설정하지 않은 파일도 기본 권한이 user/group/other 항목으로 표시됩니다. 절대경로를 주면 앞의 / 를 제거한다는 안내가 표준 오류로 함께 출력됩니다(종료 코드는 0).

특정 사용자 ACL 부여 후 확인

준비: mkdir -p /tmp/demo; id demo_deploy >/dev/null 2>&1 || useradd demo_deploy; echo 'KEY=value' > /tmp/demo/app.env; chmod 640 /tmp/demo/app.env; setfacl -m u:demo_deploy:rw /tmp/demo/app.env

$ getfacl /tmp/demo/app.env
getfacl: Removing leading '/' from absolute path names
# file: tmp/demo/app.env
# owner: root
# group: root
user::rw-
user:demo_deploy:rw-
group::r--
mask::rw-
other::---

demo_deploy 사용자에게 rw- 권한이 부여되었는지와 mask 값을 확인합니다. 실습 #153 의 검증 방식과 동일합니다.

그룹 읽기 전용 ACL 확인

준비: mkdir -p /tmp/demo/logs; groupadd -f demo_auditors; touch /tmp/demo/logs/file1.log /tmp/demo/logs/file2.log; setfacl -m g:demo_auditors:r /tmp/demo/logs/file1.log /tmp/demo/logs/file2.log

$ getfacl /tmp/demo/logs/file1.log /tmp/demo/logs/file2.log | grep -E '^# file:|^group:'
getfacl: Removing leading '/' from absolute path names
# file: tmp/demo/logs/file1.log
group::r--
group:demo_auditors:r--
# file: tmp/demo/logs/file2.log
group::r--
group:demo_auditors:r--

여러 파일의 ACL 을 한 번에 조회하고 그룹 항목만 골라 r-- 권한이 적용됐는지 대조합니다. 소유 그룹 항목(group::)과 추가된 그룹 ACL 항목(group:demo_auditors:)이 파일마다 함께 출력됩니다.

디렉터리 기본 ACL 상속 확인

준비: mkdir -p /tmp/demo/project-docs; id demo_analyst >/dev/null 2>&1 || useradd demo_analyst; setfacl -m u:demo_analyst:rwx /tmp/demo/project-docs; setfacl -m d:u:demo_analyst:rwx /tmp/demo/project-docs

$ getfacl /tmp/demo/project-docs
getfacl: Removing leading '/' from absolute path names
# file: tmp/demo/project-docs
# owner: root
# group: root
user::rwx
user:demo_analyst:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:demo_analyst:rwx
default:group::r-x
… (2줄 더)

접근 ACL(user:...)과 기본 ACL(default:...)이 함께 출력됩니다. default 항목이 있어야 이후 새로 만드는 파일·디렉터리에 권한이 상속됩니다. 기본 ACL 만 보려면 getfacl -d 를 사용합니다.

재귀 조회로 ACL 설정된 파일만 찾기

준비: mkdir -p /tmp/demo/srv/plain /tmp/demo/srv/acl; groupadd -f demo_auditors; touch /tmp/demo/srv/plain/a.txt /tmp/demo/srv/acl/b.txt; setfacl -m g:demo_auditors:r /tmp/demo/srv/acl/b.txt

$ getfacl -R --skip-base /tmp/demo/srv
getfacl: Removing leading '/' from absolute path names
# file: tmp/demo/srv/acl/b.txt
# owner: root
# group: root
user::rw-
group::r--
group:demo_auditors:r--
mask::r--
other::r--

--skip-base 를 쓰면 ACL 항목이 없는 파일은 건너뛰므로, 디렉터리 트리에서 ACL 이 설정된 항목만 골라낼 수 있습니다. /srv 나 / 같은 넓은 경로에 재귀 조회하면 시간이 오래 걸리므로 대상 디렉터리를 좁혀서 실행하세요.

주의할 점

  • mask 값이 낮으면 ACL 권한이 제한됩니다. #effective 주석이 붙은 항목은 실제 유효 권한이 표기된 권한보다 낮다는 뜻입니다.
  • chmod 로 그룹 권한을 바꾸면 ACL mask 가 함께 변경되어 부여한 ACL 이 무력화될 수 있습니다.
  • default ACL 은 디렉터리에만 설정할 수 있고, 이미 존재하는 파일에는 소급 적용되지 않습니다.
  • 절대경로를 인자로 주면 출력의 # file: 경로에서 앞의 / 가 제거되고 안내 메시지가 표준 오류로 출력됩니다. 절대경로 그대로 보려면 -p 를 사용하세요.
  • ACL 은 파일 시스템에 acl 옵션이 활성화되어 있어야 동작합니다. 지원되지 않는 경우 setfacl 이 'Operation not supported' 로 실패합니다.
  • cp 로 복사할 때 ACL 을 유지하려면 cp -p 또는 cp -a 를 사용해야 하며, 그렇지 않으면 ACL 이 사라집니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.