setuid, setruid, seteuid, setreuid 또는 setuidx 서브루틴
용도
프로세스 사용자 ID를 설정합니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#include <unistd.h> int setuid (UID)
uid_t UID;
uid_t UID;
int setruid (RUID)
uid_t RUID;
uid_t RUID;
int seteuid (EUID)
uid_t 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, seteuid 및 setreuid 서브루틴은 프로세스 사용자 ID를 재설정합니다. 다음과 같은 시맨틱이 지원됩니다:
| 항목 | 설명 |
|---|---|
| setuid | 프로세스의 유효 사용자 ID가 루트 사용자이면 프로세스의 실제, 유효 및 저장된 사용자 ID가 UID 매개변수의 값으로 설정됩니다. 그렇지 않으면 UID 매개변수가 현재 실제 또는 저장된 사용자 ID를 지정하는 경우 프로세스 유효 사용자 ID가 재설정됩니다. |
| seteuid | UID 매개변수가 현재 실제 또는 저장된 사용자 ID와 같거나 프로세스의 유효 사용자 ID가 루트 사용자인 경우 프로세스 유효 사용자 ID가 재설정됩니다. |
| setruid | EPERM 오류 코드는 항상 반환됩니다. 프로세스는 실제 사용자 ID만 재설정할 수 없습니다. |
| setreuid | RUID 및 EUID 매개변수는 다음 두 가지 가능성을 가질 수 있습니다:
|
| setuidx | 프로세스의 사용자 ID가 수정된 후에는 setuidx 서브루틴이 프로세스의 권한을 수정하지 않습니다. 프로세스의 권한과 사용자 ID를 수정하려면 setpriv 서브루틴과 setuidx 서브루틴을 함께 사용하세요. 어떤 매개변수는 다음 값 중 하나를 가질 수 있습니다:
|
실제 및 유효 사용자 ID 매개변수의 값은 -1 수 있습니다. 값이 -1 UID 매개 변수의 실제 값이 프로세스의 현재 UID 매개 변수에 해당하는 값으로 설정됩니다.
운영 체제에서 ' setuid ' 또는 ' setgid (setgid, setrgid, setegid, setregid 또는 setgidx 서브루틴) 셸 스크립트를 지원하지 않습니다.
이러한 서브루틴은 기본 운영 체제(BOS) 런타임의 일부입니다.
매개변수
| 항목 | 설명 |
|---|---|
| UID | 설정할 사용자 ID를 지정합니다. |
| euid | 설정할 유효 사용자 ID를 지정합니다. |
| ruid | 설정할 실제 사용자 ID를 지정합니다. |
| which | 설정할 사용자 ID 값을 지정합니다. |
리턴 값
성공적으로 완료되면 setuid, seteuid, setreuid 및 setuidx 서브루틴은 0 값을 반환합니다. 그렇지 않으면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.
오류 코드
다음 중 하나라도 참이면 setuid, seteuid, setreuid 및 setuidx 서브루틴은 실패합니다:
| 항목 | 설명 |
|---|---|
| EINVAL | UID 또는 EUID 매개변수 값이 유효하지 않습니다. |
| EPERM | 프로세스에 적절한 권한이 없으며 UID 및 EUID 매개 변수가 프로세스의 실제 또는 저장된 사용자 ID와 같지 않습니다. |
예
다음 예는 setuidx 및 setpriv 서브루틴을 함께 사용하는 방법을 보여줍니다:
#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);
}