사용자에게 상위 디렉토리에 대한 쓰기 권한이 없는데 파일에서 chmod가 성공하는 이유는 무엇입니까?

사용자에게 상위 디렉토리에 대한 쓰기 권한이 없는데 파일에서 chmod가 성공하는 이유는 무엇입니까?

Linux의 파일/디렉토리 권한을 이해하려고 합니다. 사용자는 다음 명령을 사용하여 디렉터리의 파일을 나열할 수 있습니다.

cd test
ls -l 

위 명령을 실행하는 사용자에게 테스트 디렉터리의 모든 파일에 대한 읽기, 쓰기 또는 실행 권한이 없더라도 테스트 디렉터리에 대한 읽기 권한이 있으므로 해당 파일을 나열할 수 있습니다.

그러면 다음 시나리오에서 사용자 B가 자신이 소유한 파일의 권한을 변경할 수 있지만 상위 디렉터리에 대한 쓰기 권한이 없는 이유는 무엇입니까?

사용자 A는 테스트 디렉터리를 만들고 다른 사용자가 여기에 쓸 수 있도록 허용합니다.

mkdir test
chmod o+w test

사용자 B는 테스트 폴더에 파일을 생성합니다.

cd test
touch b.txt

사용자 A는 디렉터리에 대한 다른 사람의 쓰기 권한을 제거합니다.

chmod o-w test

사용자 B는 권한이 디렉터리의 일부이고 사용자에게 자신이 소유한 파일의 상위 디렉터리에 대한 쓰기 권한이 없더라도 권한을 성공적으로 변경할 수 있습니다.

chmod g-r b.txt

chmod사용자가 파일 정보(권한 등)가 포함된 디렉터리를 수정할 수 없어서 실패하지 않는 이유는 무엇입니까 ?

답변1

파일의 메타데이터(권한, 소유권, 타임스탬프 등)를 변경하면 디렉터리가 변경되는 것이 아니라 파일의 inode가 변경됩니다. 이를 위해서는 x디렉터리에 대한 권한(파일에 액세스하기 위해)과 파일의 소유권(파일을 소유한 사용자만 권한을 변경할 수 있음)이 필요합니다.

파일이 가질 수 있다는 것을 기억한다면 직관적이라고 생각합니다.하드 링크여러 디렉터리에 있습니다. 이 디렉토리에는 inode에 대한 테이블 매핑 파일 이름이 포함되어 있습니다. 파일이 여러 디렉터리에서 여러 이름으로 연결되어 있는 경우에도 여전히 권한, 소유권 등이 포함된 inode입니다. 이는 파일의 메타데이터가 디렉터리가 아닌 inode에 있음을 나타냅니다.

파일 생성, 이름 바꾸기, 이동 또는 삭제에는 디렉터리 수정이 포함되므로 해당 디렉터리에 대한 쓰기 권한이 필요합니다.

관련 정보