Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: k133 en Marzo 27, 2013, 10:12:11 pm

Título: Funcion getuid() y geteuid()
Publicado por: k133 en Marzo 27, 2013, 10:12:11 pm
  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).

  Ver `man getuid' para más info.
Título: Re:Funcion getuid() y geteuid()
Publicado por: JAG en Marzo 28, 2013, 01:09:14 am
Muy buen post k133... bien explicado. Te vuelvo a decir que estos post que estás creando serán de mucha ayuda a la hora de buscar info sobre estas funciones (las cuales no son muy conocidas).
Podríamos crear un post fijo en esta sección donde juntar todos estos post... ¿que me dices?
Un saludo!!
Título: Re:Funcion getuid() y geteuid()
Publicado por: k133 en Marzo 28, 2013, 11:48:05 am
Claro JAG :3, según vaya viendo nuevas funciones para mis códigos las iré poniendo aquí. Lo "malo" es que serán para linux y se que mucha gente aquí programa sobre windows :/.