SystemD - Dienst als User starten

prius

Cadet 4th Year
Registriert
Feb. 2011
Beiträge
83
Hi,

ich versuche aktuell einen Dienst in meinem Ubuntu 18.04 Server zu installieren über systemd. Der Dienst soll beim Systemstart bereits gestartet werden und unter einem speziellen Account ausgeführt werden, der nicht in der Sudo-Gruppe ist.
Deshalb meine Frage, wie macht man das genau, bzw. wie kann ich nachkontrollieren, das der Dienst so ausgeführt wird wie ich mir das vorgestellt habe?

Was ich bisher gemacht habe ist, eine Unit-Datei zu erstellen und diese liegt nun unter "/etc/systemd/System". Dann habe ich die über systemctl aktiviert. Der Dienst startet dann auch wie vorgesehen.

Grüße
 
Ich habe jetzt den User in der Unit Datei mit eingetragen. Wie kann ich jetzt kontrollieren, das der Service auch wirklich unter diesem User läuft?
"Systemctl status" zeigt mir diese Information nicht an.

Grüße
 
bspw. "grafisch" mit htop oder auch ps -o user= -p PID
 
  • Gefällt mir
Reaktionen: UNDERESTIMATED
Ich habe mal etwas mit dem ps-Befehl herungespielt und herausgekommen ist eine Liste in der mein Dienst als root läuft, mein ServiceAccount hat "/lib/systemd/systemd --user" am laufen und "(sd-pam)".

Ist das dann jetzt richtig? Ich hätte erwartet das mein Dienst auch als ServiceAccount gelistet wird.
 
Nein, sollte nicht sein.

766832
 
Ich habe jetzt noch etwas herumprobiert aber ich komm einfach nicht drauf wie das gehen soll :/

Ich habe die UNIT-Datei erstellt und unter "etc/systemd/user" abgelegt. Dann habe über SSH, als angemeldeter Serviceaccount, "systemctl --user enable meinservice.service serviceaccount" ausgeführt und zum Schluss noch "loginctl enable-linger serviceaccount".

Das sollte eigentlich den gewünschten Effekt haben. Hat es aber nicht, bzw. der Service wird nicht gestartet. Die Datei unter "etc/systemd/System" abzulegen macht keinen Unterschied. Wenn ich das als Root mache, klappt das jedoch prima, nur das es dann auch der Root ausführt.

Grüße
 
Wie sieht denn die unit Datei aus?
 
Die Datei sieht fast aus wie deine:

Code:
[Unit]
Description=Mein_Dienst
After=syslog.target network.target
RequiresMountsFor=/home/serviceaccount/mein_dienst

[Service]
Restart=on-failure
user=serviceaccount
ExecStart=/home/serviceaccount/mein_dienst/mein_dienst
StandardOutput=null

[Install]
WantedBy=multi-target.target
 
Wieso nutzt du denn systemctl --user?
Ansonsten sieht das eigentlich richtig aus und ich habe auch keine weitere Idee...
Wenn du magst, schaue ich mir das mal über Teamviewer o.Ä. an.
 
Weil das in den Links stand, die weiter oben gepostet wurden, damit der Kram nicht als Root läuft :)
 
Wenn das ein systemweiter Dienst ist, solltest du eine system unit, und nicht eine user unit verwenden. Die werden eher dafür verwendet, user-spezifische Dienste auszuführen (zB den torrent client beim login).

Systemweite units werden auch nicht notwendigerweise als root ausgeführt, hier beispielsweise die tor.service meines Systems:

Code:
[Unit]
Description=Anonymizing Overlay Network
After=network.target

[Service]
User=tor
Type=simple
ExecStart=/usr/bin/tor -f /etc/tor/torrc
ExecReload=/usr/bin/kill -HUP $MAINPID
KillSignal=SIGINT
LimitNOFILE=8192
PrivateDevices=yes

[Install]
WantedBy=multi-user.target
 
Zurück
Oben