불변 비트 세트가 있는 디렉토리가 Linux에서 어떻게 작동하는지 알고 싶습니다. 파일의 경우 이는 간단하지만 디렉터리 자체가 양면(디렉토리 자체와 해당 내용)을 갖는 특성으로 인해 더욱 혼란스러워집니다. 다음과 같은 디렉터리가 있다고 가정해 보겠습니다.
${ROOT}/
build/
config/
src/
Makefile
README
${ROOT}
불변 비트를 , ${ROOT}/build
, ${ROOT}/config
, ${ROOT}/src
및 읽기 전용으로 ${ROOT}/Makefile
만드는 방식으로 사용할 수 있습니까? 자유롭게 추가 , 삭제, 수정이 ${ROOT}/README
가능합니다 . 나는 이것이 or 를 실행함으로써 달성 될 수 있다고 생각 하지만, 이와 관련하여 디렉토리의 동작은 나에게 불분명합니다. 한 가지 잠재적인 사용 사례는 관리자가 다른 사용자가 프로젝트의 소스 코드, 메이크파일, 추가 정보 파일 및 최상위 디렉터리 구조를 수정하는 것을 방지하면서도 프로젝트 내에서 빌드하는 것을 허용하려는 경우입니다.${ROOT}/build
${ROOT}/config
chattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build ${ROOT}/config
chattr -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
여러 사용자가 서로의 파일을 파괴하지 않고는 작업할 수 없는 문제가 여전히 남아 있습니다. 이 문제를 해결하려면 임의의 출력 디렉터리에서 빌드를 지원하도록 빌드 시스템을 수정하거나 각 사용자가 자신의 소스 트리 복사본을 만들어 홈 디렉터리에서 컴파일하도록 할 수 있습니다.