systemd: Startet einen Benutzer (ohne Kennwort), einen bestimmten Dienst, der nach dem Abmelden aktiv bleibt

904
sam

Ich versuche, einen benutzerspezifischen Dienst mit systemd auszuführen. Ich bin kein Administrator von Beruf, sondern eher ein Entwickler.

Ich teste derzeit meine Lösung auf einem Ubuntu 16.04, plane jedoch, die Lösung auf Centos 7 bereitzustellen. Ich hoffe, dass sich nichts wirklich ändern wird.

Bis jetzt schaffe ich es jedoch per Skript:

  1. Stellen Sie sicher, dass mein Dienst beim Starten über die Befehlszeile effektiv ausgeführt wird
  2. Erstellen Sie den Benutzer john mit einem /home/johnVerzeichnis (ich brauche dieses Zuhause), aber kein Passwort . Ich habe gelesen, dass es sicherer wäre (und hoffe ich irre nicht ...).
  3. Erstellen Sie das Verzeichnis /home/john/.config/systemd/userzum Speichern meiner Servicedateien.
  4. Aktivieren Sie das Verweilen gemäß diesem Dokument

Jetzt möchte ich eine Sitzung mit john testen und die Dienste starten, aber es funktioniert nicht. Ich versuche es folgendermaßen zu machen:

sam$ sudo su - john john$ systemctl --user status my-service.service 

und sammle dieses unangenehme:

Failed to connect to bus: No such file or directory 

und egal, welchen status/start/stop/list-unitsBefehl ich an Stelle des Status oben setze, ist immer die gleiche Nachricht.

Die Befehle, die mich mit der Sitzung von john verbinden, werden von dieser Zeile protokolliert:

$journalctl -e  Jun 15 18:16:23 sam-dell sudo[5681]: sam : TTY=pts/2 ; PWD=/home/sam/IdeaProjects ; USER=root ; COMMAND=/bin/su - john Jun 15 18:15:02 sam-dell su[5491]: Successful su for john by root Jun 15 18:15:02 sam-dell su[5491]: + /dev/pts/2 root:john Jun 15 18:15:02 sam-dell su[5491]: pam_unix(su:session): session opened for user john by (uid=0) Jun 15 18:15:02 sam-dell su[5491]: pam_systemd(su:session): Cannot create session: Already running in a session 

... und nichts passiert, wenn ich die systemctlBefehle versuche .

Hinweis: Ich habe meinem Benutzer ein Passwort hinzugefügt, und es funktioniert immer noch nicht von dem in meiner Gnome-Sitzung meines samBenutzers geöffneten Terminal . Da mein Benutzer jetzt ein Passwort hat, lässt mich Ubuntu mit gnome darauf zugreifen und ich könnte das systemctl --user status/start/stopproblemlos ausführen, indem ich mich in der john gnome-Sitzung anmelde.

Hat jemand eine Idee? Ich nehme das Problem möglicherweise in die falsche Richtung, ich möchte einfach den systemd-Dienst als einen anderen Benutzer auf meinem Remote-Server ausführen. Ich vermute, dass ich es richtig gemacht habe, aber vielleicht nicht.

Vielen Dank für Ihre Hilfe

0

1 Antwort auf die Frage

0
grawity

Beachten Sie, dass su keine verschachtelte Anmeldesitzung erstellt wird. Alle Prozesse, die in Sam's Session gestartet wurden, gehören noch dazu.

Sie müssten sich über die Konsole, gdm, ssh oder machinectl login .host(ich glaube, es gibt kürzere Aliase für diese Version) anmelden, da sie alle von einem sauberen Plan ausgehen. (Obwohl ... Ich bin mir nicht sicher, warum das Aktivieren von Verweilen alleine die systemd-Instanz nicht gestartet hat. Sie sollte es tun.

systemctl selbst muss sich nicht in der richtigen Sitzung befinden (Sie können dies auch tun), es ist jedoch auf die Umgebungsvariable $ XDG_RUNTIME_DIR angewiesen, um die systemd-Instanz zu finden. Es sollte im Allgemeinen auf gesetzt sein /run/user/<UID>, und dieses Verzeichnis sollte entweder einen busSocket oder einen Socket haben systemd/private.

Ich habe es auf dem Server versucht (Centos 7). Ich habe den Benutzer erstellt und das Verweilen aktiviert. Fügen Sie einige .ssh / ids ein, damit ich eine ssh-Sitzung öffnen kann. sam vor 6 Jahren 0
Ach ja, CentOS hat diese Funktion überhaupt nicht. Sie entfernen es chirurgisch. grawity vor 6 Jahren 0
Ich habe es auf dem Server versucht (Centos 7). Ich habe den Benutzer erstellt und das Verweilen aktiviert. Fügen Sie einige .ssh / ids ein, damit ich eine ssh-Sitzung öffnen kann. Ich habe einen einfachen Dienst erstellt und überprüft, ob er von root ordnungsgemäß ausgeführt wird, wenn er unter / etc / systemd / system verlinkt wird. Dann löschen Sie den Symlink und geben den Dienst in /home/john/.config/systemd/system/my-service.service ein. Sammeln Sie jedoch immer `systemctl --user start my-service. D-Bus-Verbindung fehlgeschlagen: Keine solche Datei oder Verzeichnis " sam vor 6 Jahren 0
wirklich entfernte sie ??? !!! Welche Funktion bleibt oder - Benutzer? sam vor 6 Jahren 0