setuid, setruid, seteuid, setreuid o setuidx Subroutine

Finalidad

Establece los ID de usuario de proceso.

Biblioteca

Biblioteca C estándar (libc.a)

Sintaxis

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

Descripción

Las subrutinas setuid, setruid, seteuidy setreuid restablecen los ID de usuario de proceso. Se da soporte a la semántica siguiente:

Elemento Descripción
setuid Si el ID de usuario efectivo del proceso es el usuario root, los ID de usuario reales, efectivos y guardados del proceso se establecen en el valor del parámetro UID . De lo contrario, el ID de usuario efectivo del proceso se restablece si el parámetro UID especifica los ID de usuario reales o guardados actuales.
seteuid El ID de usuario efectivo de proceso se restablece si el parámetro UID es igual a los ID de usuario reales o guardados actuales o si el ID de usuario efectivo del proceso es el usuario root.
setruid Siempre se devuelve el código de error EPERM . Los procesos no pueden restablecer sólo sus ID de usuario reales.
setreuid Los parámetros RUID y EUID pueden tener las dos posibilidades siguientes:
RUID ! = IDUE
Si el parámetro EUID especifica los ID de usuario reales o guardados del proceso, el ID de usuario efectivo del proceso se establece en el parámetro EUID . De lo contrario, se devuelve el código de error EPERM .
RUID== IDUE
Si el ID de usuario efectivo del proceso es el usuario root, los ID de usuario real y efectivo del proceso se establecen en el parámetro EUID . De lo contrario, se devuelve el código de error EPERM .
Si se cambian tanto el ID de usuario real como el ID de usuario efectivo, el ID de usuario guardado se establece en el nuevo ID de usuario efectivo. Tenga en cuenta que este cambio da como resultado una pérdida de privilegios originales.
setuidx La subrutina setuidx no modifica los privilegios del proceso después de que se haya modificado el ID de usuario del proceso. Para modificar los privilegios y el ID de usuario de un proceso, utilice la subrutina setpriv y la subrutina setuidx juntas.
El parámetro which puede tener uno de los valores siguientes:
ID_EFECTIVO
UID debe ser el ID de usuario real o guardado. El ID de usuario efectivo para el proceso actual se establecerá en UID.
ID_EFECTIVO | ID_REAL
El invocador debe tener el privilegio adecuado. El ID de usuario real y efectivo para el proceso actual se establecerá en UID.
ID_EFECTIVO | ID_REAL | ID_SAVED
El invocador debe tener el privilegio adecuado. El ID de usuario real, efectivo y guardado para el proceso actual se establecerá en UID.
ID_XX_ENCODE_CASE_CAPS_LOCK_ON inicio de sesión
El invocador debe tener el privilegio adecuado. El ID de usuario de inicio de sesión para el proceso actual se establecerá en UID.

Los parámetros ID de usuario real y efectivo pueden tener un valor de -1. Si el valor es -1, el valor actual para el parámetro UID se establece en el parámetro UID actual correspondiente del proceso.

El sistema operativo no da soporte a los scripts de shell setuid o setgid (setgid, setrgid, setegid, setregid o setgidx Subroutine).

Estas subrutinas forman parte del tiempo de ejecución del sistema operativo base (BOS).

Parámetros

Elemento Descripción
UID Especifica el ID de usuario a establecer.
euid Especifica el ID de usuario efectivo que se debe establecer.
ruid Especifica el ID de usuario real que se debe establecer.
que Especifica qué valores de ID de usuario se deben establecer.

Valores de retorno

Al finalizar correctamente, las subrutinas setuid, seteuid, setreuidy setuidx devuelven un valor de 0. En caso contrario, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.

Códigos de error

Las subrutinas setuid, seteuid, setreuidy setuidx no son satisfactorias si se cumple alguna de las siguientes condiciones:

Elemento Descripción
EINVAL El valor del parámetro UID o EUID no es válido.
EPERM El proceso no tiene los privilegios adecuados y los parámetros UID y EUID no son iguales a los ID de usuario reales o guardados del proceso.

Ejemplos

El ejemplo siguiente muestra el uso de las subrutinas setuidx y setpriv juntas:
#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);
}