setuid, setruid, seteuid, setreuid ou setuidx Subroutine

Objectif

Définit les ID utilisateur de processus.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

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

Descriptif

Les sous-routines setuid, setruid, seteuidet setreuid réinitialisent les ID utilisateur de processus. Les sémantiques suivantes sont prises en charge:

Article Descriptif
bit ID utilisateur Si l'ID utilisateur effectif du processus est l'utilisateur root, les ID utilisateur réels, effectifs et sauvegardés du processus sont définis sur la valeur du paramètre UID . Sinon, l'ID utilisateur effectif du processus est réinitialisé si le paramètre UID indique l'ID utilisateur réel ou sauvegardé en cours.
seteuid L'ID utilisateur effectif du processus est réinitialisé si le paramètre UID est égal à l'ID utilisateur réel ou sauvegardé en cours ou si l'ID utilisateur effectif du processus est l'utilisateur root.
ID de passerelle Le code d'erreur EPERM est toujours renvoyé. Les processus ne peuvent pas réinitialiser uniquement leurs ID utilisateur réels.
setreuid Les paramètres RUID et EUID peuvent avoir les deux possibilités suivantes:
RUID ! = IDUE
Si le paramètre EUID indique les ID utilisateur réels ou enregistrés du processus, l'ID utilisateur effectif du processus est défini sur le paramètre EUID . Sinon, le code d'erreur EPERM est renvoyé.
RUID== IDUE
Si l'ID utilisateur effectif du processus est l'utilisateur root, les ID utilisateur réels et effectifs du processus sont définis sur le paramètre EUID . Sinon, le code d'erreur EPERM est renvoyé.
Si l'ID utilisateur réel et l'ID utilisateur effectif sont modifiés, l'ID utilisateur sauvegardé est défini sur le nouvel ID utilisateur effectif. Notez que cette modification entraîne une perte des privilèges d'origine.
Setuidx La sous-routine setuidx ne modifie pas les privilèges du processus une fois que l'ID utilisateur du processus a été modifié. Pour modifier les privilèges et l'ID utilisateur d'un processus, utilisez conjointement la sous-routine setpriv et la sous-routine setuidx .
Le paramètre qui peut avoir l'une des valeurs suivantes:
ID_EN VIGUEUR
UID doit être l'ID utilisateur réel ou sauvegardé. L'ID utilisateur effectif du processus en cours sera défini sur UID.
ID_EFFECTIVE | ID_REAL
L'appelant doit disposer des privilèges appropriés. L'ID utilisateur réel et effectif du processus en cours sera défini sur UID.
ID_EFFECTIVE | ID_REAL | ID_SAVED
L'appelant doit disposer des privilèges appropriés. L'ID utilisateur réel, effectif et enregistré pour le processus en cours sera défini sur UID.
ID_LOGIN
L'appelant doit disposer des privilèges appropriés. L'ID utilisateur de connexion pour le processus en cours sera défini sur UID.

Les paramètres d'identification de l'utilisateur réel et effectif peuvent avoir une valeur de -1 Si la valeur est -1, la valeur réelle du paramètre UID est fixée à la valeur actuelle du paramètre UID du processus.

Le système d'exploitation ne prend pas en charge les scripts shell setuid ou setgid (setgid, setrgid, setegid, setregid ou setgidx Subroutine).

Ces sous-routines font partie de l'environnement d'exécution du système d'exploitation de base (BOS).

Paramètres

Article Descriptif
UID Indique l'ID utilisateur à définir.
euid Indique l'ID utilisateur effectif à définir.
ruid Indique l'ID utilisateur réel à définir.
qui Indique les valeurs d'ID utilisateur à définir.

Valeurs renvoyées

Une fois l'opération terminée, les sous-routines setuid, seteuid, setreuidet setuidx renvoient la valeur 0. Dans le cas contraire, la valeur -1 est renvoyée et la variable globale errno est définie pour indiquer l'erreur.

Codes d'erreur

Les sous-routines setuid, seteuid, setreuidet setuidx échouent si l'une des conditions suivantes est vérifiée:

Article Descriptif
EINVAL La valeur du paramètre UID ou EUID n'est pas valide.
EPERM Le processus ne dispose pas des privilèges appropriés et les paramètres UID et EUID ne sont pas égaux aux ID utilisateur réels ou sauvegardés du processus.

Exemples

L'exemple suivant illustre l'utilisation conjointe des sous-routines setuidx et 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);
}