elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Saber si un usuario es root en linux.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Saber si un usuario es root en linux.  (Leído 16,590 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Saber si un usuario es root en linux.
« en: 28 Agosto 2012, 13:37 pm »

Bueno mi duda es: cuando te identificas como administrador en linux, tu ID cambia a 0, o pasas a formar parte del grupo de root? Es decir, bastaria con hacer esto para saber si alguien es root?:
Código
  1. #include <unistd.h>
  2.  
  3. int main()
  4. {
  5.  while(1)
  6.  {
  7.    if(!geteuid())
  8.     {
  9.      //Codigo aqui
  10.     }
  11.    else sleep(15);
  12.  }
  13. return 0;
  14. }
  15.  

O habria que hacer algo mas?

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
WIитX


Desconectado Desconectado

Mensajes: 1.026


WINTX


Ver Perfil WWW
Re: Saber si un usuario es root en linux.
« Respuesta #1 en: 28 Agosto 2012, 16:48 pm »

No entiendo bien tu pregunta, pero creo que para crear un usuario con privilegios en linux es este código.

Código:
useradd -u 0 -o -g 0 "nombre_de_usuario"


En línea

"Es más divertido hacerse pirata que unirse a la marina." (Steve Jobs)
tremolero

Desconectado Desconectado

Mensajes: 270


Ver Perfil
Re: Saber si un usuario es root en linux.
« Respuesta #2 en: 28 Agosto 2012, 16:58 pm »

yo no tengo ni idea de como se hace, pero sino me equivoco lo que el quiere saber es como puede comprobar si el usuario que esta usando es root.

Saludos...
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Saber si un usuario es root en linux.
« Respuesta #3 en: 28 Agosto 2012, 17:33 pm »

Esta bien, voy a matizar un poco la cuestion, lo que yo quiero es que el programa pueda saber cuando el usuario tiene privilegios de root, la cuestion es, ¿si yo tengo ese programa funcionando, y el usuario se loguea como root, por ejemplo para instalar actualizaciones, una llamada subsiguiente a geteuid() devolvera 0, y mi proceso obtendra privilegios de root? ¿O eso seria demasiado facil, y hay que liarla mas?
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Saber si un usuario es root en linux.
« Respuesta #4 en: 28 Agosto 2012, 18:41 pm »

¿Este codigo serviria, o es estupido hacer algo asi?

Código
  1. #include <unistd.h>
  2. #include <signal.h>
  3. #include <stdio.h>
  4.  
  5. void pass();
  6. int check_root();
  7.  
  8. int main()
  9. {
  10.  if(check_root());
  11.   {
  12.    //Codigo privilegiado.
  13.   }
  14.  else
  15.   {
  16.    sleep(30);
  17.    pass();
  18.   }
  19.  exit(0);
  20. }
  21.  
  22. void pass()
  23. {
  24. int childpid = fork();
  25.  if(childpid==-1)
  26.  {
  27.    perror("fork");
  28.  }
  29.  if(!childpid)
  30.  {
  31.    int ppid = getppid();
  32.    kill(ppid, SIGQUIT);
  33.    if(check_root())
  34.     {
  35.      //Codigo privilegiado.
  36.     }
  37.    else pass();
  38.  }
  39.  else sleep(10);
  40. }
  41.  
  42. int check_root();
  43. {
  44.  if(!geteuid()) return 1;
  45.  else return 0;
  46. }
  47.  

Basicamente lo que se supone que deberia hacer es comprobar si el usuario es root, si lo es, ejecuta codigo privilegiado, si no, espera y crea otro proceso que hace lo mismo y mata al padre.

Si esto no funciona siempre puedo tener otro ejecutable que haga esta comprobacion, ejecutarlo con execve(), si funciona ejecuto codigo y si no lo mato y lo vuelvo a llamar a los 30 segundos o asi.

El problema es que no se si alguno de estos metodos es valido para obtener privilegios, es decir, si yo tengo este proceso corriendo, y voy a hacer actualizaciones, para ello me logueo como root, entonces ese proceso obtendria permisos de root?

Si no es asi, como se suele obtener privilegios en entornos *nix??

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Saber si un usuario es root en linux.
« Respuesta #5 en: 28 Agosto 2012, 20:01 pm »

Effective vs Real UID → http://www.lst.de/~okir/blackhats/node23.html
Si geteuid() es 0, tenés los privilegios de root (yo usaría getuid, honestly) ... por que ése es el UID que identifica SIEMPRE a root, no importa cuál sea el nombre de usuario.

Y dicho sea de paso, podés tener varias cuentas con diferentes nombres de usuario, pero que sean "root", siempre que su uid sea 0.

Saludos.

P.S → Es una a tres líneas verificar si se es root ...
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Saber si un usuario es root en linux.
« Respuesta #6 en: 28 Agosto 2012, 20:40 pm »

@Alex Mtx, he visto mas de un ejemplo para comprobar si se es root, y ciertamente es de 1 a 3 lineas, pero esto es mas complejo, es algo asi como tener un proceso en segundo plano esperando a que el usuario sea root para escalar privilegios, y poder ejecutar codigo que requiera de estos privilegios, entre otras cosas asegurarse una forma de mantenerlos.

Si no es viable hacerlo de esta forma, ¿como se suele ganar privilegios en entornos *nix?
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Saber si un usuario es root en linux.
« Respuesta #7 en: 31 Agosto 2012, 03:19 am »

Bien ... lo primero sería que no crees OTRO proceso, sino un hilo.
Acordate que fork() crea OTRO proceso que hereda los privilegios del proceso padre al momento de llamar a la syscall (y de ahí en adelante, lo que cada proceso haga con sus privilegios, le compete a cada proceso)

Si cambian los privilegios del proceso padre, no es algo de lo que el nuevo proceso (hijo) se entere.
Por lo que deberías correr el código este de verificación DENTRO del proceso que vá a escalar privilegios, y los hilos son la respuesta si no querés bloquear (igual, me la pensaría si usaría hilos y no un main loop tradicional) → http://www.thegeekstuff.com/2012/03/linux-threads-intro/

Pensá que cada proceso tiene sus privilegios, sus archivos abiertos y todo lo demás PROPIO y separado de los demás procesos (más allá de que algunas cosas las heredes con fork, las heredás al momento de la llamada nada más)

Si el proceso padre (A), crea dos hijos B y C ... y luego A escala privilegios, B y C quedan con los privilegios viejos.
Y si A es root, B y C pueden abandonar esos privilegios dejando al padre (A) con privilegios root.

¿Respecto a escalar privilegios? Tenés un montón de maneras (dependiendo si querés privilegios granulares o full, de manera gráfica o no .. de manera "legal" o no)


Saludos.

P.S → No abuses fork(), que degrada la performance !!
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Saber si un usuario es root en linux.
« Respuesta #8 en: 31 Agosto 2012, 14:42 pm »

Cita de: Alex Mtx
¿Respecto a escalar privilegios? Tenés un montón de maneras (dependiendo si querés privilegios granulares o full, de manera gráfica o no .. de manera "legal" o no)

Ese punto me gustaria que lo ampliaras, que son privilegios granulares o full, de manera grafica o no, de manera "legal" o no...

He estado indagando sobre escalar privilegios, he visto que se puede hacer con exploits, pero los fallos son rapidamente solucionados. La opcion mas viable que veo es crackear el /etc/passwd, y me estoy mirando el codigo del john para ver como lo hace.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Saber si un usuario es root en linux.
« Respuesta #9 en: 1 Septiembre 2012, 22:14 pm »

Citar
Ese punto me gustaria que lo ampliaras, que son privilegios granulares o full, de manera grafica o no, de manera "legal" o no...

Privilegios granulares son básicamente privilegios parciales y no totales ... ponele, privilegios "extra" sólo para una tarea concreta y nada más.
En Linux lo más usado es PolicyKit, pero hay otras formas de lograr lo mismo *en definitiva*
Los privilegios "full" es lo que tiene root (salvo que apliques algún framework de seguridad que corra en modo kernel, como los secure levels de FreeBSD), privilegio de todo y para TODO (a diferencia del granular, que es específico para una tarea)
Tenés un montón de modalidades para manejar tus privilegios, y esto depende de la aplicación en cuestión.

De manera gráfica sería usar alguna de las interfaces para lo que mencioné antes (kdesu/kdesudo, gksu, algún editor de la config de policykit, etc)
Y de manera legal o no, sería si usar algún fallo de seguridad en software (preferentemente de propio descubrimiento o que no esté liberado de manera pública) o usar mecanismos de "escalado de privilegio" legales como sudo, su, bit suid, etc ...

Saludos.

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Usar Linux como root o como un usuario « 1 2 3 »
GNU/Linux
biznaka 21 14,294 Último mensaje 29 Marzo 2011, 17:37 pm
por mael0c
Usuario Root en Guadalinex EDU Linux/GNU
Hacking
lMem-o-re 4 9,556 Último mensaje 15 Enero 2012, 12:46 pm
por lMem-o-re
Ayuda Con Usuario Root
GNU/Linux
editodj 3 3,364 Último mensaje 2 Febrero 2012, 08:16 am
por Slava_TZD
Saber la ip de un usuario en instagram
Dudas Generales
ZenonRH 4 30,199 Último mensaje 31 Octubre 2016, 00:51 am
por [Arg] $triker;
problema con mysql y usuario root sin privelegios root por defecto
GNU/Linux
tecasoft 0 2,861 Último mensaje 16 Noviembre 2016, 23:34 pm
por tecasoft
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines