rm이 읽기 전용 파일을 삭제할 수 있는 이유는 무엇입니까?

rm이 읽기 전용 파일을 삭제할 수 있는 이유는 무엇입니까?

파일을 생성한 다음 해당 권한을 444(읽기 전용) 으로 변경하면 rm파일을 삭제할 수 있는 이유는 무엇입니까?

내가 이렇게 하면:

echo test > test.txt
chmod 444 test.txt
rm test.txt

... rm쓰기 금지된 파일을 삭제할 것인지 묻습니다 test.txt. 그런 파일은 삭제할 수 없다고 생각해서 먼저 삭제 rm해야 할 것 같습니다 . chmod +w test.txt이렇게 하면 읽기 전용인데도 묻지 않고 파일이 삭제됩니다 rm -f test.txt.rm

누구든지 명확히 할 수 있습니까? 저는 우분투 12.04/bash를 사용하고 있습니다.

답변1

모든 rm요구 사항은쓰기+실행허가부모목차. 파일 자체에 대한 권한은 관련이 없습니다.

이것은참조이는 권한 모델을 제가 할 수 있는 것보다 더 명확하게 설명합니다.

파일 데이터에 액세스하려면 읽기 권한이 필요합니다. 파일의 데이터를 수정하려면 쓰기 권한이 필요합니다. 파일(프로그램 또는 스크립트)을 실행하려면 실행 권한이 필요합니다.

디렉터리는 일반 파일과 다르게 사용되기 때문에 권한은 약간 다르게 작동합니다(그러나 약간만). 디렉터리에 있는 파일을 나열하려면 디렉터리에 대한 읽기 권한이 필요하지만 그 안에 있는 파일에 대한 읽기 권한은 필요하지 않습니다. 디렉터리에 파일을 추가하거나, 디렉터리에서 파일을 제거하거나, 파일 이름을 바꾸려면 디렉터리에 대한 쓰기 권한이 필요하지만 (아마도) 디렉터리 내의 파일에 대한 쓰기 권한은 필요하지 않습니다.. 실행 권한은 디렉터리에 적용되지 않습니다(디렉터리는 프로그램일 수도 없음). 그러나 이 권한 비트는 디렉터리에서 다른 목적으로 재사용될 수 있습니다.

디렉토리에 대한 실행 권한은 해당 디렉토리에 CD를 넣으려면(즉, 디렉토리를 현재 작업 디렉토리로 만들려면) 필요합니다.

디렉토리에 있는 파일의 "inode" 정보에 액세스하려면 디렉토리에서 실행해야 합니다. 디렉토리에 있는 파일의 inode를 읽으려면 디렉토리를 검색하는 데 필요합니다. 따라서 디렉터리에 대한 실행 권한을 검색 권한이라고도 합니다.

답변2

좋아, ire_and_curses에 대한 귀하의 의견에 따르면 실제로 하고 싶은 일은 일부 파일을 불변으로 만드는 것입니다. 명령을 사용하여 이 작업을 수행 할 수 있습니다 chattr. 예를 들어:

예를 들어

$ cd /tmp
$ touch immutable-file
$ sudo chattr +i immutable-file

$ rm -f immutable-file
rm: remove write-protected regular empty file `immutable-file'? y
rm: cannot remove `immutable-file': Operation not permitted

$ mv immutable-file someothername
mv: cannot move `immutable-file' to `someothername': Operation not permitted

$ echo foo > immutable-file 
-bash: immutable-file: Permission denied

변경할 수 없는 파일로는 아무 것도 할 수 없습니다. 파일을 삭제하거나, 편집하거나, 덮어쓰거나, 이름을 바꾸거나, chmod 또는 chown 등의 모든 작업을 수행할 수 없습니다. 당신이 할 수 있는 유일한 일은 그것을 읽고(유닉스 권한이 허용하는 경우) (루트로서) chattr -i불변 비트를 제거하는 것입니다.

모든 파일 시스템이 모든 속성을 지원하는 것은 아닙니다. AFAIK, 모든 일반적인 Linux 파일 시스템은 불변성을 지원합니다(ext2/3/4 및 xfs 포함. zfsonlinux는 현재 속성을 전혀 지원하지 않음)

답변3

이 질문에 대한 한 가지 대답은 권한이 있는 경우에만 디렉터리에서 파일을 삭제할 수 있다고 주장하는데, write이는 완전히 잘못된 것입니다! 가서 시도해 보세요! 디렉토리에 write권한만 부여하고 삭제하려고 하면 불가능합니다!
디렉터리의 파일을 삭제하려면 해당 디렉터리에 대한 write권한이 필요합니다.execute

이제 질문으로 돌아가겠습니다. 파일을 삭제하려면 디렉터리에서 해당 inode 정보를 삭제하기만 하면 됩니다. 즉, 디스크에서 해당 파일을 삭제 rm하는 것이 아닙니다 . shredding파일의 inode 정보가 액세스할 수 없는 디렉토리에 없으면(상위 디렉토리에 나열되지 않아 볼 수 없기 때문이기도 함), 즉삭제됨당신을 위한.
따라서 디렉터리에서 파일을 삭제하려면 해당 디렉터리에 대한 권한만 있으면 됩니다. 파일에 대한 권한은 관련이 없습니다.

관련 정보