setuid, setruid, seteuid, setreuid 또는 setuidx 서브루틴

용도

프로세스 사용자 ID를 설정합니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

#include <unistd.h>
int setuid (UID)
uid_t  UID;
int setruid (RUID)
uid_t  RUID;
int seteuid (EUID)
uid_t  EUID;
int setreuid (RUID, EUID)
uid_t RUID;
uid_t EUID;
#include <unistd.h>
#include <sys/id.h>
int setuidx (which, UID)
int which;
uid_t UID;

설명

Setuid, setruid, seteuidsetreuid 서브루틴은 프로세스 사용자 ID를 재설정합니다. 다음과 같은 시맨틱이 지원됩니다:

항목 설명
setuid 프로세스의 유효 사용자 ID가 루트 사용자이면 프로세스의 실제, 유효 및 저장된 사용자 ID가 UID 매개변수의 값으로 설정됩니다. 그렇지 않으면 UID 매개변수가 현재 실제 또는 저장된 사용자 ID를 지정하는 경우 프로세스 유효 사용자 ID가 재설정됩니다.
seteuid UID 매개변수가 현재 실제 또는 저장된 사용자 ID와 같거나 프로세스의 유효 사용자 ID가 루트 사용자인 경우 프로세스 유효 사용자 ID가 재설정됩니다.
setruid EPERM 오류 코드는 항상 반환됩니다. 프로세스는 실제 사용자 ID만 재설정할 수 없습니다.
setreuid RUIDEUID 매개변수는 다음 두 가지 가능성을 가질 수 있습니다:
RUID!= EUID
EUID 매개변수가 프로세스의 실제 또는 저장된 사용자 ID를 지정하는 경우 프로세스 유효 사용자 ID는 EUID 매개변수로 설정됩니다. 그렇지 않으면 EPERM 오류 코드가 반환됩니다.
RUID== EUID
프로세스 유효 사용자 ID가 루트 사용자이면 프로세스의 실제 및 유효 사용자 ID가 EUID 매개변수로 설정됩니다. 그렇지 않으면 EPERM 오류 코드가 반환됩니다.
실제 사용자 아이디와 유효 사용자 아이디가 모두 변경된 경우 저장된 사용자 아이디는 새로운 유효 사용자 아이디로 설정됩니다. 이 변경으로 인해 원래 권한이 손실된다는 점에 유의하세요.
setuidx 프로세스의 사용자 ID가 수정된 후에는 setuidx 서브루틴이 프로세스의 권한을 수정하지 않습니다. 프로세스의 권한과 사용자 ID를 수정하려면 setpriv 서브루틴과 setuidx 서브루틴을 함께 사용하세요.
어떤 매개변수는 다음 값 중 하나를 가질 수 있습니다:
ID_EFFECTIVE
UID는 실제 사용자 아이디이거나 저장된 사용자 아이디여야 합니다. 현재 프로세스의 유효 사용자 ID가 UID로 설정됩니다.
ID_EFFECTIVE|ID_REAL
호출자는 적절한 권한이 있어야 합니다. 현재 프로세스의 실제 유효 사용자 ID는 UID로 설정됩니다.
ID_EFFECTIVE|ID_REAL|ID_SAVED
호출자는 적절한 권한이 있어야 합니다. 현재 프로세스에 대한 실제 유효하고 저장된 사용자 ID가 UID로 설정됩니다.
ID_LOGIN
호출자는 적절한 권한이 있어야 합니다. 현재 프로세스의 로그인 사용자 ID가 UID로 설정됩니다.

실제 및 유효 사용자 ID 매개변수의 값은 -1 수 있습니다. 값이 -1 UID 매개 변수의 실제 값이 프로세스의 현재 UID 매개 변수에 해당하는 값으로 설정됩니다.

운영 체제에서 ' setuid ' 또는 ' setgid (setgid, setrgid, setegid, setregid 또는 setgidx 서브루틴) 셸 스크립트를 지원하지 않습니다.

이러한 서브루틴은 기본 운영 체제(BOS) 런타임의 일부입니다.

매개변수

항목 설명
UID 설정할 사용자 ID를 지정합니다.
euid 설정할 유효 사용자 ID를 지정합니다.
ruid 설정할 실제 사용자 ID를 지정합니다.
which 설정할 사용자 ID 값을 지정합니다.

리턴 값

성공적으로 완료되면 setuid, seteuid, setreuidsetuidx 서브루틴은 0 값을 반환합니다. 그렇지 않으면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.

오류 코드

다음 중 하나라도 참이면 setuid, seteuid, setreuidsetuidx 서브루틴은 실패합니다:

항목 설명
EINVAL UID 또는 EUID 매개변수 값이 유효하지 않습니다.
EPERM 프로세스에 적절한 권한이 없으며 UIDEUID 매개 변수가 프로세스의 실제 또는 저장된 사용자 ID와 같지 않습니다.

다음 예는 setuidxsetpriv 서브루틴을 함께 사용하는 방법을 보여줍니다:
#include <sys/id.h>
#include <sys/priv.h>

int main(void) {

   int uid=206;
   priv_t  priv;

   bzero(priv.pv_priv, sizeof(priv.pv_priv));

   if (setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED|ID_LOGIN,uid) < 0) {
      perror("setuidx error");
      exit(errno);
   }

   if(setpriv(PRIV_SET|PRIV_INHERITED|PRIV_EFFECTIVE|PRIV_BEQUEATH,&priv,sizeof(priv_t))<0) {
      perror("setpriv error");
      exit(errno);
   }

   exit (0);
}