권한이 없는 사용자가 실행 파일의 소유자 또는 그룹을 변경할 때 S_ISUID 및 S_ISGID 모드 비트가 지워지는 이유는 무엇입니까?

권한이 없는 사용자가 실행 파일의 소유자 또는 그룹을 변경할 때 S_ISUID 및 S_ISGID 모드 비트가 지워지는 이유는 무엇입니까?

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

관련 정보