시스템 · 서버핵심 · 20분 읽기

Linux 권한·ACL·특수 권한

파일과 디렉터리의 r·w·x는 의미가 다릅니다. 소유권, 그룹, ACL과 추가 접근 통제를 순서대로 확인합니다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. 파일 읽기·변경·삭제에 필요한 권한을 경로 단위로 판정한다.
  2. 소유자·명명 사용자 ACL·그룹·기타 범주의 선택과 mask를 설명한다.
  3. DAC 허용과 SELinux 허용을 구분해 거부 원인을 찾는다.

01rwx를 8진수로 계산하고 요청한 동작에 대입하기

  • 각 권한은 r=4, w=2, x=1의 비트다.
  • 0640은 소유자 6=읽기+쓰기, 그룹 4=읽기, 기타 0=허용 없음이다.
    • 선행 0은 8진수 표기를 분명하게 해 준다.
  • 실행 비트가 없는 일반 문서를 쉘 인터프리터가 읽어 처리하는 것과 커널이 그 파일 자체를 실행하도록 요청하는 것은 다르므로 noexec나 x 비트를 모든 코드 실행의 완전한 금지로 해석하면 안 된다.
  • 디렉터리의 r은 이름 목록 읽기, x는 이름을 통해 내부 객체 탐색, w는 항목 생성·삭제·이름 변경에 관여한다.
  • 파일 내용을 읽으려면 상위 디렉터리마다 탐색 권한과 대상 파일의 읽기 권한이 필요하다.
    • 반대로 파일의 쓰기 비트가 없어도 부모 디렉터리의 쓰기와 탐색이 허용되면 이름을 삭제할 수 있으며 같은 추가 조건이 이를 제한한다.
표기파일디렉터리
r내용 읽기이름 목록 읽기
w내용 수정항목 생성·삭제·이름 변경
x실행 요청경로 탐색

02소유자·그룹·기타는 순서대로 더하는 권한이 아니다

  • 일반 모드 비트 판정에서 의 파일 접근용 사용자 ID가 파일 소유자와 일치하면 소유자 비트만 적용한다.
  • 소유자에게 읽기 권한이 없다고 그룹 읽기나 기타 읽기로 다시 내려가지 않는다.
  • 소유자가 아니면서 파일 그룹이 의 유효 그룹 또는 보조 그룹 중 하나와 일치하면 그룹 비트를 적용하고, 그 밖의 경우 기타 비트를 사용한다.
  • 의 자격 정보와 capability, , LSM 정책이 함께 작용하므로 이 설명은 일반 DAC 모드 판정의 골격이다.
    • 예를 들어 =learner, =team, mode=0040인 파일은 learner가 team에 속해 있어도 소유자 분류에서 읽기가 거부된다.
    • 반면 소유자가 아닌 다른 team 사용자는 읽을 수 있다.
  • 사용자의 이름이 아니라 UID와 GID 숫자로 비교한다는 점 때문에 같은 이름이 여러 시스템에 존재해도 숫자 매핑이 다르면 등의 결과가 달라질 수 있다.
bash
id
stat -c "%A %a %u:%g %n" report.txt
namei -l /srv/team/report.txt
# owner/group/other 중 실제로 선택되는 분류를 먼저 결정한다.

교육용 예시. 표시된 결과는 설명을 위한 예시이며 실제 실행 기록이 아니다.

03POSIX ACL의 named entry와 mask

  • 은 특정 사용자나 여러 그룹에 별도 권한을 주기 위해 모드 비트를 확장한다.
  • user::는 소유자, user:learner:는 이름이 붙은 사용자 항목, ::와 :team:은 그룹 항목, other::는 기타다.
  • ::는 user와 그룹 클래스가 실제로 얻을 수 있는 권한의 상한이다.
  • 소유자 user::와 기타 other::에는 같은 방식으로 를 적용하지 않는다.
  • 확장 이 있으면 ls -l의 그룹 자리만 보고 소유 그룹 권한이라고 단정할 수 없다.
    • 예를 들어 user:learner:rw-와 ::r--가 함께 있으면 learner의 유효 권한은 읽기만이다.
  • user가 일치한 뒤 권한이 부족하다고 other로 재시도하지 않는다.
  • 그룹 판정에서는 일치하는 그룹 항목들의 허용 관계와 를 함께 고려한다.
  • 디렉터리 은 새 자식이 상속받을 의 기본값이며 기존 자식에 소급 적용하지 않는다.
