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.

mkaito
quelle

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
Thawn
quelle
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