개발자 도구 · Chmod 계산기
chmod가 표현할 수 없는 것: 기능, 불변 파일 및 MAC
· 배경
chmod 유닉스 액세스 제어
모드 비트는 작업 성공 여부를 결정하는 여러 계층 중 하나입니다. 이 게시물에서는 다른 기능(파일 기능, chattr 플래그, SELinux 및 AppArmor)과 각 기능의 거부를 인식하는 방법을 소개합니다.
루트는 644 파일을 쓸 수 없습니다. 모드는 yes이고 chmod는 아무것도 변경하지 않으며 오류가 지속됩니다.
모드는 작업이 여전히 실패하는 동안 작업을 허용할 수 있습니다. 계산기는 644을 rw-r--r--로 디코딩합니다. 즉, 소유자는 일반 파일을 읽고 수정할 수 있고 그룹과 다른 사람은 읽을 수 있습니다. 그러면 제공된 기존 비트만 정산됩니다. 이는 프로세스 소유권, 경로 ID 또는 다른 적용 계층의 부재를 증명하지 않습니다.
소스에서는 기능, 불변 속성, 필수 액세스 정책, 마운트 플래그, 네임스페이스, 시스템 호출 필터, ACL 및 소유권 등 모델링되지 않은 여러 컨트롤을 명명합니다. 모드에 다시 들어가거나 다른 chmod 명령을 생성하면 해당 모드에 대해 아무 것도 표시되지 않습니다. 먼저 8진수, 기호 및 행렬 일치를 확인합니다. 실패가 지속되면 chmod 추측을 확대하는 대신 환경에서 증거를 수집하십시오.
이 도구가 볼 수 없는 레이어에 대해서는 모드 호환 작업이 여전히 실패할 수 있습니다.
계산기는 외부 컨트롤 간의 순서를 모델링하지 않습니다. 전체 데이터 모델은 8진수 0000부터 7777까지의 정수이며 소유자, 그룹, 기타, setuid, setgid 및 고정 부울로 확장됩니다. 설명에서는 해당 값과 대상 유형을 사용합니다. 커널 결정 경로, 보안 모듈 시퀀스 또는 syscall 결과는 계산에 포함되지 않습니다.
이러한 제한으로 인해 페이지는 통제된 첫 번째 단계가 됩니다. 모드를 확인하고, 순회와 실행을 구별하고, 특수 비트 문자를 기록해 두십시오. 501 조항은 소유권을 추가하고 상위 디렉터리는 근처 검사로 실행됩니다. 그 외에도 이러한 소스는 ACL, 필수 정책, 마운트, 속성, 네임스페이스, 기능 또는 필터 간의 진단 순위를 제공하지 않습니다. 호환 모드는 질문의 범위를 좁힐 뿐입니다.
계산기는 외부 시행 계층 간의 순서를 모델링하지 않습니다.
파일 기능이 사용 가능한 증거를 벗어납니다. 구현에는 기능 이름, 데이터 구문 분석기, 검사 명령 또는 setuid와의 상호 작용 계정이 포함되어 있지 않습니다. setuid를 4000로 인코딩하고 실행 가능한 일반 파일을 설명할 수 있습니다. 이는 이 저장소가 모델링하거나 문서화하지 않은 보다 세분화된 권한 시스템과 비교되어서는 안 됩니다.
페이지가 증명하는 내용은 구체적입니다. 모드 4755은 rwsr-xr-x가 되고 요약 이름은 setuid이며 할당에는 u+s가 추가됩니다. 4644 모드는 소유자 실행이 없기 때문에 대문자 S를 사용하여 거의 항상 잘못된 조합을 노출합니다. 테스트는 이러한 모드 사실을 확립합니다. 외부 도구는 기능이 존재하는지 확인하고 액세스를 허용하거나 더 나은 설계를 제공해야 합니다.
파일 기능이 소스 세트 외부에 있습니다.
불변 속성과 추가 전용 속성도 모델에 없습니다. 계산기는 파일 시스템 속성을 읽지 않으며 이를 변경하는 명령도 인식하지 않습니다. 해당 매트릭스에는 소유자, 그룹 및 기타에 대한 rwx와 세 개의 특수 비트가 포함되어 있습니다. 따라서 표시되는 쓰기 비트는 성공적인 쓰기를 보장할 수 없으며 반복적으로 토글해도 페이지에서 관찰되지 않은 속성을 진단할 수 없습니다.
구별이 가능하도록 유지하십시오. 644이 올바르게 렌더링되면 소유자 쓰기가 기존 모드에 존재합니다. 그것은 완성된 쓰기가 아니라 표현 증거입니다. 페이지는 안전하게 인용된 표시 경로를 열지 않거나 생성된 명령을 실행하지 않습니다. 실제 오류에 충분한 비트가 수반되는 경우 관찰되지 않은 상태에 귀속시키기보다는 실제 객체와 시스템을 검사하십시오.
불변 및 추가 전용 속성이 소스 세트 외부에 있습니다.
필수 액세스 제어 컨텍스트, 프로필 및 로그는 여기에서 구문 분석되지 않습니다. 소스에서는 SELinux와 AppArmor를 계산기가 관찰할 수 없는 결정의 예로만 언급합니다. 컨텍스트 구문, 정책 의미, 로그 형식 또는 진단 명령을 제공하지 않습니다. 따라서 모드만으로는 거부를 두 시스템 모두에 돌릴 수 없습니다. 증거는 집행 환경에서 나와야 합니다.
파일 또는 디렉터리 선택기는 이 경계를 강화합니다. 실행, 나열, 생성, 삭제, 입력, 도달 등의 동사를 변경하지만 정수를 변경하거나 정책 레이블을 읽지는 않습니다. 755 프로그램과 디렉토리는 rwxr-xr-x를 공유하면서 다양한 일반 작업을 설명합니다. 두 설명 모두 필수 정책 결과를 예측하지 않으므로 확인된 모드를 유지하고 플랫폼 로그를 참조하세요.
필수 액세스 제어 컨텍스트 및 로그가 소스 세트 외부에 있습니다.
제공된 모드는 마운트 옵션을 표시할 수 없습니다. 계산기는 8진수 또는 기호 텍스트와 명령 표시에만 사용되는 선택적 경로를 허용합니다. 해당 경로를 열거나 마운트를 식별하거나 구성을 읽지 않습니다. 소스에는 읽기 전용, 실행 안 함, setuid가 없는 동작이 외부 문제로 나열되어 있지만 해당 정책을 진단하기 위한 플랫폼 세부 정보는 제공되지 않습니다.
생성된 텍스트에는 8진수 모드, 인용된 경로 및 표시된 -R 플래그가 포함될 수 있지만 파일 시스템이 요청을 수락한다는 것을 증명하는 것은 없습니다. 완벽하게 왕복하는 특수 비트 값이라도 보이지 않는 규칙에서는 효과가 없을 수 있습니다. 명령을 검토 아티팩트로 처리한 다음 변경된 권한을 요청하거나 실행이 가능해지기 전에 대상 파일 시스템을 확인하십시오.
마운트 옵션이 제공된 모드에서 검색되지 않습니다.
네임스페이스 및 syscall 필터는 모드 모델 어디에도 나타나지 않습니다. 입력에는 프로세스 ID, 컨테이너 컨텍스트, syscall 목록 또는 런타임 구성이 포함되어 있지 않습니다. 페이지에서는 프로세스가 동일한 경로를 확인하는지, 예상 개체에 도달하는지, 호출이 필터링되었는지 알 수 없습니다. 이러한 질문은 권한 트리플 내에 4, 2 및 1를 추가하는 것과 근본적으로 다릅니다.
성공적인 변환에서 런타임 메커니즘을 추론하지 마십시오. 유효성 검사에는 잘못된 8진수, 기호 길이 및 위치가 잘못된 문자가 포함됩니다. 유효한 결과는 텍스트가 표현 가능한 모드에 매핑된다는 것을 의미합니다. 실행 환경의 유효성을 검사하지 않습니다. 생성된 셸 텍스트는 비활성이므로 네임스페이스 및 필터 분석에는 이러한 소스에 없는 런타임 증거가 여전히 필요합니다.
네임스페이스 및 syscall 필터는 표시되지 않습니다.
모드가 작고 규칙 적용 또는 제외가 쉽기 때문에 모드부터 시작하세요. 값을 변환하고, 각 클래스를 검사하고, 파일을 디렉터리와 구별하고, 특수 비트 접두사를 노출합니다. 8진수, 기호, 행렬, 요약, 설명 간의 일치는 전통적인 질문을 잘 형성합니다. 독점 권한이 아닌 누락되거나 과도한 비트가 드러날 수 있습니다.
실제 시스템의 증거만 사용하여 계속합니다. 소유권, ACL, 속성, 필수 정책, 마운트, 기능, 네임스페이스, 필터 및 애플리케이션 규칙은 여기에서 검색되지 않습니다. 미리보기에서는 파일을 읽거나 변경하지 않습니다. 규정된 결론은 좁습니다. 공급 모드 산술을 로컬로 정한 다음 거부를 알지 못한 채 더 넓은 chmod 값을 순환하는 대신 외부 적용을 조사합니다.