bash
getfacl report.txt
# 설명용 발췌
# user::rw-
# user:learner:rw-       #effective:r--
# group::r--
# mask::r--
# other::---

교육용 예시. 표시된 결과는 설명을 위한 예시이며 실제 실행 기록이 아니다.

원리 심화

04확장 ACL을 모드 비트와 함께 읽는 규칙

  • 확장 의 user::는 소유자 모드, other::는 기타 모드에 대응한다. 가 있으면 ls -l의 그룹 비트는 :: 자체가 아니라 범위를 나타낸다.
  • 확장 이 있는 파일의 그룹 모드를 chmod로 바꾸면 에 영향을 줄 수 있다. user 항목의 rw- 문자열이 남아도 실제 유효 권한은 바뀔 수 있다.
  • 부모 디렉터리의 은 새 객체의 초기 계산에 쓰인다. 부모 을 수정했다고 이미 존재하는 모든 자식의 이 재계산되는 것은 아니다.
  • 을 상속하더라도 프로그램이 요청한 생성 모드에 없는 권한은 제거된다. 읽기·쓰기만 요청한 일반 파일에 상속 의 x가 그대로 생긴다고 단정할 수 없다.
  • 파일 소유자 UID가 일치하면 user:: 판정이 먼저다. 동일 사용자를 user로 추가해 소유자 권한의 부족분을 더하는 방식으로 이해하지 않는다.
예제로 추적

05mask를 바꾸었을 때 읽기·쓰기 결과 계산

  • user::rw-, user:reader:rw-, ::r--, ::r--, other::---인 파일을 가정한다. reader는 파일 소유자가 아니며 상위 경로 탐색은 가능하다.
  • reader 항목 rw-=6과 r--=4의 비트 AND 결과는 4다. 숫자 6에서 4를 빼는 계산이 아니므로 유효 권한은 r--이다.
  • reader가 내용을 쓰려 하면 user 범주에서 필요한 w가 없어서 거부된다. 이나 other의 항목으로 넘어가 추가 권한을 얻지 않는다.
  • 만 rw-로 바뀌면 reader의 유효 권한은 rw-가 되지만 ::r--는 여전히 읽기만이다. 상한 확대가 모든 항목에 쓰기를 새로 부여하는 것은 아니다.
  • getfacl에서 user:reader:rw- 옆 #effective:r--는 선언과 유효값의 차이를 보여 준다. 을 볼 때 항목 문자열과 를 같이 읽는 이유다.
text
user::rw-
user:reader:rw-           #effective:r--
group::r--
mask::r--
other::---

getfacl 형식의 가상 출력. 위 계산의 최초 상태를 보여 주며 실제 계정 정보가 아니다.

검증·예외

06같은 Permission denied를 만드는 서로 다른 경계

  • 파일 w는 내용 변경, 부모 디렉터리 w+x는 이름 변경·삭제와 관계한다. 파일을 읽기 전용으로 만들어도 부모에서 삭제를 허용하는 조건은 남을 수 있다.
  • 1777 디렉터리에서는 다른 사람 파일을 지울 수 있는지에 소유자·디렉터리 소유자·특권 조건이 추가된다. 넓은 디렉터리 w+x만으로 삭제 결과를 결정하지 않는다.
  • 터미널의 id와 서비스 UID·그룹이 다르면 같은 경로의 결과도 달라진다. 파일 이름을 바꾸기 전에 거부된 요청의 실행 주체와 동작을 고정한다.
  • 이 허용해도 읽기 전용 마운트, , 서비스 자체 정책에서 쓰기가 실패할 수 있다. 이때 를 계속 넓히면 접근 범위만 불필요하게 커진다.
  • 기존 파일은 정상인데 새 파일만 접근이 달라지면 생성 모드···부모 setgid를 대조한다. 기존 객체의 chmod 상태와 생성 정책은 다른 자료다.

