Zum Inhalt springen

Grafische Anwendung als root starten: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
[[Category:Graphical user interfaces]]
[[Category:Security]]


; Warnung
Alle folgenden Methoden haben Auswirkungen auf die Sicherheit, die Benutzer kennen sollten. Wie [von Emmanuele Bassi, einem GNOME-Entwickler, https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5 beschrieben
: [...] es gibt keine *echten*, fundierten, technologischen Gründe, warum jemand eine GUI-Anwendung als root ausführen sollte. Wenn Sie GUI-Anwendungen als Admin-Benutzer ausführen, führen Sie buchstäblich Millionen von Codezeilen aus, die nicht ordnungsgemäß auf die Ausführung mit erhöhten Berechtigungen geprüft wurden. Sie führen auch Code aus, der Dateien in Ihrem $HOME berührt und möglicherweise deren Eigentümer im Dateisystem ändert. Sie stellen über IPC eine Verbindung zu noch mehr ausgeführtem Code her usw.
: Sie öffnen eine riesige, klaffende Sicherheitslücke [...].


; Warning
Vermeiden Sie es, grafische Anwendungen nach Möglichkeit als [[root-Benutzer|root]] auszuführen, siehe [[#Umgehen der Ausführung grafischer Anwendungen als root]].
All of the following methods have security implications that users should be aware of. As [https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5 described] by Emmanuele Bassi, a GNOME developer
: [...] there are no *real*, substantiated, technological reasons why anybody should run a GUI application as root. By running GUI applications as an admin user you are literally running millions of lines of code that have not been audited properly to run under elevated privileges; you are also running code that will touch files inside your $HOME and may change their ownership on the file system; connect, via IPC, to even more running code, etc.
: You are opening up a massive, gaping security hole [...].


Avoid running graphical applications as [[root user|root]] if possible, see [[#Circumvent running graphical applications as root]].
== Umgehen der Ausführung grafischer Anwendungen als root ==
 
== Circumvent running graphical applications as root ==
=== sudoedit ===
=== sudoedit ===


To edit files as root, use [[sudoedit]].
Um Dateien als root zu bearbeiten, verwenden Sie [[sudoedit]].


=== GVFS ===
=== GVFS ===
Access to privileged files and directories is possible through [[GVFS]] by specifying the {{ic|admin}} [https://wiki.gnome.org/Projects/gvfs/backends backend] in the URI scheme[https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c27][https://bugzilla.gnome.org//show_bug.cgi?id=772875#c2], e.g.:
Der Zugriff auf privilegierte Dateien und Verzeichnisse ist über [[GVFS]] möglich, indem der {{ic|admin}} [https://wiki.gnome.org/Projects/gvfs/backends backend] im URI-Schema [https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c27][https://bugzilla.gnome.org//show_bug.cgi?id=772875#c2] angegeben wird, z. B.:


$ nautilus admin:///root/
$ nautilus admin:///root/


or
oder


$ gedit admin:///etc/fstab
$ gedit admin:///etc/fstab


{{Tip|1=This can also be done from the application location bar/file selector: e.g. in {{Pkg|nautilus}} or {{pkg|gedit}}, type {{ic|Ctrl+l}} and then prepend the {{ic|admin://}} scheme to the resource path. The same effect can be attained via the [https://wiki.gnome.org/Apps/Files?action=AttachFile&do=get&target=network.png Other locations] server address bar.}}
Dies kann auch über die Adressleiste/Dateiauswahl der Anwendung erfolgen: Geben Sie z. B. in „nautilus“ oder „gedit“ „Strg+l“ ein und stellen Sie dann dem Ressourcenpfad das Schema „admin://“ voran. Der gleiche Effekt kann über die Server-Adressleiste [https://wiki.gnome.org/Apps/Files?action=AttachFile&do=get&target=network.png Other locations] erzielt werden.


== Xorg ==
== Xorg ==
By default, and for security reasons, root will be unable to connect to a non-root user's [[X server]]. There are multiple ways of allowing root to do so however, if necessary.
Standardmäßig und aus Sicherheitsgründen kann root keine Verbindung zum [[X-Server]] eines Nicht-Root-Benutzers herstellen. Es gibt jedoch mehrere Möglichkeiten, root dies zu ermöglichen, falls erforderlich.


The proper, recommended way to run GUI applications under X with elevated privileges is to create a [[Polkit]] policy, as shown in [https://bbs.archlinux.org/viewtopic.php?pid=999328#p999328 this forum post]. This should however "only be used for legacy programs", as {{man|1|pkexec}} reminds. Applications should rather "defer the privileged operations to an auditable, self-contained, '''minimal''' piece of code that gets executed after doing a privilege escalation, and gets dropped when not needed"[https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5]. This may be the object of a bug report to the upstream project.
Die richtige und empfohlene Methode, GUI-Anwendungen unter X mit erweiterten Rechten auszuführen, ist die Erstellung einer [[Polkit]]-Richtlinie, wie in [https://bbs.archlinux.org/viewtopic.php?pid=999328#p999328 diesem Forumsbeitrag] gezeigt. Dies sollte jedoch „nur für Legacy-Programme verwendet werden“, wie „pkexec“ erinnert. Anwendungen sollten die privilegierten Vorgänge lieber „auf einen überprüfbaren, in sich geschlossenen, ‚‘‚minimalen‘‚‘ Codeabschnitt verschieben, der nach einer Privilegienerweiterung ausgeführt und gelöscht wird, wenn er nicht benötigt wird“ [https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5]. Dies kann Gegenstand eines Fehlerberichts an das Upstream-Projekt sein.


=== Punctual methods ===
=== Punktuelle Methoden ===
These methods wrap the application in an elevation framework and drop the acquired privileges once it exits:
Diese Methoden hüllen die Anwendung in ein Elevation-Framework und heben die erlangten Privilegien nach dem Beenden wieder auf:
* {{man|1|kdesu}} (from {{Pkg|kde-cli-tools}})
* ''kdesu'' (aus ''kde-cli-tools'')


$ kdesu ''application''
$ kdesu ''Anwendung''


* [[sudo]] (must be [[Sudo#Configuration|properly configured]])
* [[sudo]] (muss [[Sudo#Konfiguration|richtig konfiguriert]] sein)
$ sudo ''application''
$ sudo ''Anwendung''


* {{AUR|sux}} (wrapper around su which will transfer your X credentials)
* ''sux'' (Wrapper um su, der Ihre X-Anmeldedaten überträgt)
$ sux root ''application''
$ sux root ''Anwendung''


=== Alternate methods ===
=== Alternative Methoden ===
These methods will allow root to connect to a non-root user's X server, but present varying levels of security risks, especially if you run ssh. If you are behind a firewall, you may consider them to be safe enough for your requirements.
Diese Methoden ermöglichen es root, sich mit dem X-Server eines Nicht-root-Benutzers zu verbinden, bergen jedoch unterschiedliche Sicherheitsrisiken, insbesondere wenn Sie ssh ausführen. Wenn Sie sich hinter einer Firewall befinden, können Sie davon ausgehen, dass sie für Ihre Anforderungen sicher genug sind.


==== Xhost ====
==== Xhost ====
[[Xhost]] can be used to temporarily allow root access.
Mit [[Xhost]] kann der Root-Zugriff vorübergehend zugelassen werden.


==== Permanently allow root access ====
==== Root-Zugriff dauerhaft zulassen ====
; Method 1
; Methode 1
Add the line
Fügen Sie die Zeile
session         optional       pam_xauth.so
session optional pam_xauth.so


to both /etc/pam.d/su and /etc/pam.d/su-l. Then switch to your root user using su or su -.
zu /etc/pam.d/su und /etc/pam.d/su-l hinzu. Wechseln Sie dann mit su oder su - zum Root-Benutzer.


; Method 2
; Methode 2
Globally in /etc/profile
Fügen Sie global in /etc/profile


Add the following line to /etc/profile:
die folgende Zeile zu /etc/profile hinzu:
; /etc/profile
; /etc/profile
export XAUTHORITY=/home/username/.Xauthority
export XAUTHORITY=/home/username/.Xauthority


This will permanently allow root to connect to a non-root user's X server.
Dadurch kann root dauerhaft eine Verbindung zum X-Server eines Nicht-root-Benutzers herstellen.


Or, merely specify a particular app
Oder geben Sie einfach eine bestimmte Anwendung an
# XAUTHORITY=/home/''username''/.Xauthority ''appname''
# XAUTHORITY=/home/''username''/.Xauthority ''appname''


where ''appname'' is the name of the particular app. (e.g. ''kwrite'')
wobei ''appname'' der Name der jeweiligen Anwendung ist. (z. B. ''kwrite'')


== Wayland ==
== Wayland ==
Trying to run a graphical application as root via [[su]], [[sudo]] or [[polkit|pkexec]] in a Wayland session (e.g. [[GParted]] or [[Gedit]]), will fail with an error similar to this:
Der Versuch, eine grafische Anwendung als root über [[su]], [[sudo]] oder [[polkit|pkexec]] in einer Wayland-Sitzung (z. B. [[GParted]] oder [[Gedit]] auszuführen, schlägt mit einer Fehlermeldung ähnlich der folgenden fehl:


{{hc|# gedit|
{{hc|# gedit|
No protocol specified
Kein Protokoll angegeben
Unable to init server: Could not connect: Connection refused
Server kann nicht initialisiert werden: Verbindung konnte nicht hergestellt werden: Verbindung abgelehnt


(gedit:2349): Gtk-WARNING **: cannot open display: :0
(gedit:2349): Gtk-WARNING **: kann Anzeige nicht öffnen: :0
}}
}}


Before Wayland, running GUI applications with elevated privileges could be properly implemented by creating a [[Polkit]] policy, or more dangerously done by running the command in a terminal by prepending the command with {{ic|sudo}}; but under (X)Wayland this does not work anymore as the default has been made to only allow the user who started the X server to connect clients to it (see the [https://bugzilla.redhat.com/show_bug.cgi?id=1266771 bug report] and [https://gitlab.freedesktop.org/xorg/xserver/-/commit/c4534a3 the] [https://gitlab.freedesktop.org/xorg/xserver/-/commit/4b4b908 upstream] [https://gitlab.freedesktop.org/xorg/xserver/-/commit/76636ac commits] it refers to).
Vor Wayland konnte die Ausführung von GUI-Anwendungen mit erhöhten Berechtigungen ordnungsgemäß durch die Erstellung einer [[Polkit]]-Richtlinie implementiert werden, oder gefährlicher durch die Ausführung des Befehls in einem Terminal, indem dem Befehl „sudo“ vorangestellt wurde; aber unter (X)Wayland funktioniert dies nicht mehr, da standardmäßig nur der Benutzer, der den X-Server gestartet hat, Clients mit diesem verbinden darf (siehe [https://bugzilla.redhat.com/show_bug.cgi?id=1266771 bug report] und [https://gitlab.freedesktop.org/xorg/xserver/-/commit/c4534a3 the] [https:// gitlab.freedesktop.org/xorg/xserver/-/commit/4b4b908 upstream] [https://gitlab.freedesktop.org/xorg/xserver/-/commit/76636ac commits] it refers to).
 
Avoid running graphical applications as root if possible, see [[#Circumvent running graphical applications as root]].
 
A more versatile though more insecure workaround allows any graphical application to be run as root [[#Using xhost]].
 
=== Using xhost ===


{{Expansion|Mention that xhost only works under Xwayland.}}
Vermeiden Sie es, grafische Anwendungen nach Möglichkeit als root auszuführen, siehe [[#Umgehen der Ausführung grafischer Anwendungen als root]].


A more versatile —though much less secure— workaround is to use [[xhost]] to temporarily allow the root user to access the local user's X session[https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c64]. To do so, execute the following command as the current (unprivileged) user:
Eine vielseitigere, wenn auch unsicherere Lösung besteht darin, jede grafische Anwendung als root auszuführen [[#Verwendung von xhost]].


$ xhost si:localuser:root
=== Verwendung von xhost ===
Erwähnen Sie, dass xhost nur unter Xwayland funktioniert.


To remove this access after the application has been closed:
Eine vielseitigere – wenn auch viel weniger sichere – Lösung besteht darin, [[xhost]] zu verwenden, um dem Root-Benutzer vorübergehend den Zugriff auf die X-Sitzung des lokalen Benutzers zu ermöglichen [https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c64]. Führen Sie dazu den folgenden Befehl als aktueller (nicht privilegierter) Benutzer aus:


$ xhost -si:localuser:root
$ xhost si:localuser:root


=== Using sudo -E ===
Um diesen Zugriff nach dem Schließen der Anwendung zu entfernen:


You can launch an application with:
$ xhost -si:localuser:root


$ sudo -E ''program''
=== Verwendung von sudo -E ===
Sie können eine Anwendung mit folgendem Befehl starten:


which preserves environment variables like WAYLAND_DISPLAY.
$ sudo -E ''Programm''


If you want the HOME environment variable to be set to the target user, use:
wodurch Umgebungsvariablen wie WAYLAND_DISPLAY erhalten bleiben.


$ sudo -EH ''program''
Wenn Sie möchten, dass die Umgebungsvariable HOME auf den Zielbenutzer gesetzt wird, verwenden Sie:


See {{man|8|sudo}}.
$ sudo -EH ''Programm''


=== Using pkexec ===
Siehe man sudo(8)


You can launch GUI an application with:
=== Verwendung von pkexec ===
Sie können eine GUI-Anwendung mit folgendem Befehl starten:
$ pkexec env WAYLAND_DISPLAY=„$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY“ XDG_RUNTIME_DIR=/run/user/0 ''program''


$ pkexec env WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" XDG_RUNTIME_DIR=/run/user/0 ''program''
wodurch die Umgebungsvariable WAYLAND_DISPLAY erhalten bleibt.


which preserves the environment variable WAYLAND_DISPLAY.
[[Kategorie:Grafische Benutzeroberflächen]]
[[Kategorie:Sicherheit]]

Version vom 10. Februar 2025, 20:35 Uhr

Warnung

Alle folgenden Methoden haben Auswirkungen auf die Sicherheit, die Benutzer kennen sollten. Wie [von Emmanuele Bassi, einem GNOME-Entwickler, https://bugzilla.gnome.org//show_bug.cgi?id=772875#c5 beschrieben

[...] es gibt keine *echten*, fundierten, technologischen Gründe, warum jemand eine GUI-Anwendung als root ausführen sollte. Wenn Sie GUI-Anwendungen als Admin-Benutzer ausführen, führen Sie buchstäblich Millionen von Codezeilen aus, die nicht ordnungsgemäß auf die Ausführung mit erhöhten Berechtigungen geprüft wurden. Sie führen auch Code aus, der Dateien in Ihrem $HOME berührt und möglicherweise deren Eigentümer im Dateisystem ändert. Sie stellen über IPC eine Verbindung zu noch mehr ausgeführtem Code her usw.
Sie öffnen eine riesige, klaffende Sicherheitslücke [...].

Vermeiden Sie es, grafische Anwendungen nach Möglichkeit als root auszuführen, siehe #Umgehen der Ausführung grafischer Anwendungen als root.

Umgehen der Ausführung grafischer Anwendungen als root

sudoedit

Um Dateien als root zu bearbeiten, verwenden Sie sudoedit.

GVFS

Der Zugriff auf privilegierte Dateien und Verzeichnisse ist über GVFS möglich, indem der Vorlage:Ic backend im URI-Schema [1][2] angegeben wird, z. B.:

$ nautilus admin:///root/

oder

$ gedit admin:///etc/fstab

Dies kann auch über die Adressleiste/Dateiauswahl der Anwendung erfolgen: Geben Sie z. B. in „nautilus“ oder „gedit“ „Strg+l“ ein und stellen Sie dann dem Ressourcenpfad das Schema „admin://“ voran. Der gleiche Effekt kann über die Server-Adressleiste Other locations erzielt werden.

Xorg

Standardmäßig und aus Sicherheitsgründen kann root keine Verbindung zum X-Server eines Nicht-Root-Benutzers herstellen. Es gibt jedoch mehrere Möglichkeiten, root dies zu ermöglichen, falls erforderlich.

Die richtige und empfohlene Methode, GUI-Anwendungen unter X mit erweiterten Rechten auszuführen, ist die Erstellung einer Polkit-Richtlinie, wie in diesem Forumsbeitrag gezeigt. Dies sollte jedoch „nur für Legacy-Programme verwendet werden“, wie „pkexec“ erinnert. Anwendungen sollten die privilegierten Vorgänge lieber „auf einen überprüfbaren, in sich geschlossenen, ‚‘‚minimalen‘‚‘ Codeabschnitt verschieben, der nach einer Privilegienerweiterung ausgeführt und gelöscht wird, wenn er nicht benötigt wird“ [3]. Dies kann Gegenstand eines Fehlerberichts an das Upstream-Projekt sein.

Punktuelle Methoden

Diese Methoden hüllen die Anwendung in ein Elevation-Framework und heben die erlangten Privilegien nach dem Beenden wieder auf:

  • kdesu (aus kde-cli-tools)

$ kdesu Anwendung

$ sudo Anwendung

  • sux (Wrapper um su, der Ihre X-Anmeldedaten überträgt)

$ sux root Anwendung

Alternative Methoden

Diese Methoden ermöglichen es root, sich mit dem X-Server eines Nicht-root-Benutzers zu verbinden, bergen jedoch unterschiedliche Sicherheitsrisiken, insbesondere wenn Sie ssh ausführen. Wenn Sie sich hinter einer Firewall befinden, können Sie davon ausgehen, dass sie für Ihre Anforderungen sicher genug sind.

Xhost

Mit Xhost kann der Root-Zugriff vorübergehend zugelassen werden.

Root-Zugriff dauerhaft zulassen

Methode 1

Fügen Sie die Zeile session optional pam_xauth.so

zu /etc/pam.d/su und /etc/pam.d/su-l hinzu. Wechseln Sie dann mit su oder su - zum Root-Benutzer.

Methode 2

Fügen Sie global in /etc/profile

die folgende Zeile zu /etc/profile hinzu:

/etc/profile

export XAUTHORITY=/home/username/.Xauthority

Dadurch kann root dauerhaft eine Verbindung zum X-Server eines Nicht-root-Benutzers herstellen.

Oder geben Sie einfach eine bestimmte Anwendung an

  1. XAUTHORITY=/home/username/.Xauthority appname

wobei appname der Name der jeweiligen Anwendung ist. (z. B. kwrite)

Wayland

Der Versuch, eine grafische Anwendung als root über su, sudo oder pkexec in einer Wayland-Sitzung (z. B. GParted oder Gedit auszuführen, schlägt mit einer Fehlermeldung ähnlich der folgenden fehl:

Vorlage:Hc

Vor Wayland konnte die Ausführung von GUI-Anwendungen mit erhöhten Berechtigungen ordnungsgemäß durch die Erstellung einer Polkit-Richtlinie implementiert werden, oder gefährlicher durch die Ausführung des Befehls in einem Terminal, indem dem Befehl „sudo“ vorangestellt wurde; aber unter (X)Wayland funktioniert dies nicht mehr, da standardmäßig nur der Benutzer, der den X-Server gestartet hat, Clients mit diesem verbinden darf (siehe bug report und the [https:// gitlab.freedesktop.org/xorg/xserver/-/commit/4b4b908 upstream] commits it refers to).

Vermeiden Sie es, grafische Anwendungen nach Möglichkeit als root auszuführen, siehe #Umgehen der Ausführung grafischer Anwendungen als root.

Eine vielseitigere, wenn auch unsicherere Lösung besteht darin, jede grafische Anwendung als root auszuführen #Verwendung von xhost.

Verwendung von xhost

Erwähnen Sie, dass xhost nur unter Xwayland funktioniert.

Eine vielseitigere – wenn auch viel weniger sichere – Lösung besteht darin, xhost zu verwenden, um dem Root-Benutzer vorübergehend den Zugriff auf die X-Sitzung des lokalen Benutzers zu ermöglichen [4]. Führen Sie dazu den folgenden Befehl als aktueller (nicht privilegierter) Benutzer aus:

$ xhost si:localuser:root

Um diesen Zugriff nach dem Schließen der Anwendung zu entfernen:

$ xhost -si:localuser:root

Verwendung von sudo -E

Sie können eine Anwendung mit folgendem Befehl starten:

$ sudo -E Programm

wodurch Umgebungsvariablen wie WAYLAND_DISPLAY erhalten bleiben.

Wenn Sie möchten, dass die Umgebungsvariable HOME auf den Zielbenutzer gesetzt wird, verwenden Sie:

$ sudo -EH Programm

Siehe man sudo(8)

Verwendung von pkexec

Sie können eine GUI-Anwendung mit folgendem Befehl starten: $ pkexec env WAYLAND_DISPLAY=„$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY“ XDG_RUNTIME_DIR=/run/user/0 program

wodurch die Umgebungsvariable WAYLAND_DISPLAY erhalten bleibt.