Frage Wie benutzt man xauth, um eine grafische Anwendung über einen anderen Benutzer unter Linux auszuführen?


Mein reguläres Benutzerkonto ist, sagen wir, Benutzer1. Ich habe separate Benutzer2 für einige x-Anwendungen erstellt, die ich ausführen möchte, während ich in x als Benutzer1 angemeldet bin, aber auf eine Weise, die den Lese- / Schreibzugriff auf Benutzer1-Daten verhindert. Ich dachte, dass ich xauth und sudo / su zu Benutzer2 von Benutzer1 verwenden könnte, um diese Anwendung auszuführen. Wie mache ich das? Ich bin mir nicht sicher, wie xauth zu konfigurieren ist.


44
2017-08-06 16:19


Ursprung




Antworten:


Um xauth zu verwenden selektiv, als Benutzer1 ausführen:

xauth list|grep `uname -n`

Dadurch werden die Autorisierungseinträge für die Hexschlüssel für Sie gedruckt. Sie könnte Auch diese Hosts haben unterschiedliche Anzeigen.

Wenn Benutzer2 Ihre Anzeige einstellt (vorausgesetzt, Standardfall):

DISPLAY=:0; export DISPLAY

Dann renne:

xauth add $DISPLAY . hexkey

Notieren Sie sich den Punkt nach dem $ DISPLAY und vor dem Hexkey.

Wenn der Zugriff nicht mehr benötigt wird, können Sie als Benutzer2 Folgendes ausführen:

xauth remove $DISPLAY

29
2017-08-07 18:11



Problem 1: user2 hat keine .Xauthority Datei im Benutzerverzeichnis von Benutzer2. Problem 2: Irgendwie und aus irgendeinem Grund verstehe ich nicht, nach su, XAUTHORITY hält den Dateipfad zu Benutzer1. Diese Datei ist jedoch für Benutzer2 nicht lesbar. - Otheus
Scheint, du hast es vergessen unset XAUTHORITY  unter Benutzer2 - socketpair
ist der hexkey in dem xauth add befehle das gleiche wie von xauth list oder muss ich einen neuen Zufall erstellen? - bonanza
Bonanza: Es ist die eine Ausgabe von Xauth-Liste. - John Eikenberry
Eine andere Möglichkeit, dies zu tun, wäre etwas wie ... "xauth extract - $ DISPLAY | sudo -iu dampf xauth merge -". In diesem Fall habe ich XAUTHORITY in .profile eingestellt, so dass das 'sudo -i' das richtig setzt. - John Eikenberry


Ich setze meine ein .zshrc eine Linie mit export XAUTHORITY=~/.Xauthority und jetzt kann ich ausführen sudo -E xcommand. Nach vielem Googeln war das für mich der einfachste Weg.


11
2018-01-14 17:54



Beachten Sie, dass diese Prozedur normalerweise nicht benötigt wird sudo -E (und verwenden -E ist bei den meisten Standardinstallationen deaktiviert) weil normalerweise der Standard ist sudoersKonfiguration würde erlauben die XAUTHORITY Umgebungsvariable, die an Sudo übergeben werden soll. - Guss
@Guss Es tut es nicht benötigen  -E. Es kann als eine Variable festgelegt werden, die übergeben werden kann, und entweder Red Hat oder Debian schlägt es vor. - Daniel C. Sobral
@ DanielC.Sobral - das habe ich gesagt :-) - Guss
@Guss Oh, Entschuldigung. Ich invertierte jeden Satz, den du geschrieben hast. :-) - Daniel C. Sobral
Funktionierte immer noch nicht für mich, auf Mac OS X mit zsh - Sridhar-Sarnobat


Annahme von Debian oder Ubuntu (sollte bei Red Hat / SUSE ähnlich sein).

sudo apt-get install sux
sux user -c 'command'

10
2017-08-07 02:18



+1 gute Antwort, kein Sinn, das Rad neu zu erfinden. Übrigens macht sut meistens das, was meine Antwort oben suggeriert. Es ist natürlich leistungsfähiger und einfacher zu benutzen. - sleske
Sie werden bemerken, dass 'sux' tatsächlich ein ist einfach Shell-Skript, auch .. - Martin Mächler
sux wird nicht gepflegt (und aus den Debian / Ubuntu-Repositories entfernt): packages.qa.debian.org/s/sux/news/20140101T172633Z.html - Rob W


Erstens: Nicht benutzen xhost +es ist ziemlich unsicher (Decke erlauben / verweigern).

Verwenden Sie stattdessen den X-Cookie-Mechanismus:

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0

Alternativ, wenn Sie haben sux installiert, benutze das (siehe ehempels Antwort).

In beiden Fällen wird user2 das geheime Cookie in .Xauthority verwenden, um sich für den X-Server zu autorisieren, und niemand anderes wird darauf zugreifen können.

Anmerkungen:

  • Abhängig von Ihren Dateiberechtigungen müssen Sie möglicherweise .Xauthority auf eine andere Weise kopieren.
  • Anstatt zu kopieren .Xauthoritykannst du auch benutzen xauth um den Autorisierungsschlüssel zu extrahieren und zu kopieren (siehe Randalls Antwort). Wenn Sie mehrere Schlüssel in der .Xauthority Datei ist dies selektiver; Ansonsten ist es Geschmackssache.

9
2017-08-06 16:35



Ja, ich habe Root-Zugang auf dieser Maschine - Phil
Dies ist nur manuell Kopieren der Xauth-Cookies über Root-Zugriff. Dies unterscheidet sich nicht von der Verwendung von xauth, wie Randall in der (aktuellen) Top-Antwort erklärt, außer dass es jeden Cookie kopiert, den 'xauth list' anzeigen würde. Das ist also weniger sicher als die oberste xauth-Antwort, die nur die von Ihnen gewählten Cookies hinzufügt. - John Eikenberry
@JohnEikenberry: Stimmt, danke, dass du darauf hingewiesen hast. Ich habe meine Antwort aktualisiert. - sleske


Dies wird das Problem für alle Benutzer beheben:

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF

7
2018-02-04 18:48



Dies ist im Grunde, was ich getan habe und es funktioniert super, danke! - Guss


Als Wurzel:

xhost local:yourusername

Wo Ihr Benutzername ist Ihr Benutzername :)

Dann tun Sie su als Ihr Benutzer      xclock sollte funktionieren, wenn es installiert ist


3
2017-09-08 09:26





Das sind nur Hacks:

  • xauth + (unsicher)
  • ssh -X Benutzer2 @ localhost (hässlich)

Sleske oben hat, denke ich, die richtige Lösung.


2
2017-08-06 17:55



ssh -X ist eine sehr einfache und elegante Lösung, die nicht von veralteten / nicht gepflegten gtk / kde-Sachen abhängt (die die Installation von mehr Binärdateien mit SUID-Bit erfordern ...). - Stefan


Ich habe etwas gefunden, das auf KDE gut für mich funktioniert

kdesu -u username /path/to/program

2
2017-08-06 23:44



Auf debian Teil von kde-cli-toolsund nicht in $PATH aber in /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu (offensichtlich abhängig von der Architektur). - Stefan