O xauth
trabalha de forma um pouco diferente do
xhost
. Basicamente, é criado um número hexadecimal
que é associado ao nosso DISPLAY
, e que recebe o
nome de MIT-MAGIC-COOKIE, ou mais simplesmente,
magic-cookie. A qualquer cliente que queira se conectar ao
nosso servidor é solicitado o magic-cookie, e o mesmo é
comparado com o valor que está associado ao nosso servidor
X. Se os dois forem idênticos, o cliente tem permissão para
conectar-se, senão ele vê apenas uma mensagem de erro,
informando que a conexão não foi permitida.
Normalmente, os magic-cookies são criados pelo
XDM
, quando fazemos o login gráfico, ou podem ser
criados à mão, e são armazenados em ~/.Xauthority
,
em forma binária. Podemos ter vários magic-cookies no
arquivo em questão, inclusive de outros servidores X.
Para dar permissão a um usuário de conectar seus
clientes ao nosso servidor X, tudo o que precisamos fazer
é, de alguma forma, passar o magic-cookie de nosso
DISPLAY
para o mesmo. Para isto usamos o
xauth
. Outra coisa importante: para poder utilizar
o xauth
, o acesso via xhost
deve estar
com o controle de acesso habilitado, e nenhum host deve
estar listado no mesmo. Na hora de verificar a autorização
para controle de acesso, o X verifica sempre a lista do
xhost
primeiro.
Para listar os magic-cookies de nosso arquivo
.Xauthority
, usamos a seguinte linha de
comando:
$ xauth list
myhost.example.org/unix:0 MIT-MAGIC-COOKIE-1 3331a9560f24f62db48cae9d56a01c5d
O xauth
lista todos os magic-cookies que
se encontram no arquivo .Xauthority de uma forma
que podemos ler.
Para acrescentar um magic-cookie à nossa lista,
precisamos informar os três campos: o nome do
display, o tipo de autorização (normalmente
MIT-MAGIC-COOKIE-1), e o valor do magic-cookie, da
mesma forma que aparece no comando xauth
list
:
$ xauth add myotherhost.example.org:0 MIT-MAGIC-COOKIE-1 8b50527c81e8af4493fb32bc36e15a6c
A partir deste momento, podemos conectar nossos
clientes ao servidor
myotherhost.example.org:0
que a conexão
irá ocorrer sem problemas. Por exemplo, podemos
executar o seguinte comando:
$ DISPLAY=myotherhost.example.org:0 xterm &
Este comando irá abrir uma janela xterm
no
host remoto, permitindo ao usuário que estiver
trabalhando com o mesmo de ter um shell com o nosso
login e nossas permissões para poder
trabalhar...
Normalmente, quando o login em nossa estação é
feito no modo gráfico, o XDM
(ou outro
programa que é usado para fazer o login) trata de
criar um magic-cookie apropriado para nossa seção.
E em alguns sistemas o próprio comando
starx
trata de criar um magic-cookie para
nossa sessão.
Entretanto, pode ser que nosso sistema não está criando o magic-cookie, pela razão que for. Precisamos criar um magic-cookie se queremos utilizar o xauth para o controle de acesso ao nosso display. Para isto, os seguinte comando irá gerar um número aleatório no Linux:
$ (head -c 16 /dev/random; date -u) | md5sum | cut -f 1 -d \
012c53f377bab5587524f79acba97cec
Com o magic-cookie gerado, basta acrescentar o
mesmo ao nosso .Xauthority
, usando o
comando xauth
. O script abaixo faz tudo de
uma só vez (gera o magic-cookie e acrescenta ao
.Xauthority
):
#!/bin/bash MAGIC_COOKIE=`(head -c 16 /dev/random; date -u) | md5sum | cut -f 1 -d \ ` if [ "${DISPLAY%%:*}" = "$HOSTNAME" ] then MY_DISPLAY=$DISPLAY else MY_DISPLAY=${HOSTNAME}${DISPLAY} fi xauth add $MY_DISPLAY MIT-MAGIC-COOKIE-1 $MAGIC_COOKIE
echo
no início da linha do xauth
,
para ver qual o comando que será executado, e
verifique se é exatamente o pretendido. Um ponto
sensível é se a variável $DISPLAY
contém o
hostname, mas de uma forma diferente da que está na
variável $HOSTNAME
(por exemplo, uma
destas variáveis contém o nome com o domínio, e a
outra não.
Já sabemos como criar magic-cookies e como
acrescentar magic-cookies ao nosso
.Xauthority
. Falta apenas juntar tudo em
um uso útil. O ponto crítico aqui é como iremos
passar o magic-cookie para a outra máquina.
Todos os artigos que eu consultei sobre o assunto para fazer este artigo sugerem o uso do rsh ou do xrsh. O exemplo dado é algo como:
$ xauth extract $DISPLAY | rsh remotehost xauht merge -
Depois é só executar um aplicativo remoto. Já que
estamos usando o rsh, nada impede que usemos o
mesmo para isto:
$ rsh remotehost /usr/X11R6/bin/xeyes &
Enquanto o exemplo funciona perfeitamente, ele tem
um problema sério: o uso das ``funções r'' (no
caso, o comando rsh). Em qualquer rede moderna os
assim chamados r-comandos foram banidos, por serem
muito vulneráveis.
Outro comando que pode ser usado para
automatizar o processo de trocar cookies e iniciar
um aplicativo remoto é o xrsh
. Para quem
baixar o mesmo, o uso do mesmo é bastante simples.
para fazer os passos acima usando apenas o
xrsh
, o comando é:
$ xrsh -auth xauth remoteserver /usr/X11R6/bin/xeyes