Linux에서 변경할 수 없는 디렉터리

Linux에서 변경할 수 없는 디렉터리

불변 비트 세트가 있는 디렉토리가 Linux에서 어떻게 작동하는지 알고 싶습니다. 파일의 경우 이는 간단하지만 디렉터리 자체가 양면(디렉토리 자체와 해당 내용)을 갖는 특성으로 인해 더욱 혼란스러워집니다. 다음과 같은 디렉터리가 있다고 가정해 보겠습니다.

${ROOT}/
    build/
    config/
    src/
    Makefile
    README

${ROOT}불변 비트를 , ${ROOT}/build, ${ROOT}/config, ${ROOT}/src및 읽기 전용으로 ${ROOT}/Makefile만드는 방식으로 사용할 수 있습니까? 자유롭게 추가 , 삭제, 수정이 ${ROOT}/README가능합니다 . 나는 이것이 or 를 실행함으로써 달성 될 수 있다고 생각 하지만, 이와 관련하여 디렉토리의 동작은 나에게 불분명합니다. 한 가지 잠재적인 사용 사례는 관리자가 다른 사용자가 프로젝트의 소스 코드, 메이크파일, 추가 정보 파일 및 최상위 디렉터리 구조를 수정하는 것을 방지하면서도 프로젝트 내에서 빌드하는 것을 허용하려는 경우입니다.${ROOT}/build${ROOT}/configchattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build ${ROOT}/configchattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build/* ${ROOT}/config/*

답변1

액세스 제어 목적으로 디렉토리의 내용은 그 안에 포함된 파일의 이름입니다. 파일을 추가, 삭제하거나 이름을 바꾸려면 디렉터리에 대한 쓰기 권한이 필요합니다. (파일 이름을 나열하려면 읽기 권한이 필요합니다.) 또한 +t디렉터리에는 고정 비트( )가 있어 파일 소유자와 디렉터리 소유자의 파일 삭제를 더욱 제한합니다. IOW, 이는 디렉토리에 대한 쓰기 액세스 권한이 있고 해당 내용을 수정할 수 있는 경우에도 다른 사람이 소유한 파일을 삭제하는 것을 방지합니다.

권한은 소유자만 변경할 수 있으며, 파일 소유자는 루트만 변경할 수 있습니다. 확장 속성을 편집하는 것은 쓰기 액세스와 관련이 있다고 생각하므로 실제로 개별적으로 비활성화할 수는 없습니다.

귀하의 요구 사항 에 관해서는 제가 올바르게 이해했다면 ${ROOT}/build파일이 . 이는 다음과 같이 간단하게 수행할 수 있습니다.${ROOT}/config${ROOT}

chmod a+rX -R ${ROOT}
chmod o-w -R ${ROOT}
chmod o+w -R ${ROOT}/build ${ROOT}/config
# chmod +t -R ${ROOT}/build ${ROOT}/config

여기서는 실제로 불변 비트를 사용할 필요가 없습니다. 이는 파일 시스템에 따라 다르며 소유자와 루트를 포함한 모든 사용자에게 동일하게 제한됩니다.

그러나 빌드가 내부적으로 발생하는 경우 ${ROOT}/build여러 사용자가 서로의 파일을 파괴하지 않고는 작업할 수 없는 문제가 여전히 남아 있습니다. 이 문제를 해결하려면 임의의 출력 디렉터리에서 빌드를 지원하도록 빌드 시스템을 수정하거나 각 사용자가 자신의 소스 트리 복사본을 만들어 홈 디렉터리에서 컴파일하도록 할 수 있습니다.

관련 정보