web-dev-qa-db-fra.com

Permission d'exécuter une commande spécifique par sudo en tant qu'utilisateurs www-data sans mot de passe

J'ai un serveur Web qui joue également une radio Internet. En tant qu'utilisateur de données www, je souhaite exécuter certaines commandes, par exemple, j'ai fait cela dans /etc/sudoers Fichier:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer

Et formulaire PHP Je peux manipuler le volume sans utiliser de mot de passe par:

exec('Sudo -u user amixer set Master 3%-');

Et:

exec('Sudo -u user amixer set Master 3%+');

Mais maintenant, je veux être capable de redémarrer mon propre service en exécutant la commande:

exec('Sudo -u user service servicename restart');

Alors j'ai essayé:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /bin/service

Et ça:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, /bin/service

Et même ceci:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer
www-data        ALL=(ALL) NOPASSWD: /bin/service

Mais aucun d'entre eux ne semble fonctionner. Sil te plait aide moi.


Désolé gars - mon erreur. J'ai fait des changements, essayé de relier la forme/sbin à/bin

Maintenant je l'ai changé pour:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /usr/sbin/service

Et il fonctionne! Merci! Sujet fermé.

8
Peter

Soyez prudent avec votre solution: vous pouvez commencer, arrêter ou redémarrer n'importe quel service de cette façon!

Mieux créer un script shell qui exécute cette commande:

echo "#!/bin/sh' > /usr/bin/amixer_restart
echo "Sudo -u user service amixer restart' >> /usr/bin/amixer_restart

Accorder des autorisations adéquates (550 racines moyennes et les données www de groupe peuvent lire et exécuter, personne ne peut écrire)

Sudo chown root:www-data /usr/bin/amixer_restart
Sudo chmod 550 /usr/bin/amixer_restart

Et autoriser Apache à Sudo sur ce script:

www-data        ALL=(ALL) NOPASSWD: /usr/bin/amixer_restart
6
Calimo