나는 man
의 페이지를 읽고 있었습니다 chown
. 함수가 성공적으로 반환되면 왜 모드를 지워야 하는지 S_ISUID
이해할 수 없습니다 .S_ISGID
답변1
나는 당신이 매뉴얼 페이지에서 이것을 가리키고 있다고 생각합니다.
권한이 없는 사용자가 실행 파일의 소유자 또는 그룹을 변경하면 S_ISUID 및 S_ISGID 모드 비트가 지워집니다.
그렇다면 왜 지금은 지워졌습니까? 당신은 그들이 다음과 같은 경우에만 삭제된다는 것을 알 수 있습니다.실행 가능파일. 비트(SUID/SGID) 중 하나가 설정되면 권한이 없는 사용자가 파일의 새 소유자로 파일을 실행할 수 있기 때문입니다. 이는 엄청난 보안 위반이 될 것입니다.
답변2
내 생각엔 당신이 잘못 읽은 것 같아요 man 2 chown
:너S_ISUID
및 을 지울 필요가 없으며 S_ISGID
권한이 없는 사용자로 해당 기능을 사용하면 자동으로 지워집니다. 프로그램이 동작하는 경우 root
(Linux에서) 커널 버전에 따라 다릅니다.
비트 설정이 필요한 경우 다시 적용하면 됩니다(비트 설정을 시도하는 계정에 그렇게 할 수 있는 권한이 있다고 가정).
매뉴얼 페이지에서:
When the owner or group of an executable file are changed by an
unprivileged user the S_ISUID and S_ISGID mode bits are cleared.
POSIX does not specify whether this also should happen when root does
the chown(); the Linux behavior depends on the kernel version. In
case of a non-group-executable file (i.e., one for which the S_IXGRP
bit is not set) the S_ISGID bit indicates mandatory locking, and is
not cleared by a chown().