LabHub
배우기 러닝패스 코스

LFCS — Linux Foundation System Administrator

Permission Bits, umask and the ACL Mask

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

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.txtumask=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.txtlfcsonerw-, lfcstwor-- 로 ACL 을 주고, shared/ 디렉터리에는 lfcsteam 그룹의 default ACL 을 rwx 로 주세요.
  8. handoff.txt 의 ACL 마스크를 r-- 로 낮추고, /root/lfcs-perm/mask.txtlfcsone_effective=<마스크 적용 후 lfcsone 의 실효 권한> 한 줄을 적으세요.

참고

협업용 그룹과 사용자 준비

디렉터리 /root/lfcs-perm/ 를 만들고, 그룹 lfcsteam 과 사용자 lfcsone, lfcstwo 를 만드세요. 두 사용자 모두 lfcsteam보조 그룹으로 가져야 합니다(기본 그룹은 각자의 개인 그룹).

두 사용자 모두 팀 그룹을 보조 그룹으로 가져야 합니다. 기본 그룹까지 팀 그룹으로 만들면 뒤 단계의 상속 실험이 의미를 잃습니다.

8진수 모드와 그룹 소유권

/root/lfcs-perm/notes.txt 를 만들고 권한을 640, 그룹을 lfcsteam 으로 맞추세요.

권한과 그룹은 서로 다른 명령입니다. 640 은 소유자 읽기·쓰기, 그룹 읽기, 기타 없음입니다.

기호 모드로 권한 주기

/root/lfcs-perm/run.sh 에 아무 내용이나 넣고, 기호 모드를 써서 권한을 750, 그룹을 lfcsteam 으로 맞추세요.

기호 모드는 대상(u/g/o/a), 연산자(+/-/=), 권한(r/w/x)을 조합합니다. 등호는 나머지를 지우고 지정한 값만 남깁니다.

umask 가 기본 권한을 깎는 방식

umask 를 0027 로 바꾼 셸에서 /root/lfcs-perm/umask-demo/newfile 파일과 /root/lfcs-perm/umask-demo/newdir 디렉터리를 새로 만드세요. 그리고 /root/lfcs-perm/umask.txtumask=0027, file=<새 파일의 권한>, dir=<새 디렉터리의 권한> 세 줄을 적으세요.

파일 기준값은 666, 디렉터리 기준값은 777 이고 umask 비트가 거기서 빠집니다. 나중에 chmod 로 맞추지 말고 umask 를 바꾼 셸에서 새로 만드세요.

setuid 와 sticky 비트

/root/lfcs-perm/probe 를 root 소유·권한 4755 로 만들고, /root/lfcs-perm/tools/ 디렉터리를 1777 로 만드세요.

특수 비트는 8진수 네 자리의 맨 앞자리입니다. setuid 는 4, setgid 는 2, sticky 는 1 입니다. setuid 는 소유자가 누구인지가 핵심입니다.

setgid 협업 디렉터리

/root/lfcs-perm/shared/ 를 그룹 lfcsteam, 권한 2770 으로 만든 다음 그 안에 handoff.txt 를 만드세요. 파일의 그룹이 상속으로 lfcsteam 이 되어야 합니다.

순서가 중요합니다. 디렉터리에 비트를 세우고 그룹을 맞춘 다음에 안에 파일을 만들어야 상속이 일어납니다.

명명된 사용자 ACL 과 default ACL

handoff.txtlfcsonerw-, lfcstwor-- 로 ACL 을 주고, shared/ 디렉터리에는 lfcsteam 그룹의 default ACL 을 rwx 로 주세요.

파일에는 개별 사용자 항목을, 디렉터리에는 앞으로 만들어질 파일에 물려줄 항목을 겁니다. 뒤쪽은 별도의 플래그가 필요합니다.

마스크가 실효 권한을 깎는다

handoff.txt 의 ACL 마스크를 r-- 로 낮추고, /root/lfcs-perm/mask.txtlfcsone_effective=<마스크 적용 후 lfcsone 의 실효 권한> 한 줄을 적으세요.

마스크는 소유자와 기타를 뺀 모든 항목의 상한입니다. 마스크만 따로 지정하는 항목 표기가 있고, 낮추고 나면 getfacl 이 실효 권한을 함께 보여 줍니다.