como usar o xauth para executar aplicativos gráficos através de outro usuário no linux

48

Minha conta de usuário comum é, digamos, user1. Criei user2 separado para algum aplicativo x que eu gostaria de executar enquanto estivesse conectado ao x como user1, mas de uma maneira que impedisse o acesso de leitura / gravação aos dados do user1. Eu pensei que eu poderia usar xauth e sudo / su para user2 de user1 para executar este aplicativo. Como eu faço isso? Não sei como configurar o xauth.

Phil
fonte

Respostas:

32

Para usar o xauth seletivamente, como user1, execute:

xauth list|grep `uname -n`

Isso imprime as entradas de autorização hexkey para você. Você também pode ter telas diferentes associadas a esses hosts.

Como usuário2, defina sua exibição (assumindo o caso padrão):

DISPLAY=:0; export DISPLAY

Então corra:

xauth add $DISPLAY . hexkey

Observe o ponto após o $ DISPLAY e antes da chave hexagonal.

Quando o acesso não é mais necessário, como user2, você pode executar:

xauth remove $DISPLAY
Randall
fonte
Problema 1: o usuário2 não possui nenhum .Xauthorityarquivo no diretório inicial do usuário2. Problema 2: De alguma forma e por algum motivo eu não entendo, depois que suXAUTHORITY mantém o caminho de arquivo para os user1's. Mas esse arquivo não é legível pelo usuário2.
Otheus 4/11
Parece, você esqueceu unset XAUTHORITY no user2 #
socketpair
é o hexkeyno xauth addcomando da mesma a partir de xauth listou eu tenho que criar um novo aleatório?
Bonanza
bonanza: é o único resultado da lista xauth.
John Eikenberry
1
Outra maneira de fazer isso é algo como ... "xauth extract - $ DISPLAY | sudo -iu steam xauth merge -". Nesse caso, tenho XAUTHORITY definido em .profile, para que o 'sudo -i' acerte esse conjunto.
John Eikenberry
12

Coloquei na minha .zshrclinha export XAUTHORITY=~/.Xauthoritye agora sou capaz de executar sudo -E xcommand. Depois de pesquisar bastante, para mim, essa era a maneira mais fácil.

kfl62
fonte
1
Observe que esse procedimento normalmente não exigiria o uso sudo -E(e o uso -Eestá desativado na maioria das instalações padrão) porque normalmente a sudoersconfiguração padrão permite que a XAUTHORITYvariável de ambiente seja passada para o sudo.
Guss
@ Guss Não requer -E . Pode ser definido como uma variável que pode ser passada, e é sugerida pela Red Hat ou pelo Debian.
Daniel C. Sobral
@ DanielC.Sobral - que é o que eu disse :-)
Guss
@ Guss Oh, desculpe. De alguma forma, inverti cada frase que você escreveu. :-)
Daniel C. Sobral
Ainda não funcionou para mim, no Mac OS X com zsh
Sridhar Sarnobat
9

Supondo debian ou ubuntu (deve ser semelhante no Red Hat / SUSE).

sudo apt-get install sux
sux user -c 'command'
ehempel
fonte
+1 boa resposta, não adianta reinventar a roda. Aliás, sux faz principalmente o que minha resposta acima sugere. É mais poderoso e fácil de usar, é claro.
sleske
Você pode notar, que 'sux' na verdade é um simples script shell, também ..
Martin Machler
5
suxnão está mantido (e foi removido dos repositórios Debian / Ubuntu): packages.qa.debian.org/s/sux/news/20140101T172633Z.html
Rob W
9

Primeiro: não use xhost +, é bastante inseguro (permitir / negar cobertor).

Em vez disso, use o mecanismo X-Cookie:

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

Como alternativa, se você suxinstalou, use isso (consulte a resposta do ehempel).

Nos dois casos, o usuário2 usará o cookie secreto no .Xauthority para autorizar o servidor X, e ninguém mais terá acesso a ele.

Notas:

  • Dependendo das permissões do seu arquivo, talvez você precise copiar .Xauthority de alguma outra maneira.
  • Em vez de copiar .Xauthority, você também pode usar xauthpara extrair e copiar a chave de autorização (consulte a resposta de Randall). Se você tiver várias chaves no .Xauthorityarquivo, isso é mais seletivo; caso contrário, é uma questão de gosto.
sleske
fonte
Sim, eu tenho acesso root na máquina
Phil
Isso é apenas copiar manualmente os cookies xauth via acesso root. Isso não é diferente de usar o xauth, como Randall explica na resposta principal (atual), exceto que ele copia todos os cookies que a 'lista do xauth' mostraria. Portanto, isso é menos seguro do que a resposta principal do xauth, que adicionaria apenas os cookies escolhidos.
John Eikenberry
@ JohnEikenberry: Verdade, obrigado por apontar isso. Eu atualizei minha resposta.
sleske
7

Isso corrigirá o problema para todos os usuários:

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF
JMS
fonte
Isso é basicamente o que eu fiz e funciona muito bem, obrigado!
Guss
4

Como raiz:

xhost local:yourusername

Onde yourusername é o seu nome de usuário :)

Então faça su como seu usuário xclockdeve funcionar se estiver instalado

ACV
fonte
2

Estes são apenas hacks:

  • xauth + (não seguro)
  • ssh -X usuário2 @ localhost (feio)

Acho que a sleske acima tem a solução adequada.

alex
fonte
ssh -Xé uma solução muito simples e elegante, não depende de nada do gtk / kde obsoleto / não mantido (que requer a instalação de mais binários com o bit SUID ...).
21418 Stefan
2

Encontrei algo que funciona muito bem para mim no KDE

kdesu -u username /path/to/program
Phil
fonte
Na parte debian de kde-cli-tools, e não dentro, $PATHmas dentro /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu(obviamente dependendo da arquitetura).
21418 Stefan
0

Desta forma, feita em suse / opensuse: http://www.novell.com/support/kb/doc.php?id=7003743

Simplesmente modifique o /etc/pam.d/su, adicionando a opção (negrito):

sessão opcional pam_xauth.so systemuser = 1

Então você pode alternar com su sem -:

su user2

e execute o aplicativo graficamente.

pojem
fonte
-1

Para o GNOME (e realmente sem qualquer ambiente de desktop, eu o uso apenas com o icewm) gksu:

gksu -u username program
Matija Nalis
fonte
"o gksu está obsoleto há anos": bugs.debian.org/cgi-bin/bugreport.cgi?bug=867236
Stefan #
@Stefan note que este bug do Debian tem a premissa de que elevar privilégios para todo o programa é uma má ideia, e que o programa deve ser modificado para executar apenas auxiliares mínimos com privilégios elevados (usando o PolicyKit). Esta questão (e minha resposta) é sobre a redução de privilégios, o que é outra coisa e de fato uma boa ideia (por exemplo, para navegação aleatória, tenho um atalho que executa o firefox em uma conta menos privilegiada que a minha padrão, para que qualquer exploração lá possa 't tocar os meus dados - e gksu (8) é muito bom para isso)
Matija Nalis
Tudo bem, mas usar um binário SUID obsoleto e sem manutenção está errado. Esta resposta pode ter sido útil no passado, mas não é mais.
Stefan