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