명령어만 보고 싶어요
setfacl -R -m u:$username:rwx -m d:u:$username:rwx $폴더 nohup setfacl -R -m u:$username:rwx -m d:u:$username:rwx $폴더 > setfacl_result.log 2>&1 &
ACL이란?ACL은 기존 Linux 권한 체계에 사람·그룹 별 예외 권한을 추가하는 기능입니다.
리눅스 권한은 보통 소유자→그룹→기타 사용자 순으로 읽기·쓰기·실행 권한이 부여됩니다.
특정 계정을 지정하여 위 권한 구조를 무시하고 별도의 권한 체계를 만들어 적용하고 싶을 때 ACL을 사용할 수 있습니다.
| 명령어 또는 방법 | 설정 방식 |
|---|---|
chmod | 소유자·그룹·기타 사용자의 기본 권한 변경 |
chown | 파일·폴더의 소유자 또는 그룹 변경 |
/etc/group 또는 LDAP 그룹 | 사용자를 특정 그룹에 포함시켜 그룹의 권한과 동일한 권한이 사용자에게 상속됨 |
setfacl | (ACL) 특정 사용자·그룹에게 추가적인 개별 권한 부여 |
✔️ 기존 권한 체계를 건들이지 않습니다. (대체가 아닌 예외 추가)
✔️ 기존 권한 체계로는 해결되지 않거나 관리가 복잡할 때 유용합니다.
✔️ 하위에 파일이 많은 구조라면 시간이 소요됩니다.
setfacl -m u:$username:rwx $폴더
-m (modify): ACL 설정을 추가하거나 수정합니다.
u (user): 대상이 사용자임을 명시합니다.
g (group): 그룹 지정 시 사용합니다.
setfacl -R -m u:$username:rwx $폴더
-R (recursive): 하위 경로까지 재귀적으로 모두 적용합니다.
setfacl -R -m d:u:$username:rwx $폴더
d: (default): 새로 생성되는 하위 개체들이 상속받을 기본(Default) ACL을 지정합니다.
하위 데이터가 너무 많은 경우 명령어 실행 도중 터미널의 TMOUT에 따라 세션이 만료되거나, 화면보호기 시간이 다 되어 원격 접근이 끊길 수 있습니다. 콘솔 접근이 아니라면 백그라운드 실행으로 해두는 편이 안전합니다.
nohup setfacl -R -m u:$username:rwx -m d:u:$username:rwx $폴더 > setfacl_result.log 2>&1 &
nohup: 터미널 세션이 끊기거나 로그아웃 되더라도 프로세스가 종료되지 않고 계속 실행되도록 합니다.
&: 명령어를 백그라운드에서 실행하여 터미널 제어권을 즉시 반환받습니다.
> setfacl_result.log 2>&1: 명령어의 정상 출력(표준 출력)과 오류 메시지(표준 에러)를 모두 파일에 저장합니다. 백그라운드 실행 시 진행 상황이나 에러 발생 여부를 나중에 로그로 확인하기 위해 필요합니다.
# 실행 중인 setfacl 프로세스 확인
ps -ef | grep setfacl
# 로그를 통해 실시간 진행 상황 및 에러 확인
tail -f setfacl_result.log
하위 적용과 앞으로 존재하는 것에 상속되는 적용은 옵션과 역할이 다릅니다. 따라서 두 번 입력하거나 한 번에 -m을 두 번 입력하는 것이 좋습니다.
-m u: → 현재 존재하는 것에 적용
-m d:u: → 앞으로 생성되는 것에 상속
getfacl $폴더 (| head $NUM)
ACL이 정상적으로 적용된 폴더나 파일은 ls -l 명령어로 확인 시 기존 권한 표기 마지막에 + 기호가 붙습니다. (예: drwxrwxr-x+)
ls -al $폴더
ACL 설정 전에 로그인이 되어 있던 세션의 경우는 로그아웃 후 재로그인해야 적용됩니다.
+) 파일 및 폴더만 출력굉장히 많은 목록이 터미널을 점유하기 때문에 출력을 로그에 넣어두고 파일로 열어보는 편이 좋습니다.
getfacl -R --skip-base $폴더 (> getfacl.log)
-s (--skip-base): 기본 권한(소유자, 그룹, 기타)만 있는 파일은 건너뛰고, setfacl로 예외 권한이 추가된 파일이나 폴더만 걸러서 출력할 수 있습니다.
-R (recursive): 하위 경로까지 재귀적으로 모두 검색합니다.
🍀 1~2줄만 출력해보고 필요한 데이터만 awk로 추출해서 확인하는 방법을 권장합니다.
경로명과 추가된 사용자(user:) 및 그룹(group:) 정보만 남깁니다.
getfacl -R --skip-base $폴더 | grep -E "^# file:|^user:|^group:" (> $logfile)
계정, 폴더명, 권한을 한 줄로 나열하여 엑셀이나 문서에 정리하기 좋게 뽑아내는 원라이너(One-liner) 명령어입니다.
getfacl -R --skip-base $폴더 | awk -F: '
/^# file:/ { filepath = substr($0, 9) }
/^user:/ && $2 != "" { print "[폴더/파일] " filepath " | [계정] " $2 " | [권한] " $3 }
/^group:/ && $2 != "" { print "[폴더/파일] " filepath " | [그룹] " $2 " | [권한] " $3 }
'
+ 기호가 붙은 권한 폴더만 출력하위 탐색 없이 현재 폴더의 ls -al 결과에서 +가 붙은 줄만 눈으로 빠르게 확인하고 싶다면 정규식을 사용해 걸러낼 수 있습니다. 가장 쉽고 빠르게 확인한다는 장점이 있지만, 단순히 +가 붙은 줄만 보이는, 간단한 데이터만 확인할 수 있다는 단점이 있습니다.
ls -al $폴더 | grep -E '^.{10}\+'