Gefällt dir dieser Artikel?

Linux: grafische Anwendungen als Root über SSH und su

erschienen in der Kategorie Software, am 21.07.2015
Schnatterente
Hier kam gerade von einer Leserin die Frage per Mail rein, wie man per SSH eine grafische Anwendung zum Laufen kriegt, wenn man mittels su den Nutzer gewechselt hat.

Hintergrund des Problems ist, dass sie einen grafischen Editor mit root-Rechten benutzen will, der direkte root-Login über SSH aber aus Sicherheitsgründen gesperrt ist. (Dies ist auch durchaus sinnvoll, denn man will einem potenziellen Angreifer ja nicht gleich alle Rechte mitgeben, wenn er es wirklich mal bis ins System schafft.)

Schauen wir uns das Ganze einmal an:

GUIs über SSH

Um über SSH eine grafische Anwendung zu öffnen, muss an das ssh-Kommando der Parameter -X angehangen werden ("X" wegen X11).

Und natürlich muss das X11-Forwarding auch seitens des SSH-Servers erlaubt sein. Dazu sollten in der Konfigurationsdatei (meist /etc/ssh/sshd_config) folgende Zeilen eingetragen sein:
X11Forwarding yes
X11UseLocalhost no

Sind diese Rahmenbedingungen gegeben, kann man sich einfach per SSH auf dem jeweiligen Server anmelden und grafische Anwendungen starten.

X11-Forwarding und su

Dies funktioniert wunderbar in der eigenen User-Session. Wechselt man aber mithilfe des su-Kommandos innerhalb der SSH-Verbindung den Nutzer und versucht dann wiederum eine GUI zu starten, so wird man mit folgendem Fehler konfrontiert:
$ ssh -X user@server
user@server's password: ***********************************
Welcome on server s!
Last login: Tue Jul 21 09:02:19 2015 from you.your.domain
$ su
Password: ************************************
# meineGrafischeAnwendung
X11 connection rejected because of wrong authentication.
WARNING **: Could not open X display

Was is'n da los?
Die X11-Verbindung wurde abgelehnt, weil der nun (über su) angemeldete Nutzer (root) sich nicht für den X11-Zugriff authentifiziert hat.
Beim Aufbau der SSH-Verbindung wurde für den sich anmeldenden Nutzer ein Cookie angelegt, der ihn berechtigt eine X11-Verbindung aufzubauen, also grafische Anwendungen auszuführen. Für den zweiten Log-in via su, geschieht dies nicht und folglich wird der Zugriff verweigert.

Was kann man machen, um auch nach dem su-Befehl noch GUIs starten zu können?

Man kann den Cookie mitnehmen! Mit dem kleinen X11-Tool xauth kann man sich die "Magic Cookies" ganz einfach anzeigen lassen und sie auch bearbeiten. Es ermöglicht es somit, vorhandene Cookies mit in die neue Nutzer-Session zu übernehmen:
$ ssh -X user@server
user@server's password: ***********************************
Welcome on server s!
Last login: Tue Jul 21 10:58:12 2015 from you.your.domain
$ xauth list
s/unix:10 MIT-MAGIC-COOKIE-1 faf12f5ba1101f1afdf5f1fa111161c4
su
Password: ************************************
# xauth add s/unix:10 MIT-MAGIC-COOKIE-1 faf12f5ba1101f1afdf5f1fa111161c4
# meineGrafischeAnwendung
OK.

Das Vorgehen ist sehr simpel. Man loggt sich wie gewöhnlich (mit dem -X Parameter) per SSH ein. Bevor man dann mittels su den Nutzer wechselt, fragt man unter Verwendung des Kommandos xauth list den Magic-Cookie ab und kopiert diesen in die Zwischenablage. Nachdem man dann den su-Befehl ausgeführt hat, fügt man den kopierten Magic-Cookie mittels xauth add zur neuen User-Session hinzu.
Danach kann man auch als root-Benutzer die gewünschte grafische Anwendung starten.

Danke, Katja.

Geschnatter

5 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
Katja, am 21.07.2015 um 12:49 Uhr
Nak? Nak? Nak? Nanak Nak? nak. Nak? nanak Nak? nak? Nananak Nanak
Antwort: Gern :)
Anonym, am 21.07.2015 um 15:13 Uhr
Muss dazu auf dem Server X11 installiert sein oder nur auf dem Client?
Antwort: xauth muss (samt Abhängigkeiten) auf dem Server installiert werden. Das sollte (wenn ich mich nicht irre) ausreichen.
sabrina, am 01.08.2015 um 15:50 Uhr
Da fehlen mir die Worte!
Pelzi, am 30.09.2015 um 18:44 Uhr
Sehe ich eigentlich richtig, dass das seit KDE5 mit KDE-Programmen nicht mehr funktioniert? (GLX2)
Anonym, am 20.11.2015 um 13:32 Uhr
Der "kleine Offtopic-Link" hat mir den Tag versüßt. :D