권한 없는 사용자가 실행 파일의 소유자 또는 그룹을 변경할 때 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().

관련 정보