07umask는 빼기가 아니라 생성 권한의 비트를 지운다

  • 프로그램이 요청한 생성 모드에서 에 설정된 비트를 제거한다.
  • 일반 파일을 0666으로 요청하고 가 0027이면 0666 & ~0027 = 0640이 된다.
    • 디렉터리를 0777로 요청하면 0750이다.
  • 가 실행 권한을 새로 추가하는 것은 아니므로 일반 파일의 기본 요청에 x가 없으면 실행 파일로 바뀌지 않는다.
    • 프로그램이 더 좁은 모드를 요청하면 그 제한 역시 유지된다.
  • 이 있는 디렉터리에서는 상속 과 요청 모드의 조합을 보아야 하므로 항상 만으로 결과를 계산할 수는 없다.
  • 기존 파일에 chmod를 적용하는 작업과 새 파일의 기본 생성 권한을 정하는 작업도 다르다.
  • 공유 디렉터리에서는 부모 setgid가 그룹을 이어 주고 이 접근 정책을 이어 주도록 역할을 나누어 설계할 수 있다.
bash
umask
# 새 실습 셸에서 umask 0027을 가정하면:
# 일반 파일 요청 0666 -> 결과 0640
# 디렉터리 요청 0777 -> 결과 0750

교육용 예시. 표시된 결과는 설명을 위한 예시이며 실제 실행 기록이 아니다.

08setuid·setgid·sticky와 capability의 작용 범위

  • 실행 파일의 setuid는 성공적인 실행 시 유효 UID를 파일 소유자의 UID로 바꿀 수 있다.
    • 실제 로그인 사용자를 나타내는 real UID와는 구별된다.
  • setgid 실행 파일은 유효 GID에 같은 종류의 영향을 주고, setgid 디렉터리는 새 자식의 그룹 상속에 쓰인다.
  • setgid 디렉터리라는 사실만으로 모든 자식에게 실행 비트나 쓰기 권한이 생기지는 않는다.
    • nosuid와 실행 파일 형식 등도 결과에 영향을 준다.
  • sticky 디렉터리에서는 쓰기 권한이 있더라도 파일 소유자·디렉터리 소유자 또는 필요한 권한을 가진 만 해당 항목을 삭제·이름 변경할 수 있다.
    • /tmp의 1777이 대표 사례다.
  • ls의 s와 t는 해당 실행 비트도 켜졌음을, S와 T는 특수 비트만 켜지고 대응 x는 꺼졌음을 나타낸다.
  • capability는 관리자 권능을 CAP_NET_BIND_SERVICE 같은 단위로 나눈다.
  • effective는 현재 검사에 쓰이는 집합, permitted는 활성화 가능한 범위, bounding은 실행을 통한 획득을 제한하는 상한이며 inheritable과 ambient는 실행 시 전달에 관여한다.
  • 파일 capability는 프로그램 자체가 안전하다는 보증이 아니다.
bash
getcap /usr/bin/ping
getpcaps 1234
# 설치 환경에 따라 capability가 없거나 출력이 다를 수 있다.

교육용 예시. 표시된 결과는 설명을 위한 예시이며 실제 실행 기록이 아니다.

수업 원본 자료

부모 디렉터리의 그룹을 새 디렉터리가 상속하는 실습

test2 그룹을 tester로 바꾸고 mode 2755를 적용한 뒤 하위 test3의 그룹과 setgid 비트를 관찰한 터미널 화면원본 크기로 보기 ↗
수업 원본 캡처 · 부모 디렉터리의 setgid가 자식의 그룹 선택과 연결된다.

이 자료에서 읽어낼 것

  1. chgrp tester 뒤 test2의 그룹 열이 root에서 tester로 바뀐다.
  2. chmod 2755 뒤 그룹 실행 위치가 s로 표시된다.
  3. root가 하위 test3을 만들었지만 그룹은 tester이고 새 디렉터리에도 setgid가 이어진다. 이 설정 자체가 모든 사용자에게 쓰기 권한을 주지는 않는다.
LEARN THROUGH PRACTICE

SetGID 디렉터리의 그룹 상속과 실제 쓰기 권한 구별하기

그룹 목록과 디렉터리 모드의 변화를 연결해, 새 항목의 그룹을 정하는 규칙과 생성 가능 여부를 분리한다.

