루트가 아닌 홈 디렉토리에서 루트가 소유 한 파일을 삭제할 수있는 이유는 무엇입니까?


40

그래서 오늘 초 서버에서 일부 유지 관리 작업을 수행했으며 홈 디렉토리에서 루트 소유의 파일을 삭제할 수 있음을 알았습니다.

샘플을 재현 할 수있었습니다.

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

내 질문은 루트가 -rw-r--r--아닌 동안 루트가 소유하고 권한을 가진 파일을 어떻게 삭제할 수 있었습니까?


6
디렉토리에 대한 쓰기 액세스 권한이 있으므로 파일을 가리키는 디렉토리의 항목을 제거 할 수 있습니다 . 파일을 반드시 삭제할 수는 없습니다. 파일에 다른 하드 링크가있을 수 있습니다.
user253751

2
재미있는 확장명 : 파일 이름을 바꾸거나 하드 링크를 만들 수도 있습니다.
user259412

11
현재 명백히 오해의 소지가 있기 때문에, 허용 대답에 대한 당신의 선택을 재고하십시오 : 당신이 하지는 디렉토리의 권한에 따라 그 안에 내용을 개미에 아무것도 .
Cthulhu

@Cthulhu 완료! 이 Q & A에 대한 모든 의견을 보내 주신 모든 분들께 감사드립니다.
Carl Bennett

답변:


34

권한, 내용 및 모든 속성은 inode의 일부입니다. 이름은 디렉토리 항목에 있습니다. 권한은 재귀 적으로 상속되지 않습니다 (Posix ACL에서 기본값을 사용하는 경우 제외).

파일을 삭제할 때 내부적으로 디렉토리 항목에서 inode 로의 하드 링크를 제거하기 만하면됩니다. 모든 하드 링크가 제거되고 inode가 사용 중이 아닌 경우 파일 시스템은 공간을 회수합니다. 파일에 설정된 권한에 관계없이 폴더에 대한 쓰기 권한 만 있으면됩니다 (변경 불가능한 ext 권한은 제외). 빈 폴더와 동일합니다.

비어 있지 않은 폴더를 삭제하면 삭제하려는 폴더와 상위 폴더에 대한 쓰기 권한이 필요합니다.


1
따라서 권한이 inode에 있거나 권한이 inode 에 대한 링크에 있으며 해당 링크 를 제거하고 있습니다 (따라서 해당 링크 만 제거되어 inode가 존재하지 않음)?
Carl Bennett

3
권한은 inode에 있습니다. 파일에 대한 하드 링크를 만들고 해당 파일에 대한 사용 권한을 변경 한 다음 원본에 대한 사용 권한을 확인하면 쉽게 확인할 수 있습니다.
Wouter Verhelst

그러나 루트에 속하는 디렉토리와 파일이 있다고 가정 해 봅시다.이 디렉토리는 사용자가 소유 한 디렉토리에 있습니다. 그런 다음 제거 할 수 없습니다.
njzk2

1
ext2, ext3 및 ext4에 고유 한 속성입니다. 예 : sudo touch test_file;sudo chattr +i test_file;rm -f test_file참조 :man chattr
미르 Vutcovici

1
불변 속성은 루트에서도 변경 사항에 대해 파일을 보호합니다.
Mircea Vutcovici

19

디렉토리를 소유 한 경우 디렉토리의 권한에 따라 디렉토리 및 그 내용을 수행 할 수 있습니다. 따라서 파일을 소유하지 않아도 파일이있는 디렉토리에 대한 읽기 / 쓰기 권한이 있으므로 파일을 계속 삭제할 수 있습니다.


46
정확히. 예를 들어 OP는 해당 루트 소유 파일을 수정할 수 없습니다. 것은이 파일을 삭제하면됩니다 되지 않은 작업 파일에 오히려 디렉토리에 대한 고려 (파일에 대한 포인터를 제거)하고의 이유 디렉토리에 대한 사용 권한이 중요.
Cthulhu

1
@Cthulhu 그래서 루트 소유 파일을 삭제하고 이름이 같은 새로운 수정 된 파일을 만들 수 있습니까?
KDEx

3
@Morgoroth 예, 가능하지만 더 이상 같은 파일이 아닙니다. 또 다른 (아마도 더 명백한) 예의 경우, 루트에 속하는 디렉토리에서 파일을 읽을 수없고 소유자 만 읽을 수있는 경우 파일을 읽을 수 없습니다.
Cthulhu

@inetknght 이것을 명확히해야합니다. 파일 자체를 엔티티로 조작하는 것을 언급하려고 노력하고 있지만 명확하지 않습니다. 예를 들어 내용을 수정할 수 없습니다. 그리고 디렉토리 권한을 능가 할 수있는 속성은 언급하지 않았습니다.
Mike S

1
@captcha vi파일을 임시 사본에 먼저 저장 한 다음 원본 파일을 삭제하고 사본의 이름을 원본 (또는 이와 유사한 이름)으로 변경하기 때문입니다.
크 툴후
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.