funciones getuid() y geteuid()

Iniciado por nightcode, 30 Diciembre 2013, 23:52 PM

0 Miembros y 1 Visitante están viendo este tema.

nightcode

 Estas funciones como su propio nombre indica, obtienen el UID del usuario, en sistemas Gnu con linux. Más tarde explicare para que se suele usar.

  Echando mano del `man' vemos las estructura de la función:

Código: [Seleccionar]
#include <unistd.h>
#include <sys/types.h>

uid_t getuid(void);
uid_t geteuid(void);

  Tenemos que incluir dichas cabeceras, y como vemos la función retorna un tipo de dato desconocido (por ahora :p), y no hace falta pasarle parámetros. A menudo se suelen poner nombres que nos son desconocidos, para identificar el tipo de dato de una función concreta, por ejemplo el tipo de dato "uid_t" no es más que un entero, pero al tener ese nombre ya nos confunde :p. De ahí que hayamos puesto la cabecera "types.h".

  Ok, ¿ para que podríamos usar esto ?, primero hay que saber que es el uid (si has trabajado alguna vez en sistemas linux lo deberías saber :p). Es el identificador de usuario, un número entero que nos identifica (ejecutar `id -u <USER>' para saber tu id). Donde esta la gracia de esto, pues que el usuario root (superusuario) siempre tendrá como UID el valor 0. Con lo cual si para ejecutar unas tareas en nuestro código necesitamos que el usuario que lo haya lanzado tenga los permisos de root, podemos saber perfectamente si los tiene o no, y en caso contrario mandarle un mensaje indicándoselo.

Código: [Seleccionar]
uid_t uid;         // Declaramos el tipo de dato que contendrá el UID (es un int).
uid = getuid();    // La función retorna el ID del usuario que llamó al proceso.
if(uid != 0){      // Si no es 0 no es root.
  fprintf(stderr,"ERROR: Debes lanzar el programa como \"root\".\n");
  exit(1);
}

  La función geteuid() es parecida a la anterior solo que muestra el id del usuario "efectivo". Con la función anterior tenemos de sobra, esta se usa más para detectar escaladas de privilegios (creo recordar).

  Saludos Att: Nightcode
"Las organizaciones gastan millones de dólares en firewalls y dispositivos de seguridad, pero tiran el dinero porque ninguna de estas medidas cubre el eslabón más débil de la cadena de seguridad: la gente que usa y administra los ordenadores"