rm이 다른 사용자 소유권으로 파일을 삭제할 수 있는 이유는 무엇입니까?

rm이 다른 사용자 소유권으로 파일을 삭제할 수 있는 이유는 무엇입니까?

게시물에서rm이 읽기 전용 파일을 삭제할 수 있는 이유는 무엇입니까?내가 아는 한, rm파일을 삭제하려면 해당 디렉터리에 대한 쓰기 권한만 있으면 됩니다. 하지만 소유자와 그룹이 다른 파일을 쉽게 삭제할 수 있는 동작을 이해하기 어렵습니다.

나는 다음을 시도했다

mtk: 내 사용자 이름
abc: 새 사용자를 만들었습니다.

$ ls -l file
-rw-rw-r-- 1 mtk mtk       0 Aug 31 15:40 file
$ sudo chown abc file
$ sudo chgrp abc file
$ ls -l file
-rw-rw-r-- 1 abc abc       0 Aug 31 15:40 file
$ rm file
$ ls -l file
<deleted>

나는 이것이 허용되어서는 안 된다고 생각한다. 사용자는 자신이 소유한 파일만 삭제할 수 있어야 합니까? 누군가 이것이 허용되는 이유를 밝힐 수 있습니까? 이것을 피하는 방법은 무엇입니까? 상위 디렉터리에 대한 쓰기 권한만 제한하면 실수로 파일이 삭제되는 것을 방지할 수 있다고 가정할 수 있습니다.

답변1

이것이 허용되는 이유는 파일 삭제가 실제로 수행하는 작업과 관련이 있습니다. 개념적으로 rm작업은 디렉터리에서 이름 항목을 제거하는 것입니다. 이것이 파일의 이름뿐이라면 파일에 접근할 수 없게 될 수 있으므로, 그 시점에서 파일이 차지한 아이노드와 공간을 복구할 수 있다는 사실은 거의 부수적이다. 이 사실은 이 명령에 의해 호출된 시스템 호출의 이름 에서도 암시됩니다 rm(예: .unlink

그리고 디렉토리에서 이름 항목을 삭제하는 것은 기본적으로 작업입니다.이 디렉토리에, 따라서 이 디렉토리는 쓰기 권한이 필요한 디렉토리입니다.


다음 시나리오를 사용하면 마음이 더 편해질 수 있습니까? 디렉토리가 있다고 가정합니다.

/home/me    # owned and writable only by me
/home/you   # owned and writable only by you

내 소유의 파일이 있고 그 안에 두 개의 하드 링크가 있습니다.

/home/me/myfile
/home/you/myfile

/home/you/myfile처음에 하드 링크가 어떻게 거기에 도달했는지는 신경 쓰지 마십시오 . 어쩌면 root거기에 놓을 수도 있습니다.

이 예의 아이디어는 하드 링크를 삭제할 수 있어야 한다는 것입니다 /home/you/myfile. 결국엔 엉망이야당신의목차.내부에 존재하는 것과 존재하지 않는 것을 통제하는 것이 가능해야 합니다 /home/you. 삭제를 수행할 때 /home/you/myfile실제로 파일을 삭제하는 것이 아니라는 점에 유의하세요. 링크 하나만 삭제했습니다.


파일이 포함된 디렉터리에 고정 비트가 설정된 경우( 표시됨 t)ls하다파일을 삭제하려면 파일의 소유자여야 합니다(디렉토리를 소유하지 않은 경우). 고정 비트는 일반적으로 /tmp.

답변2

파일 링크를 해제하려면 파일이 있는 디렉터리에 쓸 수 있어야 합니다.

이것이 마음에 들지 않으면 chmod +t dir최신 운영 체제를 사용하는 경우 "고정" 비트(이 기능은 1986년경 SunOS에 도입됨)를 설정하여 수행할 수 있습니다.

보다 세분화된 기능을 원한다면 최신 ACL 구현(예: ZFS)을 갖춘 파일 시스템이 필요합니다. NTFS를 통한 표준 NFSv4 ACL에는 사용자별 파일별 삭제 권한과 디렉터리에 대한 "delete_child" 권한에 대한 지원이 포함됩니다.

답변3

논리는 집의 논리와 유사합니다. 주인이나 임차인은 손님이 누구인지에 관계없이 어떤 손님을 버릴지 결정합니다. 더욱이, (다른 사람의 디렉토리에 또 다른 하드 링크가 있는) 다른 집에서 환영받는 퇴거 손님은 밖에서 얼어 죽지 않을 것입니다.

관련 정보