setuid, setruid, seteuid, setreuid oder setuidx-Subroutine

Zweck

Legt die Prozessbenutzer-IDs fest.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#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;

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:
RUID ! = EUID
Wenn der Parameter EUID entweder die reale oder die gespeicherte Benutzer-ID des Prozesses angibt, wird die effektive Benutzer-ID des Prozesses auf den Parameter EUID gesetzt. Andernfalls wird der Fehlercode EPERM zurückgegeben.
RUID== EUID
Wenn die effektive Benutzer-ID des Prozesses der Rootbenutzer ist, werden die realen und effektiven Benutzer-IDs des Prozesses auf den Parameter EUID gesetzt. Andernfalls wird der Fehlercode EPERM zurückgegeben.
Wenn sowohl die reale als auch die effektive Benutzer-ID geändert werden, wird die gespeicherte Benutzer-ID auf die neue effektive Benutzer-ID gesetzt. Beachten Sie, dass diese Änderung zu einem Verlust der ursprünglichen Berechtigungen führt.
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:
ID_EFFEKTIV
UID muss entweder die reale oder die gespeicherte Benutzer-ID sein. Die effektive Benutzer-ID für den aktuellen Prozess wird auf UIDgesetzt.
ID_EFFEKTIV | ID_REAL
Der Aufrufer muss über die entsprechende Berechtigung verfügen. Die reale und effektive Benutzer-ID für den aktuellen Prozess wird auf UIDgesetzt.
ID_EFFEKTIV | ID_REAL | ID_GESPEICHERT
Der Aufrufer muss über die entsprechende Berechtigung verfügen. Die reale, effektive und gespeicherte Benutzer-ID für den aktuellen Prozess wird auf UIDgesetzt.
ID-ANMELDUNG
Der Aufrufer muss über die entsprechende Berechtigung verfügen. Die Anmelde-Benutzer-ID für den aktuellen Prozess wird auf UIDgesetzt.

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

Das folgende Beispiel zeigt die gemeinsame Verwendung der Subroutinen setuidx und 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);
}