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> 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;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:
|
| 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:
|
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
#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);
}