개발자 도구 · Chmod 계산기
ls -l 권한을 읽고 이를 8진수 모드로 변환하는 방법
· 작동 방식
chmod 유닉스 개발자 워크플로
ls -l 시작 부분에 있는 10자 문자열은 파일 유형에 9개의 권한 비트를 더한 것입니다. 이 게시물에서는 이를 디코딩하고 특수 비트 문자를 포함하여 chmod가 원하는 8진 모드를 생성하는 방법을 보여줍니다.
-rw-r----+가 붙여진 티켓 — 사용자에게 chmod 640 또는 다른 것을 실행하라고 지시할지 여부를 알아야 합니다.
-rw-r------+와 같이 붙여넣은 문자열에는 이 구문 분석기가 허용하는 것보다 더 많은 내용이 포함되어 있습니다. 인식된 코어는 9자로 된 권한 본문이며 선택적으로 지원되는 파일 유형 문자 하나가 앞에옵니다. 뒤에 오는 플러스로 인해 입력이 너무 길어져서 거부됩니다. 해당 외부 마커를 제거하면 -rw-r------가 남게 되며 이는 640: 소유자 읽기/write, 그룹 읽기로 변환되고 기타 권한은 없습니다.
해당 변환은 긴 목록이 ACL에 사용할 수 있다는 501 기사의 경고 외에 더하기 기호가 나타내는 내용을 디코딩하지 않습니다. 계산기에는 ACL 항목이나 마스크가 없습니다. 또한 티켓의 기계, 소유자, 그룹 또는 경로를 검사하지 않습니다. 따라서 모드 640은 유효 액세스에 대한 완전한 답변이 아니라 허용된 코어가 나타내는 기본 권한 값입니다.
첫 번째 문자는 대시, d, l, c, b, p 및 s 유형이며 이것이 모드의 일부가 아닌 이유입니다.
선택적 첫 번째 문자는 권한 비트가 아닌 유형 표시로 처리됩니다. 파서는 -, d, l, b, c, p, s, D 및 ?를 인식합니다. 9개의 유효한 권한 위치 앞에 하나가 나타나면 연산을 위해 제거됩니다. 결과 소유자, 그룹 및 기타 트리플만 단독으로 8진수 값과 행렬 선택을 결정합니다.
이 동작은 동등한 입력으로 쉽게 확인할 수 있습니다. rwxr-x--- 및 -rwxr-x--- 모두 선행 대시가 모드 비트를 제공하지 않기 때문에 750을 생성합니다. 디렉터리 표시자는 동일한 본문 앞에 있어도 여전히 동일한 정수를 생성할 수 있습니다. 대상 선택기는 설명 문구를 별도로 제어하므로 유형 문자를 허용한다고 해서 브라우저가 해당 객체를 발견하거나 열었다는 의미는 아닙니다.
세 그룹의 9개 문자 — 소유자, 그룹, 기타, 항상 rwx 순서이며 꺼져 있는 각 비트에 대시가 있음
9개의 권한 위치는 소유자, 그룹 및 기타 순서로 3개의 고정된 트리플을 형성합니다. 각 트리플 내에서 읽기는 첫 번째 위치를 차지하고, 두 번째 위치를 쓰고, 세 번째 위치를 실행합니다. 대시는 해당 비트가 꺼져 있음을 의미합니다. 위치별 유효성 검사는 추측하는 대신 잘못 배치된 문자를 거부하므로 쓰기 위치의 r이 자동으로 다른 권한이 될 수 없습니다.
허용되는 각 트리플은 기사 501의 가중치에 따라 하나의 8진수로 매핑됩니다. 읽기는 4, 쓰기는 2, 실행은 1입니다. 행렬은 확인란과 동일한 플래그를 표시하고 하나가 변경되면 정수를 다시 작성합니다. 특수 문자는 실행 위치에서만 허용되며 기본 실행 상태와 함께 setuid, setgid 또는 고정을 유지합니다.
작업 예: -rwxr-x--- ~ 750 — 4, 2, 1을 각 문자에 할당하고 그룹별로 합산
선행 유형 표시를 무시하고 본문을 rwx, r-x 및 ---로 분할하여 -rwxr-x---를 변환합니다. 소유자는 4+2+1를 보유하고 있으며 7을(를) 생성합니다. 그룹에는 4+1가 있으며 5을 생성합니다. 다른 비트는 활성화된 비트가 없어 0을 생성합니다. 계산기는 750을 반환하고 일치하는 9개의 일반 권한 상자를 선택합니다.
역방향 검사는 동일한 텍스트 본문에 있어야 합니다. 750을 입력하면 기호 필드가 rwxr-x---가 됩니다. 표시된 양식에 대해 일반 파일 마커를 선택하면 -rwxr-x---가 됩니다. 할당 미리보기는 u=rwx,g=rx,o=와 같은 다른 구문입니다. 세 가지 관점 모두 하나의 고정 모드를 설명하지만 소유권과 이를 적용하는 지혜는 아직 해결되지 않았습니다.
후행 더하기 및 at 기호 — +는 ACL 항목이 있음을 의미하고 @는 macOS의 확장 속성을 의미하며 둘 다 모드의 일부가 아님을 의미합니다.
후행 더하기 및 at 기호는 개요의 메타데이터 표시이지만 구현된 사실은 더 좁습니다. 허용된 입력이 권한 본문 다음에 끝나기 때문에 이 파서는 둘 중 하나를 거부합니다. 501 조항은 ACL의 후행 플러스를 구체적으로 식별합니다. CHMOD_SOURCES는 at 기호에 대해 동등한 해석을 제공하지 않으므로 이 섹션에서는 저장소에서 지원하지 않는 운영 체제 의미를 할당하지 않습니다.
효과적인 액세스가 중요한 경우 맹목적으로 마커를 제거하지 마세요. 대신, 기본 모드 변환을 위해 허용되는 9자 또는 10자 코어를 분리하고 원래 시스템의 증거로 나머지를 조사하십시오. 계산기는 rw-r----이 640을 의미함을 표시할 수 있습니다. 추가 메타데이터를 설명하거나, 확장된 속성을 읽거나, 다른 액세스 제어 메커니즘이 사용자 또는 프로세스가 수행할 수 있는 작업을 변경하는지 여부를 확인할 수 없습니다.
후행 더하기 및 at 기호는 이 파서가 거부하는 메타데이터 마커입니다.
외부 통계 명령은 브라우저 계산기에 의해 실행되지 않습니다. 페이지에는 명령 실행기나 파일 시스템 액세스 권한이 없습니다. 해당 경로 필드는 표시용으로 인용된 chmod 텍스트를 구성하기 위해서만 존재합니다. 결과적으로 현재 모드를 가져오거나, 플랫폼별 명령 출력을 비교하거나, 붙여넣은 문자열이 특정 유틸리티에서 나온 것인지 확인할 수 없습니다. 사용자는 변환할 값을 제공해야 합니다.
신뢰할 수 있는 모드가 제공되면 브라우저는 독립적인 표현 확인을 제공합니다. 기호 코어를 입력하고 8진수 결과, 행렬, 요약 및 할당 미리보기를 비교합니다. 계약은 지원되는 형식 내에서 전사 및 산술 오류를 포착합니다. 외부 수집 명령의 유효성을 검사하거나, 소유권을 밝히거나, 표시된 권한이 텍스트가 복사된 개체에 유효하다는 것을 증명하지 않습니다.
외부 통계 명령은 브라우저 계산기에 의해 실행되지 않습니다.
ACL 디코딩은 경로 외부에 남아 있습니다. 해당 모델에는 이름이 지정된 항목이나 ACL 마스크가 없는 소유자, 그룹, 기타 및 세 개의 특수 비트가 포함되어 있습니다. Windows 권한 디코딩도 마찬가지로 없습니다. Windows ID 모델, 액세스 제어 항목 구문 또는 플랫폼 검색이 없습니다. 9개 위치의 Unix 스타일 코어는 변환될 수 있지만 그 결과로 추가 권한 시스템을 재구성할 수는 없습니다.
이 경계는 진단도 제한합니다. 충분해 보이는 기본 모드는 ACL이나 다른 정책이 관련이 없음을 입증하지 못하는 반면, 제한 모드는 가능한 모든 허가를 식별하지 않습니다. 계산기는 표시된 12개의 비트만 정산합니다. 해당 출력을 사용하여 일반 모드를 정확하게 기술한 다음 실제로 외부 권한 시스템을 노출하는 도구 및 문서에 대한 효과적인 인증에 대한 주장을 예약합니다.
ACL 및 Windows 권한 디코딩은 경로 외부에 남아 있습니다.
허용된 코어가 격리되면 ls 스타일 모드 읽기가 기계적이 됩니다. 인식된 선행 유형 문자 하나를 삭제하고 나머지 9개 위치를 소유자, 그룹 및 기타로 나누고 총 읽기 4, 2 쓰기 및 각 트리플 내에서 1 실행을 수행합니다. 계산기는 해당 변환을 수행하고 구현된 s, S, t 및 T 형식을 포함하여 위치별 문자의 유효성을 검사합니다.
입력에 비례하여 결론을 유지하십시오. 성공적인 변환은 허용된 문자열이 8진 모드, 행렬, 요약 및 생성된 할당에 일관되게 매핑된다는 것을 증명합니다. stat를 실행하거나, 경로를 검사하거나, 후행 마커를 디코딩하거나, 소유권을 식별하거나, chmod를 적용하지 않습니다. 이러한 제한은 출력을 유용하게 만듭니다. 기본 모드 산술에 대해서는 정확하고 수집한 적이 없는 증거에 대해서는 침묵합니다.