setuid, setruid, seteuid, setreuid oder setuidx-Subroutine
Zweck
Legt die Prozessbenutzer-IDs fest.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <unistd.h> uid_t UID;
uid_t RUID;
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;Beschreibung
Die Subroutinen setuid, setruid, seteuidund setreuid setzen die Prozessbenutzer-IDs zurück. Die folgende Semantik wird unterstützt:
| Element | Beschreibung |
|---|---|
| setuid | Wenn die effektive Benutzer-ID des Prozesses der Rootbenutzer ist, werden die realen, effektiven und gespeicherten Benutzer-IDs des Prozesses auf den Parameter UID gesetzt. Andernfalls wird die effektive Benutzer-ID des Prozesses zurückgesetzt, wenn der Parameter UID entweder die aktuelle reale oder die gespeicherte Benutzer-ID angibt. |
| seteuid | Die effektive Benutzer-ID des Prozesses wird zurückgesetzt, wenn der Parameter UID der aktuellen realen oder gespeicherten Benutzer-ID entspricht oder wenn die effektive Benutzer-ID des Prozesses der Rootbenutzer ist. |
| setruid | Der Fehlercode EPERM wird immer zurückgegeben. Prozesse können nicht nur ihre realen Benutzer-IDs zurücksetzen. |
| setreuid | Für die Parameter RUID und EUID gibt es zwei Möglichkeiten:
|
| setuidx | Die Subroutine setuidx ändert die Berechtigungen des Prozesses nicht, nachdem die Benutzer-ID des Prozesses geändert wurde. Verwenden Sie zum Ändern der Berechtigungen und der Benutzer-ID eines Prozesses die Subroutine setpriv und die Subroutine setuidx zusammen. Der Parameter which kann einen der folgenden Werte haben:
|
Die Parameter reale und effektive Benutzerkennung können den Wert -1 haben. Wenn der Wert -1 ist, wird der aktuelle Wert für den UID-Parameter auf den entsprechenden aktuellen UID-Parameter des Prozesses gesetzt.
Das Betriebssystem unterstützt keine Shell-Scripts setuid oder setgid (setgid, setrgid, setegid, setregid oder setgidx Subroutine).
Diese Subroutinen sind Teil von Base Operating System (BOS) Runtime.
Parameter
| Element | Beschreibung |
|---|---|
| UID | Gibt die Benutzer-ID an, die festgelegt wird |
| euid | Gibt die effektive Benutzer-ID an, die festgelegt werden soll |
| ruid | Gibt die reale Benutzer-ID an, die festgelegt wird. |
| which | Gibt an, welche Benutzer-ID-Werte festgelegt werden sollen |
Rückgabewerte
Nach erfolgreicher Ausführung geben die Subroutinen setuid, seteuid, setreuidund setuidx den Wert 0 zurück. Andernfalls wird ein Wert von -1 zurückgegeben und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.
Fehlercodes
Die Subroutinen setuid, seteuid, setreuidund setuidx sind nicht erfolgreich, wenn eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| EINVAL | Der Wert des Parameters UID oder EUID ist ungültig. |
| EPERM | Der Prozess verfügt nicht über die entsprechenden Berechtigungen und die Parameter UID und EUID sind nicht gleich den realen oder gespeicherten Benutzer-IDs des Prozesses. |
Beispiele
#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);
}