실습 구성과 전제

  • 파일 시스템에 디렉터리와 사용자·그룹이 준비된 실습을 해석한다. 계정 예시는 labuser·labteam으로 재구성한다.
  • 디렉터리 변경 화면은 root가 실행한 결과다. 일반 사용자의 쓰기 성공을 보여 주는 화면으로 해석하지 않는다.
  1. 계정이 가진 그룹부터 확인한다

    • id의 gid는 기본 그룹, groups는 기본·보조 그룹 목록을 보여 준다. 이름과 숫자 GID를 함께 읽어 디렉터리의 소유 그룹과 대응시킨다.
    • 화면의 한 계정은 자신의 기본 그룹 외에 tester 그룹에도 포함된다. 이 정보는 그룹 권한을 적용할 후보라는 뜻이며, 아직 해당 디렉터리에 쓰기가 가능하다는 뜻은 아니다.
    bash
    id labuser
    getent group labteam
    id

    계정 데이터베이스 조회와 현재 정보를 비교하는 명령이다.

    Linux 사용자와 특수 권한 · 그룹 생성 및 관리 (6)원본 크기로 보기 ↗
    • id 출력의 uid와 gid가 각각 표시되고 groups에는 두 그룹이 나열된다.
    • groups 명령에서도 기본 그룹 외에 tester가 보이므로 보조 그룹 소속을 확인할 수 있다.
    확인 기준

    조회 대상 계정의 그룹과 현재 로그인 셸의 그룹이 다르면, 그룹 변경 이후 새 로그인 세션인지 먼저 구분한다.

  2. 2755를 그룹 상속과 접근 비트로 분해한다

    • chgrp 뒤 소유 그룹이 바뀌고 chmod 2755 뒤 그룹 실행 자리의 x가 s로 바뀐다. 앞의 2는 SetGID, 뒤의 755는 소유자 rwx·그룹 r-x·기타 r-x다.
    • 부모 디렉터리의 SetGID 때문에 그 안에 만든 항목은 부모의 그룹을 상속한다. 새 하위 디렉터리에 SetGID도 이어지는 모습이 화면에서 확인된다.
    Linux 사용자와 특수 권한 · 디렉터리 그룹 권한 설정 (10)원본 크기로 보기 ↗
    • test2는 처음 root:root였다가 chgrp 뒤 root:tester로 바뀐다.
    • chmod 2755 뒤 test2와 그 안의 test3 모두 drwxr-sr-x이고, 소유 그룹도 tester로 표시된다.
    확인 기준

    그룹 이름의 상속은 확인되지만 2755의 그룹 비트에는 w가 없다. 그룹 구성원의 생성 권한까지 성공했다고 결론내리지 않는다.

  3. 생성 권한은 디렉터리의 w와 x로 별도 판단한다

    • 일반 사용자가 새 이름을 만들려면 부모 디렉터리에 쓰기와 검색 권한이 필요하다. 경로 앞부분의 검색 권한, , 같은 추가 조건도 통과해야 한다.
    • 재구성 환경에서 그룹 협업이 목적이라면 2770처럼 그룹에 wx가 있는 설계를 검토한다. 이는 화면의 2755와 다른 권한 설정이므로 동일 결과로 섞지 않는다.
    bash
    stat -c "%A %a %U:%G %n" /srv/lab-share
    getfacl /srv/lab-share
    namei -l /srv/lab-share

    실습 디렉터리의 모드··상위 경로를 조회하는 재구성 예시다.

    확인 기준

    stat의 2755와 getfacl의 유효 권한을 함께 읽고, root의 생성 성공과 일반 계정의 접근 판정을 따로 기록한다.

실습에서 확인한 동작 원리

  • SetGID는 새 항목의 그룹 상속을 제어하며, 그룹의 쓰기 권한을 자동으로 추가하지 않는다.
  • id의 그룹 목록, 디렉터리 소유 그룹, 모드 비트를 같은 요청에 대입해야 접근 결과를 설명할 수 있다.

설정·출력 추가로 확인하기 15장

아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.

실습 화면 묶음 01 1장
0703 보고서 · 실습·개념 참고 화면 2원본 크기로 보기 ↗
  • 「④ 그룹 권한 확인:」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 1장
