Verwalten der Systemeinheiten eines anderen Benutzers


10

Kann ein Benutzer oder vielleicht root die Systemdienste eines Benutzers auf Benutzerebene steuern?

Ich habe es versucht sudo -u <some user> systemctl --user restart <some service>, aber es beschwert sich über dbus : Failed to get D-Bus connection: Connection refused.

Antworten:


4

Ich hatte das gleiche Problem, als ich mich über ssh remote in meine Gentoo-Box einloggte. In meinem Fall war dies , weil die XDG_RUNTIME_DIRund DBUS_SESSION_BUS_ADDRESSUmgebungsvariablen fehlten. Führen Sie die folgenden Befehle aus und versuchen Sie es erneut:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

Wenn dies hilft, können Sie diese Befehle in Ihre .bashrc-Datei einfügen. Ich denke, es muss eine elegantere Lösung als .bashrc geben, aber das hängt von Ihrer Distribution ab.

Hier habe ich diese Lösung gefunden.

Bearbeiten:

Als root angemeldet, konnte ich wie folgt erfolgreich systemctl --userals anderer Benutzer ausgeführt werden su:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

oder using sudo(Hinweis, ich musste die jeweilige Benutzer-UID (1000) explizit zum Pfad '/ run / user /' hinzufügen, aber wenn Sie sie über ein Bash-Skript ausführen, können Sie stattdessen $ SUDO_UID verwenden):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
Ich habe genau das in /etc/profile.d/dbus.sh. Ich denke, sudobraucht diese Whitelist, weil es die Umgebung standardmäßig löscht. Ich bin mir jedoch nicht sicher, ob nur das Laufzeitverzeichnis des aktuellen Benutzers übertragen wird.
Mkaito
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.