Exécuter des commandes en tant que root sans mot de passe root ou sudo

Je comprends les implications de l’exécution d’un script en tant que root, notamment par une application Web. Cependant, dans le cadre de mon application Web, je dois utiliser curl with tor, ce qui nécessite de réinitialiser le tor ip de temps en temps. Vous pouvez obtenir une nouvelle adresse IP au redémarrage du service tor restart avec redémarrage du service tor restart . Étant donné que seul root peut le faire, j’ai écrit un script wrapper C pour faire ce dont j’ai besoin, et je l’ai compilé et mis en setuid root, et je suis passé à la propriété de l’utilisateur root. Cependant, il me demande toujours le mot de passe root lorsqu’il est exécuté en tant qu’utilisateur non privilégié. En tant que root, un redémarrage du service ne doit pas demander de mot de passe.

Mon script:

 #include  #include  #include  void ExecAsRoot (char* str); int main () { setuid (0); setvbuf(stdout, NULL, _IONBF, 0); printf ("Host real ip is: "); ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'"); ExecAsRoot("/usr/sbin/service tor restart"); // sleep(2); printf ("Tor should have switched to a new ip by now.\nNew ip is: "); ExecAsRoot("torify curl ifconfig.co 2>/dev/null"); return 0; } void ExecAsRoot (char* str) { system (str); } 

J’ai fait ce qui suit:

 chown root restartor chmod u=rwx,go=xr restartor 

Sortie:

 Host real ip is: 7.17.11.23 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to restart 'tor.service'. Authenticating as: root Password: 

Comment puis-je le faire fonctionner en tant qu’utilisateur Web sans fournir le mot de passe root?

Vous n’avez pas défini le bit setuid dans les permissions de fichier:

 #-------v chmod u=srwx,go=xr restartor