GNU/Linux >> LINUX-Kenntnisse >  >> Linux

systemd:Erteilen Sie einem nicht privilegierten Benutzer die Berechtigung, einen bestimmten Dienst zu ändern

Lösung 1:

Dazu fallen mir zwei Möglichkeiten ein:

Einer besteht darin, den Dienst zu einem Benutzerdienst und nicht zu einem Systemdienst zu machen.

Anstatt eine System-Unit zu erstellen, wird die Systemd-Unit im Home-Verzeichnis des Dienstbenutzers unter $HOME/.config/systemd/user/daemon-name.service abgelegt . Derselbe Benutzer kann dann den Dienst mit systemctl --user <action> daemon-name.service verwalten .

Damit die Benutzereinheit beim Booten starten kann, muss root Linger für das Konto aktivieren, d. h. sudo loginctl enable-linger username . Die Einheit muss auch WantedBy=default.target sein .

Die andere Möglichkeit besteht darin, dem Benutzer den Zugriff zu gewähren, um die Systemeinheit über PolicyKit zu verwalten. Dies erfordert systemd 226 oder höher (und PolicyKit>=0.106 für die JavaScript rules.d-Dateien – prüfen Sie mit pkaction --version ). Beachten Sie, dass Debian PolicyKit absichtlich auf eine fast zehn Jahre alte Version 0.105 zurückgehalten hat, die diese Funktionalität nicht unterstützt, anscheinend aufgrund der persönlichen Meinung einer Person, und weder es noch davon abgeleitete Distributionen (wie Ubuntu) diese Methode verwenden können.

Sie würden eine neue PolicyKit-Konfigurationsdatei erstellen, z. /etc/polkit-1/rules.d/57-manage-daemon-name.rules die nach den Attributen sucht, die Sie zulassen möchten. Zum Beispiel:

// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "example.service" &&
        subject.user == "alice") {
        return polkit.Result.YES;
    }
});

Der Named User kann dann den Named Service mit systemctl verwalten und ohne sudo zu verwenden .

Lösung 2:

sudo ist dafür gemacht. Bearbeiten Sie Ihre /etc/sudoers Datei mit visudo um eine Cmd_alias hinzuzufügen für die Befehle, die der nicht privilegierte Benutzer verwenden soll:

# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>

und fügen Sie eine Zeile hinzu, um dem nicht privilegierten Benutzer zu erlauben, die mit dem Alias ​​definierten Befehle wie folgt zu verwenden:

unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS

Lesen Sie weitere Dokumentation zum Thema für die verschiedenen Parameter des sudo-Befehls.

Möglicherweise müssen Sie sudo installieren Paket muss sudo haben auf Ihrem System verfügbar.


Linux
  1. 10 praktische systemd-Befehle:Eine Referenz

  2. So erstellen Sie einen Systemd-Dienst unter Linux

  3. Wie ändere ich den Benutzer für eine Reihe von Systemd-Dienstdateien?

  4. Linux-Betriebssystemdienst „winbind“

  5. Wie stoppen Sie den systemd-Dienst

Verwalten Sie den Start mit systemd

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

Verwenden von systemd-Funktionen zum Sichern von Diensten

Verwalten von cgroups mit systemd

systemd - Gibt meinem Dienst mehrere Argumente

Upstart:Führen Sie den Dienst als nicht privilegierten Benutzer aus und starten Sie das Skript vorab als root