Benutzer kann systemctl / systemd-Dienste ohne Kennwort ausführen

25

Ich möchte, dass der Standardbenutzer ubuntueinen bestimmten Dienst ausführen kann, ohne zur Eingabe eines Kennworts aufgefordert zu werden.

Speziell systemctl restart unicorn_my_app.service.

Befolgen Sie die Anweisungen hier , um Benutzer ubuntuzu einer neu erstellten Gruppe hinzuzufügen. Dies LimitedAdminswird bestätigt mit:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Erstellt eine neue Datei limitedadmins(mit sudo vim) in dem /etc/sudoers.dVerzeichnis, das den folgenden Text enthält:

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

Ich habe auch versucht:

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

(Und /bin/systemd)

Inhalt von /etc/sudoers/ist der Standard, wie mit sudo visudo(oder sudo cat /etc/sudoers) bestätigt:

    #
    # 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

(Die Hash-Anmeldung #includedirist kein Kommentar, sondern Teil der # include-Direktivensyntax. )

Nach dem Ausführen wird jedoch immer noch ein Kennwort abgefragt systemctl restart unicorn_my_app.service

Service gibt es im init.dVerzeichnis:

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

Versuchte chmodding 755auf der App, aber denke nicht, dass das einen Unterschied machen sollte, da ubuntues sowieso besitzt.

Ich habe sogar versucht, das System ohne Unterschied neu zu starten. Fehlt mir ein Schritt, wie ein Neustart / Neuladen)? Richten Sie etwas falsch ein?

Ich sollte auch erwähnen, dass ich vimdie neue Datei in erstellt habe /etc/sudoers.d, da der visudoBefehl anscheinend nur zum Bearbeiten gedacht ist /etc/sudoers.

MikeiLL
quelle

Antworten:

38

Die sudoers-Datei ist ziemlich flexibel, und das bringt Komplexität mit sich. Sie möchten hier den Zugriff auf den Befehl /bin/systemctlmit bestimmten Parametern ermöglichen:

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

Grundsätzlich nehmen Sie einfach die genaue Befehlszeile, die Sie eingeben würden, codieren den Pfadnamen aus Sicherheitsgründen hart und fügen ihn in Ihre sudoers-Datei (oder /etc/sudoers.d) ein. Und beachten Sie, dass sich 'start' und 'restart' in Bezug auf sudo völlig unterscheiden. Erlaubt man dies, wird dem anderen kein Zugriff gewährt.

rosuav
quelle
1
Scheint nicht zu funktionieren. Ich kann /bin/systemctl restart unicorn_my_app.servicedirekt aus der /etc/sudoers.d/limitedadminsDatei kopieren und sie in der CLI ausführen und werde zur Eingabe eines Kennworts aufgefordert. Muss der Benutzer ubuntutp irgendwo angegeben haben oder ALLkann er für alle Benutzer aller Domänen geöffnet werden?
MikeiLL
5
Du würdest laufen sudo /bin/systemctl restart unicorn_my_app.serviceund es sollte dann ohne Passwort laufen. (Veröffentlichung als Kommentar für den Fall, dass die Antwort von
PsiOps
1
@rosuav Gibt es eine Möglichkeit, damit wir es direkt systemctl restart myapp.serviceohne Verwendung ausführen können sudo.
Kabirbaidhya
Nicht wirklich, aber Sie könnten den Befehl in ein Skript schreiben (komplett mit dem sudo-Präfix) und dieses Skript dann auf $ PATH setzen. Oder machen Sie es zu einem Shell-Alias.
Rosuav
3
Achtung: In anderen Distributionen systemctl ist in /usr/bin:-(.
guettli