Vraag hoe xauth te gebruiken om een ​​grafische applicatie uit te voeren via een andere gebruiker op Linux


Mijn normale gebruikersaccount is, laten we zeggen, user1. Ik heb aparte user2 gemaakt voor een x-toepassing die ik wil uitvoeren terwijl ik als x op x ingelogd ben, maar op een manier die het lezen / schrijven van toegang tot user1-gegevens voorkomt. Ik dacht dat ik xauth en sudo / su kon gebruiken voor user2 van user1 om deze applicatie uit te voeren. Hoe doe ik dit? Ik weet niet zeker hoe ik xauth moet configureren.


44
2017-08-06 16:19


oorsprong




antwoorden:


Xauth gebruiken selectief als user1 run:

xauth list|grep `uname -n`

Hiermee drukt u de hexkey-autorisatie-invoer voor u af. U kon hebben ook verschillende weergaven geassocieerd met die hosts.

Als user2 uw display heeft ingesteld (uitgaande van standaardcase):

DISPLAY=:0; export DISPLAY

Voer dan uit:

xauth add $DISPLAY . hexkey

Let op de stip na de $ DISPLAY en vóór de hexkey.

Als toegang niet langer nodig is, kunt u als gebruiker2 het volgende uitvoeren:

xauth remove $DISPLAY

29
2017-08-07 18:11



Probleem 1: user2 heeft nee .Xauthority bestand in de home directory van user2. Probleem 2: Een of andere manier en om wat voor reden die ik niet begrijp, na su, XAUTHORITY houdt het bestandspad vast voor gebruikers1's. Maar dat bestand kan niet door gebruiker2 worden gelezen. - Otheus
Lijkt, je bent het vergeten unset XAUTHORITY  onder user2 - socketpair
is de hexkey in de xauth add commando hetzelfde als uit xauth list of moet ik een willekeurige nieuwe maken? - bonanza
bonanza: het is de uitvoer van xauth-lijst. - John Eikenberry
Een andere manier om dit te doen is iets als ... "xauth extract - $ DISPLAY | sudo -iu steam xauth merge -". In dit geval heb ik XAUTHORITY ingesteld op .profile, dus de 'sudo -i' krijgt die set goed. - John Eikenberry


Ik heb in mijn .zshrc een regel met export XAUTHORITY=~/.Xauthority en nu ben ik in staat om uit te voeren sudo -E xcommand. Na veel googelen was dit voor mij de gemakkelijkste manier.


11
2018-01-14 17:54



Merk op dat deze procedure normaal gesproken niet vereist dat je gebruikt sudo -E (en gebruiken -E is uitgeschakeld voor de meeste standaardinstallaties) omdat dit normaal de standaardinstelling is sudoersconfiguratie zou de XAUTHORITY omgevingsvariabele doorgeven aan sudo. - Guss
@Guss Dat doet het niet vereisen  -E. Het kan worden ingesteld als een variabele die kan worden doorgegeven, en Red Hat of Debian suggereert dit. - Daniel C. Sobral
@ DanielC.Sobral - dat is wat ik zei :-) - Guss
@ Guss Oh, sorry. Ik heb op de een of andere manier elke zin omgekeerd die je hebt geschreven. :-) - Daniel C. Sobral
Nog steeds werkte het niet voor mij, op Mac OS X met zsh - Sridhar-Sarnobat


Veronderstellend debian of ubuntu (zou gelijkaardig moeten zijn op Red Hat / SUSE).

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

10
2017-08-07 02:18



+1 goed antwoord, geen zin om het wiel opnieuw uit te vinden. Overigens doet sux meestal wat mijn antwoord hierboven suggereert. Het is natuurlijk krachtiger en gemakkelijker te gebruiken. - sleske
Je zou kunnen opmerken dat 'sux' inderdaad een is eenvoudig shell script, ook .. - Martin Mächler
sux wordt niet bewaard (en verwijderd uit de repositories van Debian / Ubuntu): packages.qa.debian.org/s/sux/news/20140101T172633Z.html - Rob W


Ten eerste: niet gebruiken xhost +, het is nogal onveilig (algemeen toestaan ​​/ weigeren).

Gebruik liever het X-Cookie-mechanisme:

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

Als alternatief, als je dat hebt gedaan sux geïnstalleerd, gebruik dat (zie het antwoord van ehempel).

In beide gevallen gebruikt user2 de geheime cookie in .Xauthority om te autoriseren voor de X-server, en niemand anders zal er toegang toe hebben.

Opmerkingen:

  • Afhankelijk van uw bestandsmachtigingen, moet u mogelijk .Xauthority op een andere manier kopiëren.
  • In plaats van kopiëren .Xauthority, je kan ook gebruiken xauth om de autorisatiesleutel uit te pakken en te kopiëren (zie Randall's antwoord). Als u meerdere sleutels hebt in de .Xauthority bestand dit is selectiever; anders is het een kwestie van smaak.

9
2017-08-06 16:35



ja, ik heb root-toegang op die machine - Phil
Dit is alleen het handmatig kopiëren van de xauth-cookies via root-toegang. Dit is niet anders dan het gebruik van xauth zoals Randall uitlegt in het (huidige) topantwoord, behalve dat het elke cookie kopieert die 'xauth-lijst' zou laten zien. Dus dit is minder veilig dan het top xauth antwoord dat alleen de cookies zou toevoegen die je kiest. - John Eikenberry
@JohnEikenberry: True, bedankt dat je dit hebt uitgelegd. Ik heb mijn antwoord bijgewerkt. - sleske


Hiermee wordt het probleem voor alle gebruikers opgelost:

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

7
2018-02-04 18:48



Dit is eigenlijk wat ik heb gedaan en het werkt geweldig, bedankt! - Guss


Als root:

xhost local:yourusername

Waar uw gebruikersnaam uw gebruikersnaam is :)

Doe dan su als uw gebruiker      xclock zou moeten werken als het is geïnstalleerd


3
2017-09-08 09:26





Dit zijn slechts hacks:

  • xauth + (onbeveiligd)
  • ssh -X user2 @ localhost (lelijk)

sleske hierboven heeft volgens mij de juiste oplossing.


2
2017-08-06 17:55



ssh -X is een zeer eenvoudige en elegante oplossing, niet afhankelijk van enig verouderd / niet-onderhouden gtk / kde-materiaal (waarvoor meer binaire bestanden moeten worden geïnstalleerd met SUID-bit ...). - Stefan


Ik heb iets gevonden dat voor mij prima werkt op KDE

kdesu -u username /path/to/program

2
2017-08-06 23:44



Op debian deel van kde-cli-tools, en niet in $PATH maar in /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu (uiteraard afhankelijk van de architectuur). - Stefan