NOMBRE¶
setuid - establece la identidad del usuario
SINOPSIS¶
#include <sys/types.h>
#include <unistd.h>
int setuid(uid_t uid);
DESCRIPCIÓN¶
setuid establece el UID efectivo del proceso en curso. Si el UID efectivo
de quien llama a esta rutina es root, también se establecen los
identificadores de usuario real y salvado.
Bajo Linux,
setuid está implementado como la versión POSIX con
la característica _POSIX_SAVED_IDS. Esto permite que un programa SUID
(distinto de root) renuncie a todos sus privilegios de usuario, haga
algún trabajo no privilegiado, y luego recupere su ID de usuario efectivo
original de una manera segura.
Si el usuario es root o si el programa es SUID a root, deben tomarse
precauciones especiales. La función
setuid comprueba el UID
efectivo de quien la llama y si es el súper-usuario, todos los IDs
relacionados con el proceso se ponen a
uid. Después de esto, es
imposible para el programa recuperar sus privilegios de root.
Así, un programa SUID a root que desea temporalmente renunciar a sus
provilegios de root, asumir la identidad de un usuario no-root y luego
recuperar sus privilegios de root no puede emplear
setuid. Esto se
puede hacer con la llamada (no POSIX, BSD)
seteuid.
VALOR DEVUELTO¶
En caso de éxito, se devuelve cero. En caso de error, se devuelve -1, y se
pone un valor apropiado en
errno.
ERRORES¶
- EPERM
- El usuario no es el súper-usuario, y uid no
concuerda con el ID de usuario real ni guardado del proceso
invocador.
SVr4, SVID, POSIX.1. No muy compatible con la llamada de 4.4BSD, que establece
todos los IDs de usuario: real, salvado y efectivo. SVr4 documenta una
condición de error adicional, EINVAL.
OBSREVACIONES ESPECÍFICAS DE LINUX¶
Linux posee el concepto de UID de sistema de ficheros, normalmente igual al UID
efectivo. La llamada a
setuid también establece el UID de sistema
de ficheros del proceso en curso. Vea
setfsuid(2).
Si
uid es diferente del uid efectivo antiguo, al proceso se le
prohibirá dejar volcados de memoria.
VÉASE TAMBIÉN¶
getuid(2),
setreuid(2),
seteuid(2),
setfsuid(2)