J'ai un script exécuté sous un utilisateur non root qui, dans certaines conditions, devrait redémarrer Apache httpd.
Quelle serait la manière la plus simple pour moi de permettre à l'utilisateur de le faire?
J'utilise Ubuntu Server 8.04 LTS.
Réponse courte:
À l'aide de visudo
, ajoutez ce qui suit à votre fichier sudoers, en remplaçant username par le bon nom d'utilisateur:
username ALL = /etc/init.d/Apache2
Si vous ne souhaitez pas avoir à taper un mot de passe avant cela, utilisez ce qui suit:
username ALL = NOPASSWD: /etc/init.d/Apache2
Après cela, l'utilisateur 'username' peut exécuter Sudo /etc/init.d/Apache2 start
(ou arrêter, redémarrer, etc.)
Réponse longue: vous voudrez probablement configurer un utilisateur distinct pour cela si vous ne l'avez pas déjà fait, puis configurer le fichier/etc/sudoers pour permettre à un utilisateur ou à un groupe d'exécuter la commande souhaitée.
Par exemple, pour permettre à l'utilisateur "ben" d'exécuter toutes les commandes en tant que root demandant un mot de passe, vous devez procéder comme suit:
ben ALL= ALL
Pour autoriser 'ben' à exécuter une seule commande (comme disons, rm
), vous devez procéder comme suit:
ben ALL= /bin/rm
Si vous exécutez un script en tant qu'utilisateur et que vous ne souhaitez pas demander de mot de passe, vous voudrez utiliser l'option 'NOPASSWD' comme ceci:
ben ALL=NOPASSWD: /bin/commandname options
Vous pouvez faire la même chose pour les groupes en préfixant les noms de groupe avec un signe de pourcentage, comme ceci:
%supportstaff ALL= NOPASSWD: /bin/commandname
Réponse courte: Sudo.
L'appel ressemblerait à ce qui suit: Sudo /etc/init.d/Apache2 restart
Le plus simple est d'utiliser visudo
pour configurer le fichier/etc/sudoers. Voir man sudoers
et man visudo
pour plus de détails.
Vous pouvez également accomplir cela en écrivant un wrapper dans Apache2ctl, en attribuant la propriété du groupe à un groupe d'administration Web et en définissant le bit suid. Il s'agit d'une solution moins générale que visudo, mais permet des limitations personnalisées sur les capacités des utilisateurs et la vérification des erreurs.
J'ai écrit cet outil pour mes propres besoins et l'ai partagé sur github: https://github.com/josiahjohnston/ltd_Apache2ctl