Avec sysvinit
, une sudoers
entrée comme celle-ci suffirait:
%webteam cms051=/sbin/service httpd *
Cela permettrait des commandes telles que:
sudo service httpd status
sudo service httpd restart
Maintenant, avec systemd
, le nom du service est l'argument final. Par exemple, le redémarrage du service se ferait avec:
systemctl restart httpd.service
Naturellement, j’ai pensé définir la commande de la manière systemctl * httpd.service
qui fonctionnerait, mais qui permettrait d’obtenir quelque chose comme systemctl restart puppet.service httpd.service
ce qui n’est pas l’effet recherché.
Cela envisagé, quel serait le meilleur moyen de permettre aux utilisateurs non root de contrôler un system.d
service? Cela n'a pas besoin d'être sudoers
; peut-être qu'un changement d'autorisation de fichier sera suffisant?
sudo
configuration depuis un moment, mais ne pourriez-vous pas faire quelque chose du genrecms051=systemctl * httpd.service
?Réponses:
Ajoutez simplement toutes les commandes nécessaires
sudoers
séparément:la source
cms051
?*
des modèles similaires.La réponse de @ jofel était exactement ce dont j'avais besoin pour obtenir une configuration opérationnelle. C'est pour ceux qui trébuchent sur cette question. J'avais besoin d'un moyen de faire
capistrano
redémarrer mon application Ruby après le déploiement à partir de ma machine locale. Cela signifie que j'avais besoin d'un accès sans mot de passe pour le redémarrage dessystemd
services. C’est ce que j’ai et cela fonctionne à merveille!Remarque : mon utilisateur et mon groupe s'appellent
deployer
Mettre le code dans un fichier personnalisé ici:
/etc/sudoers.d/deployer
Code:
la source
deployer
dans le cas, vous devez exécuter lasystemctl
commande avec sudo.Créez un alias de commande avec les commandes auxquelles vous souhaitez qu’ils aient accès. Puis assignez le groupe à cet alias de commande:
Il est également recommandé de placer les modifications dans /etc/sudoers.d/filename plutôt que de modifier directement le fichier sudoers. Assurez-vous de bien indiquer votre nom de fichier .d / filename dans sudoers, ce que la plupart des nouvelles distributions font de toute façon. Placer ces 2 lignes dans vos sudoers devrait faire l'affaire:
Remarque: Ce # devant le includeir n'est pas un commentaire. Ça doit rester.
la source
Il est plus sûr de les détailler, comme le suggère jofel .
Si je voulais permettre à quelqu'un d'utiliser un sous-ensemble limité des capacités d'une commande, je ne ferais pas confiance aux caractères génériques d'une ligne sudoers pour le faire. Même si le langage était plus expressif que les globes de shell, il y a tout simplement trop de cas en suspens à suivre.
La
service httpd *
ligne " " est relativement sûre car (cochez cette case :)service
n'a qu'un indicateur utile (--status-all
) qui ne fait rien de particulièrement sensible, et (cochez cette case aussi :)/etc/init.d/httpd
n'acceptera que les lignes de commande que vous souhaitez autoriser.S'il y a tellement de combinaisons que les énumérer devient difficile, vous devriez probablement vous demander ce que vous faites. Mais vous pouvez leur donner accès à un script d'assistance soigneusement écrit qui exécute la commande pour eux (très similaire
/etc/init.d/http
). Même dans ce cas, vous devez être aussi précis et explicite que possible pour répertorier exactement les commandes et les options autorisées, et ne transmettre aucune entrée d'utilisateur directement à la commande cible.la source