5/20 - ip/port (virtual host) · 명령·상태 출력 6원본 크기로 보기 ↗
  • 「chmod -R 옵션」 문맥에 삽입된 원본 명령·상태 출력이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 03 3장
5/22 - samba / ftp · 실습·개념 참고 화면 6원본 크기로 보기 ↗
  • 「umask」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
5/22 - samba / ftp · 실습·개념 참고 화면 7원본 크기로 보기 ↗
  • 「umask」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
5/22 - samba / ftp · 실습·개념 참고 화면 8원본 크기로 보기 ↗
  • 「umask」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 04 1장
9/16 cuckoo · 실습·개념 참고 화면 7원본 크기로 보기 ↗
  • 「실습」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 05 1장
DVWA 설치 · 실습·개념 참고 화면 2원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 06 6장
LAMP - rocky · 명령·상태 출력 16원본 크기로 보기 ↗
  • 「설명 결론부터 말씀드리면 /home/eunsoo 디렉토리와 그 하위 파일들에 대해 외부(웹)에서 접근할 수 있도록 허용하는 설정」 문맥에 삽입된 원본 명령·상태 출력이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
LAMP - rocky · 명령·상태 출력 17원본 크기로 보기 ↗
  • 「설명 결론부터 말씀드리면 /home/eunsoo 디렉토리와 그 하위 파일들에 대해 외부(웹)에서 접근할 수 있도록 허용하는 설정」 문맥에 삽입된 원본 명령·상태 출력이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
LAMP - rocky · 명령·상태 출력 18원본 크기로 보기 ↗
  • 「설명 결론부터 말씀드리면 /home/eunsoo 디렉토리와 그 하위 파일들에 대해 외부(웹)에서 접근할 수 있도록 허용하는 설정」 문맥에 삽입된 원본 명령·상태 출력이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
LAMP - rocky · 실습·개념 참고 화면 10원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
LAMP - rocky · 실습·개념 참고 화면 11원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
LAMP - rocky · 실습·개념 참고 화면 19원본 크기로 보기 ↗
  • 「설명 결론부터 말씀드리면 /home/eunsoo 디렉토리와 그 하위 파일들에 대해 외부(웹)에서 접근할 수 있도록 허용하는 설정」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 07 1장
window · 실습·개념 참고 화면 1원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 08 1장
네트워크 관리사 -  필기 · 설정·관리 화면 5원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 설정·관리 화면이다. Linux 권한·ACL·특수 권한 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서

09접근 거부를 확인하는 순서

  • 실행 계정과 그룹, 상위 경로의 통과 권한, 대상의 모드와 을 차례로 확인한다.
  • 여기에 , 읽기 전용 마운트, 서비스 자체 정책도 영향을 준다.
  • 권한 오류를 모두 동일한 문제로 취급해 전체 쓰기 권한을 주는 방식은 원인 해결이 아니다.
bash
id
ls -ld .
umask

현재 사용자··생성 마스크를 조회한다.

10요청한 권한을 실제 계정에 대입하기

  • 읽기와 쓰기는 별도의 요청으로 생각한다.
  • 일반 계정의 접근을 판정할 때 먼저 의 사용자·그룹 자격 정보와 파일 소유권을 대조한다.
  • 파일 소유자에 해당하면 소유자 항목으로 결정하며, 거기서 권한이 부족하다고 기타 사용자 항목으로 넘어가 더 넓은 권한을 얻지는 않는다.
  • 확장 이 있다면 명명 사용자 항목과 그룹 항목 및 가 판정에 포함된다.
  • 의 파일 접근에는 fsuid 같은 세부 자격 정보도 있지만 여기서는 일반 로그인 를 가정한다.
    • 예를 들어 파일 소유자가 아닌 계정 reader에 user:reader:rw-가 있고 ::r--라면 표시상 rw-여도 유효 권한은 r--다.
    • 쓰기 요청은 이 지점에서 거부된다.
  • reader가 어떤 그룹에도 속해 있다는 이유로 더 뒤의 그룹 항목을 대신 선택해 허용하지 않는다.
  • 읽기는 이 조건을 통과할 수 있지만 가 해당 도메인의 파일 읽기를 허용하는지는 별도로 확인해야 한다.
    • 상위 디렉터리의 탐색 권한도 이미 충족됐다는 조건이다.
  1. 파일 소유자가 아닌 reader가 r 권한을 요청한다. 상위 디렉터리 탐색 권한은 충족되었고, reader에 해당하는 user 이 있다고 가정한다.
  2. 요청자의 UID가 파일 소유자와 다르므로 항목으로 판정하지 않는다. user 에서 reader와 일치하는 항목을 찾는다.
  3. reader 항목이 rw-이고 가 r--이면 두 비트 집합의 교집합인 r--만 유효하다. 이 사례의 읽기는 허용되지만 쓰기는 거부된다.
  4. user 항목이 선택됐으므로 그룹·기타의 더 넓은 권한을 합치거나 거부 뒤 다른 범주로 재시도하지 않는다.
  5. 파일 접근이 완료되려면 DAC 판정뿐 아니라 적용되는 등 다른 접근 정책도 허용해야 한다.

설명과 함께 보는 보조 도식

처리 과정

명명 사용자 ACL의 유효 권한

일반 계정 reader의 읽기 요청이며 상위 디렉터리 탐색은 허용된 사례다.

전체 단계를 한 번에 읽기
  1. 01

    요청 확인

    내용 읽기에 필요한 r 권한을 판정한다.

    요청 권한
    r
  2. 02

    소유자 불일치

    파일 소유자 항목은 이 요청자의 적용 범주가 아니다.

    소유자 일치
    아니오
  3. 03

    명명 사용자 일치

    reader의 ACL 항목을 선택한다.

    항목
    rw-
  4. 04

    유효 권한 제한

    mask와 함께 보면 r만 유효하다. 쓰기라면 여기서 거부된다.

    유효 권한
    r--
  5. 05

    다른 범주로 재시도하지 않음

    그룹·기타의 더 넓은 권한을 합쳐 얻지 않는다.

    판정 범주
    명명 사용자
  6. 06

    정책까지 확인

    DAC의 읽기 허용과 SELinux 정책 허용을 모두 만족해야 한다.

    최종 조건
    DAC와 MAC 모두 허용
학습 모식도. 표시한 조건에서의 객체와 상태 변화를 설명하며 운영 환경의 모든 분기와 내부 구현은 생략한다.

11읽기·삭제·실행을 구분하는 관찰

  • 파일 내용은 읽을 수 있는데 삭제할 수 없는 경우에는 부모 디렉터리의 쓰기·탐색 권한과 를 조사한다.
    • 반대로 파일 자체가 읽기 전용이어도 부모 디렉터리에서 항목을 제거할 권한이 있으면 삭제할 수 있는 조건이 생긴다.
  • 실행 실패에서는 x 비트뿐 아니라 상위 경로, 인터프리터의 존재, noexec 마운트 같은 다른 조건도 구분해야 한다.
  • 권한 숫자 하나를 바꾸는 것으로 모든 실행 오류를 해결할 수 없다.
  • getfacl 결과의 effective 표시와 를 읽고, 실제 서비스 가 사용하는 계정과 그룹을 대조한다.
  • 터미널에서 확인한 id는 그 터미널 세션의 자격 정보이므로 다른 서비스의 자격 정보와 같다고 가정하지 않는다.
  • 생성 권한은 요청 모드와 에 영향을 받으며, 기본 이 설정된 디렉터리에서는 상속 규칙도 살펴야 한다.
  • 특권과 capabilities에 따른 예외는 일반 계정의 기본 판정 사례와 분리해 해석한다.
구성·관찰 대상확인하는 정보구분할 문제
파일 r·w내용 읽기·수정부모 디렉터리의 삭제 권한과 다름
디렉터리 w·x항목 생성·삭제·경로 통과sticky와 별도 제한 확인
·선택 범주와 유효 권한표시된 rw-가 실제 rw-인지
컨텍스트주체 도메인·대상 타입모드 비트 밖의 정책 거부
학습 확인

이해했는지 확인하기

  • 파일 수정과 부모 디렉터리의 삭제 권한을 구분한다.
  • 보조 그룹과 ACL mask까지 확인한다.
  • 특수 권한이 필요한 이유와 적용 범위를 설명한다.

함께 확인할 공식 자료