Est-il possible de donner à sudo un accès uniquement à une commande particulière?

24

Contexte: J'ai une machine de développement avec une configuration LAMP. Plusieurs développeurs accédaient de temps en temps à la machine. Chaque fois qu'ils effectueront des modifications dans un fichier de configuration, ils devront redémarrer le serveur apache en utilisant sudo service apache restartousudo /etc/init.d/apache2 restart

La question:

Ce que je veux maintenant, c'est que chaque développeur qui accède à la machine ne dispose pas d'un accès sudo à tout. Au contraire, il / elle ne devrait pouvoir exécuter la servicecommande qu'en utilisant sudo et rien d'autre. Est-il possible de faire ça?

Ankit
la source

Réponses:

35

Oui.

Créez un nouveau groupe, Web (appelez-le comme vous le souhaitez)

sudo addgroup web

Ajoutez vos développeurs au groupe Web (utilisez leur nom de connexion).

sudo adduser your_developer_user web

Exécutez ensuite sudo visudo -f /etc/sudoers.d/somefile(utilisez un nom significatif au lieu de somefile).

Ajoutez une ligne (utilisez le chemin complet de la commande):

%web ALL=(ALL) /usr/bin/service apache2 *

Les développeurs peuvent ensuite exécuter

sudo service apache

en utilisant leur mot de passe de connexion.

N'ajoutez PAS votre utilisateur administrateur au groupe Web.

Voir man sudoers pour plus d'informations

Panthère
la source
1
@Ankit: de cette façon, les utilisateurs du webgroupe peuvent démarrer / arrêter n'importe quel service, et ce n'est pas ce que vous voulez, je pense. La solution devrait être de mettre la commande exacte (également avec des paramètres) dans /etc/sudoers.
enzotib
@enzotib puis-je faire cela pour dire que la nouvelle commande serait /usr/bin/service apache2-elle?
Ankit
3
@Ankit:/usr/bin/service apache2 *
enzotib
Cela devrait aussi être probablement/usr/sbin/service
Erfan