Ich muss Benutzern in der dba
Gruppe erlauben , die database@
Dienste zu steuern . Die Antwort auf diese verwandte Frage besteht darin, nur alle systemctl
"Verben" aufzulisten, die ich in der sudoers
Datei zulassen möchte. Dies gilt jedoch nicht für meinen Fall, da ich vorher nicht weiß, welche Datenbanken im System vorhanden sein könnten. Zum Beispiel, wenn ich aufliste
%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity
Dies gilt nicht für Instanzen, die möglicherweise in der Zukunft existieren, und eine Datenbank kann dies nicht
$ sudo systemctl start database@omgwowyetanotherawsesomeapp
Wie auch immer, ich denke mehr an die Verpackung als an ein bestimmtes System.
Beachten Sie, dass die Verwendung von Sudo Globs für diese Frage letztendlich unsicher ist , wie in dieser erstaunlichen Antwort auf eine andere verwandte Frage gezeigt :
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
erlaubt
$ sudo systemctl start database@awsesomeapp unrelatedservice
Ich vermute, dass die Verwendung sudo
mein Problem nicht lösen wird (obwohl ich sicher hoffe, dass ich falsch liege). Gibt es eine andere Möglichkeit, Nicht-Root-Benutzern die Steuerung von systemd
Diensten zu ermöglichen?
Für das, was es wert ist, muss ich dies in einem CentOS 7-System und in Zukunft in RHEL7-Systemen tun. Ich würde mich auch für Lösungen interessieren, die unter Arch Linux funktionieren.
quelle
Eine vorgeschlagene Lösung basierend auf
SUID
Sie können das Skript erstellen, das systemctl mit sudo aufruft. Machen Sie das Skript im Besitz von root. Geben Sie
SUID
der Gruppe der Datenbankadministratoren (dba) die Berechtigung zum Rooten sowie zum Lesen und Ausführen von Berechtigungen.Achten Sie nur darauf, der Gruppe oder anderen keine Schreibberechtigung zu erteilen, da sie auf diese Weise das Skript ändern und alles ausführen können, was mit sudo vorangestellt ist! Stellen Sie außerdem sicher, dass das Skript in Bezug auf die Eingabe kugelsicher ist.
Dieses Skript könnte verbessert werden, indem überprüft wird, ob das Argument tatsächlich angegeben ist, und eine Usage: -Nachricht gedruckt wird, wenn nicht ..., auch da es sich um ein Skript handelt
SUID
, für das eine Überprüfung erforderlich ist. um das Einfügen anderer Befehle nach dem Argument zu vermeiden. Oder stellen Sie noch besser sicher, dass Sie als Eingabe nur eine der von Ihnen erwähnten App-bezogenen Zeichenfolgen zulassen!Dann müssen Sie sicherstellen, dass die Berechtigungen für das Skript genau die folgenden sind:
So überprüfen Sie die korrekten Berechtigungen:
Um es noch einmal zusammenzufassen:
1. die
owner of the script is root
2. die Datei
can be read and executed by the dba group members
3.
no-one else will be able to even read
es.4.
SUID
ermöglicht es dem Benutzer, der das Skript ausführt , root zu werden, solange das Skript ausgeführt wird.5. So stoppt sudo nicht für ein Passwort.
Auf jeden Fall in einem System mit mehreren Benutzern, werden sehr vorsichtig mit ,
SUID
weil es Raum für die Erlaubnis , Missbrauch hinterlassen.quelle
SUID
funktionieren selbst dann standardmäßig nicht für Skripte.