setguid 폴더의 파일 이동 및 삭제

setguid 폴더의 파일 이동 및 삭제

내 메일 파일을 정리된 버전으로 교체해야 했습니다(이 시스템에서 수행되는 모든 메일은 모니터 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:mail775mail

따라서 현재로서는 이름을 바꾸거나 제거하려면 디렉터리 myfile에 대한 충분한 권한이 있거나 그룹의 구성원이 되어야 합니다 . 앞서 설명한 대로 권한은 여기에서 관련이 없습니다./var/spool/mailrootmailmyfile

답변2

파일을 이동하거나 삭제할 때 중요한 권한은 상위 디렉터리의 권한이기 때문이라고 생각합니다. 파일을 이동한다는 것은 파일의 복사본을 만들고 원본을 삭제하는 것을 의미하므로 이를 수행하려면 디렉터리에 대한 올바른 권한이 필요합니다. 이 경우 사용자를 메일 그룹에 추가하면 필요한 권한이 부여됩니다.

관련 정보