Ich verwende einen privaten Spieleserver auf einer kopflosen Linux-Box. Da ich kein Idiot bin, wird der Server als eigener nichtprivilegierter Benutzer mit den erforderlichen Mindestzugriffsrechten ausgeführt, um Updates herunterzuladen und die Weltdatenbank zu ändern.
Ich habe auch eine System-Unit-Datei erstellt, um den Server bei Bedarf ordnungsgemäß zu starten, zu stoppen und neu zu starten (beispielsweise für die genannten Updates).
Fordern , um tatsächlich jedoch systemctl
oder service <game> start/stop/restart
ich immer noch in entweder als root oder anmelden muß sudo
fähig Benutzer.
Gibt es eine Möglichkeit, systemd mitzuteilen, dass für den <game>
Dienst nichtprivilegierte Benutzer gamesrv
die Befehle start / stop / restart ausführen dürfen?
Antworten:
Ich kann mir zwei Möglichkeiten vorstellen, dies zu tun:
Zum einen wird der Dienst zu einem Benutzerdienst und nicht zu einem Systemdienst.
Anstatt eine Systemeinheit zu erstellen, wird die systemd-Einheit im Home-Verzeichnis des Dienstbenutzers unter at abgelegt
$HOME/.config/systemd/user/daemon-name.service
. Derselbe Benutzer kann den Dienst dann mit verwaltensystemctl --user <action> daemon-name.service
.Damit die Benutzereinheit beim Booten starten kann , muss root die Verweildauer für das Konto aktivieren, d
sudo loginctl enable-linger username
. H. Das Gerät muss auch seinWantedBy=default.target
.Die andere Möglichkeit besteht darin, dem Benutzer den Zugriff auf die Verwaltung der Systemeinheit über PolicyKit zu ermöglichen. Dies erfordert systemd 226 oder höher (und PolicyKit> = 0.106 für die JavaScript rules.d-Dateien - prüfen Sie mit
pkaction --version
).Sie würden eine neue PolicyKit-Konfigurationsdatei erstellen, die z. B.
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
nach den Attributen sucht, die Sie zulassen möchten. Zum Beispiel :Der benannte Benutzer kann dann den benannten Dienst mit
systemctl
und ohne Verwendung verwaltensudo
.quelle
loginctl
arbeitete.sudo
ist dafür gemacht. Bearbeiten Sie Ihre/etc/sudoers
Datei mitvisudo
, um einCmd_alias
für die Befehle hinzuzufügen , die der nichtprivilegierte Benutzer verwenden soll:und fügen Sie eine Zeile hinzu, damit der nichtprivilegierte Benutzer die mit dem Alias definierten Befehle wie folgt verwenden kann:
Weitere Informationen zu den verschiedenen Parametern des Befehls sudo finden Sie in der Dokumentation zu diesem Thema.
Möglicherweise müssen Sie das
sudo
Paket installieren , damitsudo
es auf Ihrem System verfügbar ist.quelle
systemd
Unit-Datei als erstes angibt, dass sie ausgeführt werden mussgamesrv
.Sie können sich
sudo
mit dem Bereitstellen eines entsprechenden Zugriffs verbindenroot
, aber es kann auch verwendet werden, um einem bestimmten Benutzer root-Zugriff auf einen bestimmten, begrenzten Satz von Befehlen zu gewähren.Wie wurde dies bereits bei Server Fault beantwortet ? (Zugriff auf eine Reihe von Befehlen an einen Nicht-Root-Benutzer ohne sudo Zugriff auf eine Reihe von Befehlen an einen Nicht-Root-Benutzer ohne sudo).
Die Verwendung von PolicyKit ist weiterhin ungewöhnlich. Die Verwendung einer systemd "Benutzereinheit" sollte funktionieren, aber in der Vergangenheit wurde Ihr Ziel oft erreicht, indem die Möglichkeit genutzt wurde
sudo
, einem Benutzer die Ausführung bestimmter Befehle als root zu ermöglichen.quelle