Necesito ejecutar un script bash como root (sudo o su no viable sin contraseña) y como no puede establecer un script en Linux, pensé en llamar desde un ejecutable y hacer que setuid:Llamar a un script desde un programa setuid root C - script no se ejecuta como root
$ cat wrapper.c
int main(void)
{
system("/bin/bash ./should_run_as_root.sh");
}
$ gcc -o wrapper wrapper.c
$ sudo chown root wrapper
$ sudo chmod ug+s wrapper
$ ll wrapper
-rwsr-sr-x 1 root users 6667 2009-02-17 11:11 wrapper
$
Esto funciona - al igual que en la secuencia de comandos se ejecuta correctamente - pero el script se ejecuta como el usuario que ejecuta "./wrapper".
¿Por qué? ¿Y cómo implementar esto correctamente?
Gracias!
Por el razonamiento detrás de las respuestas a continuación, consulte 'man system', y http://stackoverflow.com/questions/1051370/why-do-i-need-setuid0-within-a-setuid-root-c- program-that-calls-an-administrati –