내 메일 파일을 정리된 버전으로 교체해야 했습니다(이 시스템에서 수행되는 모든 메일은 모니터 cron 작업이므로 'n'일이 지난 메일을 삭제하지 않을 이유가 없습니다).
파일에는 내 사용자 계정에 대한 읽기/쓰기 권한이 있으며 다른 사용자나 그룹에 대한 권한은 없습니다. setguid 비트가 /var/spool/mail에 설정되어 있으므로 그룹 소유권은 메일 그룹입니다.
나는 메일 그룹의 회원이 아니었습니다.
drwxrwsr-x 2 루트 메일 4096 9월 2일 15:17 . drwxr-xr-x 14 루트 루트 4096 5월 10일 09:27 .. -rw--------- 1 myuser 메일 219722 9월 2일 04:56 myuser
메일 그룹의 구성원이 되기 전까지는 이 파일을 이동하거나 삭제할 수 없었습니다.
내 질문은 '왜?'입니다. 이 파일을 읽고 쓸 수 있는 권한이 있는 것으로 보이는 나를 왜 이동 및 삭제 권한도 부여하지 않은 그룹의 구성원으로 만들까요?
답변1
그 이유는 rm
, mv
(및 유사)에는 디렉토리 구조 수정이 포함되며 해당 디렉토리에 대한 쓰기( ) 권한이 없으면 w
그렇게 할 수 없기 때문입니다.
해당 파일의 권한과는 무관하며, 상위 디렉터리에 대한 충분한 권한만 있으면 됩니다. 이 rm
작업은 실제로 unlink(2)
디렉토리의 파일-inode 매핑에서 파일의 링크를 해제하는 시스템 호출입니다. mv
동일한 파일 시스템 내에서 -ing하는 동안 rename(2)
새 디렉토리에 파일의 inode를 매핑하는 명령이 실행됩니다.
보시다시피 이러한 모든 작업에는 파일 자체 권한에 관계없이 상위 디렉터리를 수정해야 하므로 w
새 파일 이름 바꾸기/제거/생성에는 디렉터리에 대한 권한이 필요합니다.
이제 SETGID 비트가 디렉터리에 설정되면 해당 디렉터리의 모든 파일은 해당 디렉터리의 소유자 그룹인 동일한 그룹이 소유하게 됩니다.
귀하의 경우 디렉토리는 STDGID 비트가 설정된 권한을 /var/spool/mail
가진 의 소유입니다 . 그러면 이 디렉토리 아래의 모든 파일이 동일한 그룹인 의 소유가 됩니다 .root:mail
775
mail
따라서 현재로서는 이름을 바꾸거나 제거하려면 디렉터리 myfile
에 대한 충분한 권한이 있거나 그룹의 구성원이 되어야 합니다 . 앞서 설명한 대로 권한은 여기에서 관련이 없습니다./var/spool/mail
root
mail
myfile
답변2
파일을 이동하거나 삭제할 때 중요한 권한은 상위 디렉터리의 권한이기 때문이라고 생각합니다. 파일을 이동한다는 것은 파일의 복사본을 만들고 원본을 삭제하는 것을 의미하므로 이를 수행하려면 디렉터리에 대한 올바른 권한이 필요합니다. 이 경우 사용자를 메일 그룹에 추가하면 필요한 권한이 부여됩니다.