Je dois exécuter un script bash en tant que root (sudo sans mot de passe ou su pas viable) et comme vous ne pouvez pas définir un script sous Linux, j'ai pensé appeler il d'un exécutable et de faire il setuid:Appel d'un script à partir d'une racine setuid C - le script ne s'exécute pas en tant que 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
$
Cela fonctionne - comme dans fonctionne correctement le script - mais le script est exécuté en tant que l'utilisateur qui exécute « ./wrapper ».
Pourquoi? Et comment mettre en œuvre correctement cela?
Merci!
Pour le raisonnement derrière les réponses ci-dessous, voir 'man system', et http://stackoverflow.com/questions/1051370/why-do-i-need-setuid0-within-a-setuid-root-c- program-that-calls-an-administrati –