LFCS — 리눅스 재단 시스템 관리자 · 사용자·그룹·권한 · 실습
권한 비트, umask, ACL 마스크
목표
8진수와 기호 모드, umask, 특수 비트, ACL 과 마스크를 한 디렉터리 안에서 차례로 세워 보고 그 상호작용을 눈으로 확인한다.
왜 중요한가
권한 문제는 "왜 안 되지" 로 시작해서 대개 chmod 777 로 끝난다. 그 습관이 감사에서 걸리는 이유는 단순하다 — 필요한 것은 한 사람의 예외인데 모두에게 문을 열었기 때문이다. 세 칸(소유자·그룹·기타)으로 표현이 안 되는 요구가 생겼을 때 그룹을 새로 파는 대신 ACL 을 쓰는 판단, 그리고 여러 사람이 같은 디렉터리에 파일을 쌓을 때 setgid 로 그룹을 통일하는 판단이 이 영역의 핵심이다. 마스크는 특히 중요하다. ACL 을 정확히 주고도 나중에 누가 chmod 한 번을 걸면 마스크가 다시 계산되어 그 ACL 이 조용히 무력해진다. getfacl 의 #effective: 표시를 읽을 줄 알아야 이 상황을 5초 만에 알아본다.
단계
1. 디렉터리 /root/lfcs-perm/ 를 만들고, 그룹 lfcsteam 과 사용자 lfcsone, lfcstwo 를 만드세요. 두 사용자 모두 lfcsteam 을 보조 그룹으로 가져야 합니다(기본 그룹은 각자의 개인 그룹).
2. /root/lfcs-perm/notes.txt 를 만들고 권한을 640, 그룹을 lfcsteam 으로 맞추세요.
3. /root/lfcs-perm/run.sh 에 아무 내용이나 넣고, 기호 모드를 써서 권한을 750, 그룹을 lfcsteam 으로 맞추세요.
4. umask 를 0027 로 바꾼 셸에서 /root/lfcs-perm/umask-demo/newfile 파일과 /root/lfcs-perm/umask-demo/newdir 디렉터리를 새로 만드세요. 그리고 /root/lfcs-perm/umask.txt 에 umask=0027, file=<새 파일의 권한>, dir=<새 디렉터리의 권한> 세 줄을 적으세요.
5. /root/lfcs-perm/probe 를 root 소유·권한 4755 로 만들고, /root/lfcs-perm/tools/ 디렉터리를 1777 로 만드세요.
6. /root/lfcs-perm/shared/ 를 그룹 lfcsteam, 권한 2770 으로 만든 다음 그 안에 handoff.txt 를 만드세요. 파일의 그룹이 상속으로 lfcsteam 이 되어야 합니다.
7. handoff.txt 에 lfcsone 은 rw-, lfcstwo 는 r-- 로 ACL 을 주고, shared/ 디렉터리에는 lfcsteam 그룹의 default ACL 을 rwx 로 주세요.
8. handoff.txt 의 ACL 마스크를 r-- 로 낮추고, /root/lfcs-perm/mask.txt 에 lfcsone_effective=<마스크 적용 후 lfcsone 의 실효 권한> 한 줄을 적으세요.
참고
- 특수 비트는 8진수 네 자리의 맨 앞자리입니다. setuid 4, setgid 2, sticky 1.
- 6단계는 순서가 전부입니다. 비트를 세우기 전에 만든 파일은 그룹을 물려받지 않습니다.
getfacl은 마스크가 실제 권한을 깎을 때만#effective:를 붙입니다.- 흔한 실수: ACL 을 준 뒤에
chmod를 걸면 그룹 비트가 마스크로 해석되어 ACL 이 무력해집니다.
단계 8개
- 협업용 그룹과 사용자 준비
- 8진수 모드와 그룹 소유권
- 기호 모드로 권한 주기
- umask 가 기본 권한을 깎는 방식
- setuid 와 sticky 비트
- setgid 협업 디렉터리
- 명명된 사용자 ACL 과 default ACL
- 마스크가 실효 권한을 깎는다