내가 읽고 있는 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().