web-dev-qa-db-fra.com

permettant à l'utilisateur d'exécuter des services systemctl / systemd sans mot de passe

Je souhaite que l'utilisateur par défaut, ubuntuname__, puisse exécuter un service spécifique sans être invité à entrer un mot de passe.

Plus précisément systemctl restart Unicorn_my_app.service.

Avoir suivi les instructions ici pour ajouter l'utilisateur ubuntuà un groupe nouvellement créé, LimitedAdminsname__, qui est confirmé par:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Création d'un nouveau fichier, limitedadmins(utilisant Sudo vim) dans le répertoire /etc/sudoers.d contenant le texte suivant:

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/Unicorn_ofn_america restart, /etc/init.d/Unicorn_ofn_america start

J'ai aussi essayé:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/Unicorn_ofn_america restart, /bin/systemctl/Unicorn_ofn_america start

(Et /bin/systemd)

Le contenu de /etc/sudoers/ est la valeur par défaut comme confirmé par Sudo visudo (ou Sudo cat /etc/sudoers):

    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # Please consider adding local content in /etc/sudoers.d/ instead of
    # directly modifying this file.
    #
    # See the man page for details on how to write a sudoers file.
    #
    Defaults    env_reset
    Defaults    mail_badpass
    Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root    ALL=(ALL:ALL) ALL

    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    # Allow members of group Sudo to execute any command
    %Sudo   ALL=(ALL:ALL) ALL

    # See sudoers(5) for more information on "#include" directives:

    #includedir /etc/sudoers.d

(La connexion de hachage #includedir n'est pas un commentaire, mais une partie de la syntaxe de la directive # include ).

Cependant, il reste toujours une invite de mot de passe après l'exécution de systemctl restart Unicorn_my_app.service

Le service est présent dans le répertoire init.d:

$ ls -l /etc/init.d | grep Unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 Unicorn_my_app

Essayé chmodding 755 sur l'application, mais ne pense pas que cela devrait faire une différence, car ubuntule possède de toute façon.

Même essayé de redémarrer le système sans différence. Est-ce que je manque une étape, comme un redémarrage/rechargement)? Configurer quelque chose de mal?

Je devrais également mentionner que j'ai utilisé vimpour créer le nouveau fichier dans /etc/sudoers.d, car il semble que la commande visudoest uniquement pour l'édition de /etc/sudoers.

19
MikeiLL

Le fichier sudoers est assez flexible, ce qui entraîne une complexité. Ce que vous voulez ici, c'est autoriser l'accès à la commande /bin/systemctl, avec des paramètres spécifiques:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart Unicorn_my_app.service

En gros, il suffit de prendre la ligne de commande exacte à saisir, de coder en dur le nom du chemin pour des raisons de sécurité et de le placer dans votre fichier sudoers (ou /etc/sudoers.d). Et notez que "démarrer" et "redémarrer" sont complètement différents en ce qui concerne Sudo; permettre l'un n'accorde pas l'accès à l'autre.

31
rosuav