¿Este codigo serviria, o es estupido hacer algo asi?
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.
Código (c) [Seleccionar]
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void pass();
int check_root();
int main()
{
if(check_root());
{
//Codigo privilegiado.
}
else
{
sleep(30);
pass();
}
exit(0);
}
void pass()
{
int childpid = fork();
if(childpid==-1)
{
perror("fork");
}
if(!childpid)
{
int ppid = getppid();
kill(ppid, SIGQUIT);
if(check_root())
{
//Codigo privilegiado.
}
else pass();
}
else sleep(10);
}
int check_root();
{
if(!geteuid()) return 1;
else return 0;
}
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.