개발자 도구 · Chmod 계산기
Unix 권한 모델: 1970년대 chmod에서 POSIX 모드 비트까지
· 배경
chmod 유닉스 액세스 제어
소유자/group/others 모델은 눈에 띄게 거의 변경되지 않은 채 수십 년 동안 살아남았습니다. 이 게시물은 POSIX가 어디서 왔는지, POSIX가 표준화한 것, 그리고 여전히 대부분의 작업에 적합한 이유를 추적합니다.
2020년대 배포의 1970년대 디자인 — 모든 컨테이너와 CI 실행기는 여전히 rwx를 사용하며 그 이유를 아는 데 도움이 됩니다.
현재 배포에는 여전히 0644과 같은 모드와 rw-r--r--와 같은 기호 문자열이 있지만 이 저장소는 기록 보관소가 아닙니다. 그 증거는 12비트, 결정론적 변환, 8진수 및 기호 입력의 검증 등 구현된 표현입니다. 모든 Unix 파생 시스템에 대한 날짜, 발명자, 특허 및 청구에는 여기에 제공되지 않은 소스가 필요합니다.
따라서 계산기는 간략한 권한 모델의 현재 시제 보기를 제공합니다. 하나의 정수는 소유자, 그룹 및 기타 컨트롤과 setuid, setgid 및 고정을 구동합니다. 출력은 8진수, 기호형, 행렬 형식으로 확인할 수 있습니다. 합의는 모델의 기원, 보편성 또는 시행이 아닌 일관된 전환을 입증합니다.
현재 배포에는 수명이 긴 표기가 표시되지만 이 저장소는 기록 소스가 아닙니다.
9개의 일반 비트가 3개의 동일한 클래스를 구성합니다. 소유자, 그룹 및 기타 각각은 가중치가 4, 2 및 1인 읽기, 쓰기 및 실행 위치를 받습니다. 계산기는 뒤따르는 3개의 8진수, 9자리 기호 행, 체크박스 행렬, 파일이나 디렉터리에 대해 생성된 일반 영어 설명 등 모든 위치에서 해당 순서를 유지합니다.
640 모드는 계보 청구가 없는 구조를 보여줍니다. 소유자 6은 읽기 및 쓰기를 의미하고, 그룹 4은 읽기를 의미하며, 기타 0은 rw-r----을 생성하는 일반 권한이 없음을 의미합니다. 501 기사에 설명되어 있듯이 이는 계산 가능한 플래그입니다. 실제 소유자, 그룹 또는 프로세스를 식별하는 것은 변환 외부에 남아 있습니다.
구현된 모델에는 세 가지 클래스에 9개의 일반 비트가 있습니다.
Setuid는 4000 마스크로 구현됩니다. 일반 파일에서 렌더러는 setuid와 소유자 실행이 모두 존재할 때 s를 소유자 실행 위치에 배치합니다. 소유자 실행 없이 setuid가 있는 경우 대신 S를 배치하여 특수 비트와 그 아래의 일반 실행 비트 간의 중요한 차이를 유지합니다.
파일 설명은 소문자를 파일 소유자의 ID로 실행하는 것으로 설명하고 대문자 조합에는 실행할 것이 없는 것으로 표시합니다. 이러한 문은 이 구현의 출력을 설명합니다. 저장소는 특허 기록이나 주요 이력을 제공하지 않으므로 이 섹션에서는 메커니즘의 속성이나 도입 날짜를 밝히지 않습니다.
setuid 동작이 구현되었습니다. 특허 이력은 출처가 아닙니다
디렉토리 설명은 동일한 숫자 값을 사용하지만 일반 비트에 대해 다른 동사를 사용합니다. 읽기는 항목 목록을 작성하고, 항목 작성, 이름 변경 및 삭제에 대한 커버를 작성하고, 디렉토리에 들어가 명명된 내용에 도달하는 커버를 실행합니다. 또한 구현에서는 새로 생성된 파일이 해당 디렉토리의 그룹을 상속하도록 하는 것으로 디렉토리의 setgid를 설명합니다.
Sticky는 1000으로 표시되며 다른 실행 위치는 t 또는 T로 차지합니다. 디렉터리의 경우 도구는 공유 항목에 대한 제한된 삭제를 설명합니다. 이는 계산기가 제공하는 구현된 의미입니다. 분기 기록이나 시스템 간 계보가 설정되지 않으며 로컬 동작을 확인하기 위해 라이브 파일 시스템이 쿼리되지 않습니다.
디렉터리 특수 비트 동작은 계보 클레임 없이 설명됩니다.
소스는 모든 마스크에 직접 이름을 지정합니다. 소유자는 0400, 0200 및 0100입니다. 그룹의 경우 0040, 0020 및 0010 기타의 경우 0004, 0002 및 0001. Setuid, setgid 및 Sticky는 4000, 2000 및 1000을 추가합니다. 변환은 외부 표준에 호소하는 것이 아니라 비트 테스트 및 비트 단위 조합입니다.
입력 규칙도 마찬가지로 구체적입니다. 8진수는 선택적으로 0 또는 0o 스타일 선행 형식을 사용하여 0부터 7까지의 1~4자리 숫자를 허용합니다. 기호 입력은 9개의 위치 또는 인식된 파일 유형 문자가 있는 10개의 위치를 허용합니다. 저장소는 모든 구현이나 표준이 정확히 동일한 표면 문법을 허용한다고 설정하지 않습니다.
명명된 비트 마스크 및 변환 의미가 확인됩니다. 보편적인 표준 주장은 그렇지 않습니다.
컴팩트 모델에는 의도적인 제한이 있습니다. 하나의 소유자 클래스, 하나의 그룹 클래스 및 하나의 다른 클래스를 제공하지만 명명된 사용자 항목, 명명된 그룹 항목, ACL 마스크 또는 기본 ACL은 제공하지 않습니다. 또한 기능 세트도 없습니다. 이러한 메커니즘은 겉보기에 평범한 rwx 문자열이나 성공적인 8진수 변환에서는 추론할 수 없습니다.
명령 생성은 모델을 확장하지 않습니다. 8진수 인수 또는 명시적인 u=, g= 및 o= 절을 내보내고 필요한 경우 u+s, g+s 또는 +t를 추가합니다. 결과는 표시된 텍스트로 유지됩니다. 책임 있는 검토에서는 모드를 완전한 액세스 제어 계정으로 취급하기 전에 모든 ACL, 기능, 소유권 및 시행 증거를 별도로 수집합니다.
ACL 및 기능은 구현된 모드 모델 외부에 있습니다.
이 소스 세트에는 Windows, VMS, 계획 9 또는 기타 운영 체제 권한 기록과의 지원되는 비교가 포함되어 있지 않습니다. 그러한 서술을 생략하는 것이 기억된 대조를 사실로 제시하는 것보다 더 정확합니다. 계산기는 구현하는 모드 표현만 보여주며, 테스트를 통해 관련 없는 시스템의 발전보다는 변환 동작을 설정할 수 있습니다.
광범위한 호환성 언어에도 동일한 주의가 적용됩니다. 인식된 선행 파일 형식 문자는 9개의 권한 위치 이전에 구문 분석될 수 있지만 이는 범용 ls 형식을 증명하지 않습니다. 출력을 이 도구의 허용 표기법에 대한 정확한 판독으로 사용한 다음 이러한 소스 지원 경계를 넘어서는 동작에 대해서는 권위 있는 플랫폼 문서를 참조하세요.
기타 운영 체제 권한 내역은 소스 없이 생략됩니다.
여기서 자세히 조사해도 살아남는 것은 구현된 모델의 컴팩트함입니다. 12개의 명명된 비트는 3개의 일반 권한 클래스와 3개의 특수 플래그를 포함하며, 8진수 및 기호 보기는 동일한 정수를 다른 형식으로 노출합니다. 잘못된 숫자나 잘못 배치된 기호 문자는 자동으로 수정되지 않고 거부되어 변환 중에 오류가 표시됩니다.
역사 수업 없이도 실습을 하기에는 충분합니다. 모드를 디코딩하고, 각 클래스를 검사하고, s, S, t 또는 T가 실행 위치를 대체하는지 확인합니다. 그런 다음 증거가 멈추는 곳에서 중지합니다. 계산기는 표현과 생성된 텍스트를 설명하는 반면 소유권, 정책, 파일 시스템 동작 및 역사적 출처에는 다른 소스가 필요합니다.