Ich habe einige systemd-Dienste erstellt, die im Grunde funktionieren:
Standort:
/etc/systemd/system/multi-user.target.wants/publicapi.service
Inhalt:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
Wenn ich versuche, den Dienst als Techops-Benutzer in der Befehlszeile neu zu starten, wird folgende Ausgabe angezeigt:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
Ich möchte, dass nur Techops Dienste neu starten können, und ich möchte, dass diese Eingabeaufforderung nicht angezeigt wird, wenn Sie als Techops angemeldet sind. Wie kann ich das machen?
Ich habe gelesen, dass es bei Polkit-1 oder Sudoern unterschiedliche Ansätze gibt, bin mir aber nicht sicher.
[UPDATE] 27.01.2019 16:40
Vielen Dank für diese umfassende Antwort an Thomas und Perlduck. Es hat mir geholfen, meine Kenntnisse über systemd zu verbessern.
Entsprechend dem Ansatz, den Dienst ohne Passwortabfrage zu starten, und ich möchte mich entschuldigen, dass ich das eigentliche Problem nicht genug betont habe:
Was für mich am wichtigsten ist, ist, dass kein anderer Benutzer als Techops den Dienst stoppen oder starten sollte. Aber zumindest mit den ersten beiden Ansätzen kann ich noch laufen service publicapi stop
und bekomme die Aufforderung ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
erneut. Wenn ich den Standardbenutzer auswähle und das Kennwort kenne, kann ich alle Dienste beenden. Ich möchte diesem Benutzer dies verweigern, auch wenn er das Passwort hat . Wichtige Hintergrundinformationen, um besser zu verstehen, warum dies für mich der wichtigere Teil ist:
Der Standardbenutzer ist der einzige Benutzer, der ssh ausgesetzt ist, aber dieser Benutzer kann nichts anderes tun (außer zu anderen Benutzern zu wechseln, wenn Sie das Kennwort dieser anderen Benutzer haben). . Im Moment kann er die Dienste starten oder stoppen, aber dieser Benutzer darf dies nicht tun.
Wenn jemand das Passwort des Standardbenutzers erhält und sich über ssh anmeldet, kann er momentan alle Dienste beenden. Dies meinte ich mit "Ich möchte, dass nur Techniker Dienste neu starten können". Entschuldigung, dass ich bei meiner ersten Frage nicht so genau war. Ich dachte, dass das Sudoing des Techops-Benutzers dieses Problem vielleicht umgehen würde, aber das tut es nicht. Das Problem selbst besteht nicht darin, den Befehl ohne Kennwortabfrage auszuführen. (Ich könnte das leicht als Techops-Benutzer tun, wenn ich es gerade ausführe /home/techops/publicapi start
). Das Problem selbst besteht darin, den Standardbenutzer vom Starten dieser Dienste auszuschließen.
Und ich hoffte, dass jede der Lösungen das könnte.
Ich begann mit den Ansätzen von Thomas. Der Ansatz mit sudo funktioniert, wenn ich nicht nach dem Kennwort für die Benutzer-Techops gefragt werden möchte, wenn ich die Befehle wie erläutert ausführe, z
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
Der zweite Ansatz funktioniert bei mir noch nicht. Ich kann den Dienst nicht ohne Passwortabfrage starten ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
und kann mich als Standardbenutzer anmelden, wenn ich das Passwort dieses Benutzers habe.
Mit dem dritten Ansatz startet der Dienst nicht einmal mehr beim Booten, daher bin ich mir nicht sicher, ob dieser Ansatz überhaupt der richtige für mich ist. Ich kann es nicht einmal, systemctl enable publicapi.service
was mich zu folgendem Fehler führt:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
Der Fehler tritt nicht auf, wenn ich alle Dienste zurück in / etc / systemd / system / verschiebe und ausführe systemctl enable publicapi.service
. Dann startet der Dienst beim Booten erneut.
All diese Ansätze helfen mehr oder weniger dabei, die Kennwortabfrage für den Techops-Benutzer zu umgehen. Wenn ich sie jedoch ausführe service publicapi stop
oder systemctl stop publicapi
mit dem Standardbenutzer, kann ich die Dienste beenden, wenn ich das Kennwort habe. Mein Ziel ist es jedoch, den Standardbenutzer daran zu hindern, Dienste überhaupt zu starten oder zu stoppen.
/etc/sudoers
Datei überprüfen , ob für diesen Benutzer eine Referenz vorhanden ist.
systemctl --user ...
als Benutzer undtechops
nicht als Root ausgeführt werden. Weder mein Vorschlag noch der von @PerlDuck gewährensudo
Ihrem Standardbenutzer Rechte, sondern nur dem Techops- Benutzer.