Mit würde sysvinit
ein sudoers
Eintrag wie dieser ausreichen:
%webteam cms051=/sbin/service httpd *
Dies würde Befehle ermöglichen wie:
sudo service httpd status
sudo service httpd restart
Nun ist mit systemd
der Dienstname das letzte Argument. Dh der Neustart des Dienstes würde erfolgen mit:
systemctl restart httpd.service
Natürlich dachte ich, das Kommando so zu definieren, wie systemctl * httpd.service
es funktionieren würde, aber das würde so etwas ermöglichen, systemctl restart puppet.service httpd.service
was nicht der gewünschte Effekt ist.
Wie können dann Benutzer ohne Rootberechtigung einen system.d
Dienst am besten steuern ? Das muss nicht sein sudoers
; Vielleicht reicht eine Änderung der Dateiberechtigung aus?
sudo
Konfiguration schon eine Weile nicht mehr angefasst , aber konnten Sie nicht einfach so etwas tuncms051=systemctl * httpd.service
?Antworten:
Fügen Sie einfach alle erforderlichen Befehle
sudoers
separat hinzu:quelle
cms051
?*
oder ähnlichen Mustern erlaubt .@jofels Antwort war genau das, was ich brauchte, um ein funktionierendes Setup zu bekommen. Ich stelle dies für alle anderen auf, die über diese Frage stolpern. Ich brauchte einen Weg , um
capistrano
neu zu starten Anwendung meines Rubins , nachdem sie von meinem lokalen Rechner einsetzen. Das heißt, ich brauchte einen kennwortlosen Zugang zum Neustart dersystemd
Dienste. DAS habe ich und es funktioniert wunderbar!Hinweis : Mein Benutzer und meine Gruppe heißen hier
deployer
Code in eine benutzerdefinierte Datei einfügen:
/etc/sudoers.d/deployer
Code:
quelle
deployer
in diesem Fall Sie densystemctl
Befehl mit sudo ausführen sollten .Erstellen Sie einen Befehlsalias mit den Befehlen, auf die sie Zugriff haben sollen. Weisen Sie dann die Gruppe diesem Befehlsalias zu:
Es ist auch empfehlenswert, Änderungen in Ihrem /etc/sudoers.d/dateinamen zu platzieren, anstatt die sudoers-Datei direkt zu bearbeiten. Stellen Sie sicher, dass Sie in den Sudoern auf Ihre .d / filename verweisen, was die meisten neuen Distributionen sowieso tun. Das Einfügen dieser beiden Zeilen in Ihre Sudoer sollte den Trick machen:
Hinweis: Das # vor dem includeir ist kein Kommentar. Es muss bleiben.
quelle
Es ist am sichersten, sie aufzuschlüsseln, wie es Jofel vorschlägt.
Wenn ich jemandem erlauben wollte, eine begrenzte Teilmenge der Fähigkeiten eines Befehls zu verwenden, würde ich keinen Platzhaltern in einer sudoers-Zeile vertrauen, um dies zu tun. Auch wenn die Sprache ausdrucksvoller war als Shell-Globs, gibt es einfach zu viele Eckfälle, um den Überblick zu behalten.
Die
service httpd *
Zeile " " ist relativ sicher, da (überprüfe dies :)service
nur ein nützliches Flag (--status-all
) hat, das nichts besonders Sensibles bewirkt, und (überprüfe dies auch :)/etc/init.d/httpd
nur die Befehlszeilen akzeptiert, die du zulassen möchtest.Wenn es so viele Kombinationen gibt, dass es unangenehm wird, sie aufzulisten, sollten Sie sich wahrscheinlich fragen, was Sie tun. Sie können ihnen jedoch Zugriff auf ein sorgfältig geschriebenes Hilfsskript gewähren, das den Befehl für sie ausführt (ähnlich wie
/etc/init.d/http
). Auch in diesem Fall sollten Sie so präzise und eindeutig wie möglich sein, um genau aufzulisten, welche Befehle und Optionen zulässig sind, und keine Benutzereingaben direkt an den Zielbefehl weiterleiten.quelle