루트가 아닌 사용자가 루트로 작성된 파일을 삭제할 수있는 이유는 무엇입니까?


24

루트가 아닌 사용자 "joshua"가 주어지면 루트로 joshua의 홈 디렉토리 (/ home / johsua /)에 "foo"라는 파일을 작성했습니다. 다음과 같이 보입니다 :

-rw-r--r--  1 root   root       0 12-19 21:00 foo

joshua로 삭제하면 성공적으로 삭제할 수 있습니다.

Joshua에게는 삭제 권한이 충분하지 않을 것으로 예상됩니다. 일종의 '권한 상속'입니까? 내 플랫폼은 데비안 5.0.7입니다.


1) 이것은 주제가 아닙니다. 2) sudo다른 권한 상승 없이 루트가 아닌 사용자로 삭제할 수 있다고 의심합니다 . 아마도 무언가를 간과했을 것입니다.
DarkDust

16
@DarkDust 파일은 상위 디렉토리의 항목입니다. 디렉토리에 대한 쓰기 권한이있는 경우 파일을 소유 한 사람에 관계없이 디렉토리에서 파일을 제거 할 수 있습니다 (스티커 비트가 디렉토리에 설정되어 있지 않은 경우)
nos

@ nos : 바보 같은, 당신 말이 맞아요.
DarkDust

1
상위 디렉토리의 항목은 파일에 대한 참조입니다. 파일 자체가 아닙니다. (그렇지 않으면, 어떻게 파일이 하나 이상의 디렉토리에 하드 링크 될 수 있습니까?)
David Schwartz

@DavidSchwartz는 사실이지만 디렉토리에서 파일을 삭제하는 것은 디렉토리 구조에서 참조를 제거하는 것입니다.
mc0e

답변:


43

사용자는 파일을 삭제하지 않았고 시스템은 삭제했습니다. 사용자는 단지 자신의 디렉토리에서 파일을 제거했습니다. 참조 카운트가 0으로 떨어지기 때문에 시스템이 파일을 삭제했습니다. 디렉토리에서 파일을 제거하는 사용자가 참조 횟수를 0으로 떨어 뜨린 경우가 있습니다. 파일이 다른 디렉토리에 하드 링크되어 있거나 파일에 대한 핸들이 열려 있으면 삭제되지 않았을 것입니다.

참조 횟수가 0으로 떨어지면 시스템이 파일을 자동으로 삭제합니다. 파일의 소유자는 중요하지 않습니다. 파일 소유자 이외의 사람이 파일의 참조 카운트를 0으로 떨어 뜨릴 수있는 방법은 여러 가지가 있습니다.

디렉토리에서 파일을 제거하면 ( '링크 해제') 디렉토리에서 작업합니다. 파일을 연결 해제하면 참조 횟수가 줄어 듭니다.

마찬가지로 소유자 이외의 사용자는 디렉토리에 링크되지 않은 파일에 대한 마지막 핸들을 닫을 수 있습니다. 해당 핸들을 닫으면 파일도 삭제됩니다. 다시 참조 카운트가 0으로 떨어집니다.


1
물론 rm명령 rm은 "제거"의 약어 이기 때문에 물을 약간 흐리게 하고 사용자는 rm"삭제"조작으로 생각하도록 훈련됩니다 . 많은 사용자들이 rm실제로 수행하는 작업이 "삭제"가 아니라 "연결 해제"라는 것을 모르면서 매일 사용 합니다. 결과적으로, 많은 사용자가이 동작이 처음 발생할 때이 동작을 발견 한 것은 놀라운 일이 아닙니다.
Daniel Pryden

많은 사람들에게 확실히 놀랍습니다. 최소한 rm명령은 실제로 디렉토리에서 파일이나 디렉토리를 제거합니다. del파일을 삭제하는 데 사용되었지만 최신 Windows 시스템 (NT4 이후)에서는 연결 해제 작업이기 때문에 명령이 호출되는 Windows에서는 더 나쁩니다 .
David Schwartz

"사용자가 파일을 삭제하지 않고 시스템이 삭제했습니다"이것은 의미가 없습니다. "시스템"은 권한이없는 사용자 대신 권한있는 액세스가 필요한 변경을 수행 할 수 없습니다. 따라서이 답변은 현재 디렉토리가 루트 만 소유하고 쓸 수있는 경우 동일한 사용자가 동일한 작업을 수행 할 수없는 이유를 설명하지 못합니다. @kerrek의 아래 답변은 정확하고 간결합니다.
FractalSpace

@FractalSpace 응? 시스템은 권한이없는 사용자 대신 권한있는 액세스가 필요한 변경을 할 수 있으며 항상 그렇게합니다. 예를 들어, 디스크의 바이트를 변경하려면 권한있는 액세스가 필요합니다. 그러나 사용자가 파일을 수정할 수있는 경우 사용자는 해당 바이트 자체를 수정할 권한이 없어도 디스크의 일부 바이트를 수정하기로 결정합니다. 사용자는 커널 메모리를 수정할 수 없지만 커널은 사용자 대신 실행할 수 있습니다. 시스템은 사용자가 직접 권한을 부여 할 수없는 작업을 수행하도록 결정하여 작동합니다.
David Schwartz

예. 그리고 결국 모든 것은 "시스템"에 의해 이루어집니다. 그러나 특정 "사용자 공간"에 대해 엄격한 권한 분리 규칙을 설정하기 전에는 아닙니다. 이 시나리오에서 예를 들어 "시스템"은 일반적인 규칙으로 동작하지 않지만 "부모 디렉토리"에 설정된 권한을 따릅니다. OP 문제 에서이 문제의 핵심 부분.
FractalSpace

0

첫 번째 추측 : 파일을 삭제하려면 포함 폴더에 대한 쓰기 권한이 필요합니다. 따라서 / home / johsua / foo / bar를 시도하고 755를 foo에, 644를 bar에 부여하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.