it-swarm.com.de

Konfigurieren des Systemd-Dienstes für die Ausführung mit Root-Zugriff

Ich habe einen Dienst in Form einer node.js-Anwendung, die mit Systemd auf Raspbian Jessie eingerichtet wurde und ein eigenes Benutzerkonto verwendet. Ich stelle jedoch fest, dass der Dienst nicht ordnungsgemäß ausgeführt wird, da er nicht über die erforderlichen Berechtigungen verfügt. Eines der von mir installierten Knotenmodule erfordert Root-Zugriff. Wenn ich die Anwendung manuell mit Sudo ausführe, funktioniert alles einwandfrei.

Gibt es eine Möglichkeit, systemd anzuweisen, den Dienst mit sudo auszuführen?

22
Luke

systemd anweisen, den Dienst mit Sudo auszuführen?

Sudo hat nichts damit zu tun.

Normalerweise weisen Sie systemd an, einen Dienst als bestimmten Benutzer/bestimmte Gruppe mit den Anweisungen User= Und Group= Im Abschnitt [Service] Der Einheitendatei auszuführen.

Setzen Sie diese auf root (oder entfernen Sie sie, da die Ausführung als root die Standardeinstellung ist).

34
HBruijn

Zum Löschen werden systemd Systemdienste standardmäßig als root ausgeführt, es besteht jedoch immer noch ein Unterschied zwischen dem Standardverhalten und dem Ausführen eines Systemdienstes mit User=root.

Wie in mgebungsvariablen in gespawnten Prozessen dokumentiert, werden diese Variablen nur gesetzt, wenn User= Gesetzt ist:

$USER, $LOGNAME, $HOME, $Shell

Ich habe getestet, um diesen Befund zu bestätigen. Wenn Sie also einen systemd-Dienst als root ausführen möchten, der eine der oben genannten Variablen benötigt, müssen Sie User=root Setzen.

15
Mark Stosberg

eine vorübergehende Lösung, die aber zur Not funktioniert:

/usr/bin/Sudo /bin/bash -lc 'bundle exec Rails server -e demo -p 80'

Kann mit einem Benutzer ausgeführt werden, der Sudo-Berechtigungen in einer systemd-Einheitendatei hat, wie folgt:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/Sudo /bin/bash -lc 'bundle exec Rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target
2
daino3

Führen Sie es in diesem Fall standardmäßig als Systembenutzer aus. Der Dienst wird als Root ausgeführt.

1
Umut