개발자 도구 · Chmod 계산기
umask가 새 파일 및 폴더의 기본 권한을 결정하는 방법
· 작동 방식
chmod 유닉스 개발자 워크플로
새 파일은 777에서 시작되지 않습니다. 마스크가 먼저 적용됩니다. 이 게시물은 정확한 비트 연산, 파일과 디렉터리가 다른 이유, umask 022, 027 및 077에 대한 추론 방법을 보여줍니다.
웹 서버가 읽을 수 없는 파일 — cron 작업은 nginx가 제공하는 디렉토리에 600 파일을 쓰고 아무도 chmod를 실행하지 않았습니다.
새로 관찰된 파일 모드는 이를 생성한 프로세스를 알 수 없는 경우에도 여기에서 디코딩될 수 있습니다. 600을 입력하면 계산기에 rw------: 소유자가 읽고 쓰기가 가능하며 그룹이나 기타 권한이 없습니다. 이는 제공된 결과의 비트를 설명합니다. 예약된 작업이 해당 값을 생성한 이유나 웹 프로세스가 파일을 읽을 수 있는지 여부는 확립되지 않습니다.
조항 501은 필요한 진단 제한 사항을 제공합니다. 유효한 모드는 잘못된 소유권 또는 상위 디렉토리의 실행 비트 누락과 공존할 수 있습니다. 이 페이지는 프로세스 ID나 경로 정보를 수신하지 않습니다. 600을 제안된 640와 비교하고 추가된 그룹 읽기 비트를 노출할 수 있지만 원래 모드를 umask, 서비스, 셸 또는 파일 시스템에 지정할 수는 없습니다.
새 권한의 출처 — 요청된 모드(보통 파일의 경우 666, 디렉터리의 경우 777) 및 프로세스의 umask
요청된 생성 모드 및 umask는 계산기 컨트롤이 아닌 백그라운드 입력입니다. umask 필드도 없고 파일이나 디렉터리를 생성하는 작업도 없습니다. 따라서 모든 생성 모드 예제는 외부에서 계산된 결과로 도착해야 합니다. 일단 제공되면 계산기는 값을 얻은 방법을 주장하지 않고도 해당 결과를 8진수, 기호, 행렬, 요약 및 일반 영어 형식으로 변환할 수 있습니다.
동기화된 출력이 실제보다 더 권위 있게 보일 수 있기 때문에 이 수정된 범위가 중요합니다. 640을 입력하면 rw-r----이 생성되고 소유자 읽기/write와 그룹 읽기가 식별됩니다. 페이지에서 해당 표현을 확인할 수 있습니다. 로그인 프로세스, 예약된 작업, 서비스, 컨테이너 또는 스토리지 시스템에 대한 기본값을 예측할 수 없습니다. 왜냐하면 입력 또는 구현에 이러한 컨텍스트가 나타나지 않기 때문입니다.
요청된 생성 모드 및 umask는 여기에 구현되지 않은 백그라운드 입력입니다.
AND-NOT 산술은 이 계산기 외부에서 수행되어야 합니다. 그 핵심은 하나의 완성된 정수를 받아들이고 이를 명명된 플래그로 분해합니다. 생성 마스크에 대한 두 번째 피연산자가 없습니다. 결과적으로 페이지에서는 마스크 수식을 보여주거나 비트 연산과 뺄셈을 비교하거나 결과 모드에 들어가기 전에 외부 계산이 올바르게 수행되었는지 여부를 결정할 수 없습니다.
확인할 수 있는 것은 최종 비트 패턴입니다. 다른 신뢰할 수 있는 소스가 640을 제공하는 경우 매트릭스에는 소유자 읽기 및 쓰기, 그룹 읽기 및 기타 권한이 표시되지 않습니다. 그룹 읽기를 변경하면 600이 재구축되고, 다른 읽기를 변경하면 재구축이 644됩니다. 이러한 전환은 생성 마스크 계산이나 보이지 않는 프로세스에 대한 증거로 제시하지 않고 변환기 내부의 모드 산술을 확인합니다.
AND-NOT 산술은 계산기 외부에서 수행되어야 합니다.
계산기는 결과 파일 및 디렉터리 모드를 비교할 수 있지만 둘 다 생성하지 않습니다. 644을 선택한 경우 일반 파일 설명은 파일 읽기 및 변경을 설명합니다. 대상을 디렉토리로 전환하면 해당 동사가 항목 나열, 수정 및 이름 도달로 변경됩니다. 정수는 644로 유지됩니다. 이러한 대조는 어떤 생성이 프로그램 요청의 기본값인지 주장하지 않고 대상 유형이 중요한 이유를 보여줍니다.
별도로 제공된 755 결과도 동일한 방식으로 검사할 수 있습니다. 해당 디스플레이는 rwxr-xr-x이며 모든 클래스에 대해 실행이 활성화되어 있습니다. 644은 rw-r--r--이며 전체적으로 실행이 없습니다. 이 페이지는 그 차이점을 명확하게 드러냅니다. 666, 777, 022 또는 기타 백그라운드 입력에서 값을 파생하지 않습니다. 해당 계산은 CHMOD_SOURCES에서 구현되지 않기 때문입니다.
계산기는 결과 파일 및 디렉터리 모드를 비교할 수 있지만 둘 다 생성하지 않습니다.
제한적인 마스크 예의 경우 계산을 외부로 유지하고 명시된 결과만 디코딩합니다. 관찰된 일반 파일이 640인 경우 계산기는 rw-r----을 렌더링합니다. 관찰된 디렉터리가 750이면 rwxr-x---를 렌더링합니다. 소유자는 두 가지 모두에서 더 넓은 액세스 권한을 유지하고, 그룹은 더 좁은 세트를 받고, 다른 그룹은 아무것도 받지 않습니다. 이러한 명령문은 완료된 모드에서 직접 이어집니다.
외부에서 제공되는 또 다른 쌍인 600 및 700은 원본을 주장하지 않고도 동일한 검토 방법을 표시합니다. 600 모드는 소유자에게만 파일 읽기 및 쓰기 권한을 부여합니다. 700 모드는 소유자에게만 디렉터리 읽기, 쓰기 및 실행 권한을 부여합니다. 변환기는 각 클래스와 비트를 확인할 수 있지만 자체 증거에서 두 결과를 특정 umask 설정과 일치시킬 수는 없습니다.
작업 예: 제한적인 마스크에 대해 외부에서 계산된 결과를 디코딩합니다.
프로세스가 umask를 획득하는 곳은 저장소 증거 외부에 있습니다. 계산기에는 셸, 스케줄러, 서비스 관리자, 컨테이너 또는 프로세스 환경과의 통합이 포함되어 있지 않습니다. 따라서 해당 시스템 중 하나를 모드의 원인으로 명명하면 페이지에서 관찰한 내용을 초과하게 됩니다. 다른 곳에 수집된 신뢰할 수 있는 모드로 시작한 다음 소유자, 그룹 및 기타 비트를 읽을 수 있도록 만드는 데에만 이 경로를 사용하십시오.
명령 미리보기는 증거 격차를 해소하지 않습니다. 제공된 경로를 인용하고 선택적으로 -R을 표시할 수 있지만 경로를 열거나 프로세스 설정을 읽지는 않습니다. 마찬가지로 대상 선택기는 객체 유형을 검색하는 대신 설명 언어를 변경합니다. 일관된 전환은 권한 문제의 범위를 좁힙니다. 어떤 구성 요소가 모드를 선택했는지 또는 선택이 의도적인 것인지 여부는 공개되지 않습니다.
프로세스가 umask를 획득하는 경우 저장소 증거 외부에 있습니다.
기본 ACL 및 명시적 생성 모드는 이 도구 외부에 있습니다. 데이터 모델에는 하나의 소유자 클래스, 하나의 그룹 클래스, 기타 모든 사람 및 세 개의 특수 비트가 있습니다. 명명된 ACL 항목, ACL 마스크, 생성 호출 또는 프로그램 인수가 없습니다. 따라서 계산기는 완료된 모드가 다른 액세스 제어 계층에서 발생했는지 아니면 특정 요청을 제공하는 애플리케이션에서 발생했는지 결정할 수 없습니다.
해당 메커니즘을 함께 축소하지 않고도 모드를 확인할 수 있습니다. 관찰된 8진수 값을 입력하고 9개의 기호 위치를 확인한 다음 행렬을 4자리 요약과 비교합니다. 동의하면 기존 모드가 올바르게 디코딩된 것입니다. 기본값, ACL 효과 또는 프로그램 동작에 대한 주장에는 동일한 정수에 대한 다른 해석이 아닌 작성자와 파일 시스템의 증거가 필요합니다.
기본 ACL 및 명시적 개방 모드는 이 도구 외부에 있습니다.
수정된 워크플로는 다른 곳에서 계산된 다음 여기에서 결과 모드를 검사합니다. 완성된 8진수 또는 ls 스타일 문자열을 제공하고 동기화된 필드가 각 비트를 노출하도록 합니다. 유효성 검사는 잘못된 기호 위치에 있는 잘못된 형식의 8진수와 문자를 포착합니다. umask 표현식의 유효성을 검사하거나, 생성 컨텍스트를 검색하거나, 향후 파일 또는 디렉터리가 수신할 내용을 예측하지 않습니다.
결과를 하나의 진단 레이어로 처리합니다. 디코딩된 640 또는 750은 예기치 않은 승인 또는 누락된 실행 비트를 드러낼 수 있으며, 501 문서에서는 소유권과 상위 디렉터리 순회를 별도로 확인하라고 상기시킵니다. 원인을 지정하기 전에 중지하십시오. 계산기는 제공된 값이 권한에 어떻게 매핑되는지 증명합니다. 셸, 서비스, 컨테이너, ACL 또는 파일 시스템 기본값에 대한 주장에 대한 근거를 제공하지 않습니다.