Ich möchte, dass der Standardbenutzer ubuntu
einen 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 ubuntu
zu einer neu erstellten Gruppe hinzuzufügen. Dies LimitedAdmins
wird bestätigt mit:
$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu
Erstellt eine neue Datei limitedadmins
(mit sudo vim
) in dem /etc/sudoers.d
Verzeichnis, 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 #includedir
ist 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.d
Verzeichnis:
$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app
Versuchte chmodding 755
auf der App, aber denke nicht, dass das einen Unterschied machen sollte, da ubuntu
es 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 vim
die neue Datei in erstellt habe /etc/sudoers.d
, da der visudo
Befehl anscheinend nur zum Bearbeiten gedacht ist /etc/sudoers
.
Antworten:
Die sudoers-Datei ist ziemlich flexibel, und das bringt Komplexität mit sich. Sie möchten hier den Zugriff auf den Befehl
/bin/systemctl
mit 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.quelle
/bin/systemctl restart unicorn_my_app.service
direkt aus der/etc/sudoers.d/limitedadmins
Datei kopieren und sie in der CLI ausführen und werde zur Eingabe eines Kennworts aufgefordert. Muss der Benutzerubuntu
tp irgendwo angegeben haben oderALL
kann er für alle Benutzer aller Domänen geöffnet werden?sudo /bin/systemctl restart unicorn_my_app.service
und es sollte dann ohne Passwort laufen. (Veröffentlichung als Kommentar für den Fall, dass die Antwort vonsystemctl restart myapp.service
ohne Verwendung ausführen könnensudo
.systemctl
ist in/usr/bin
:-(.