Next Previous Contents

3. O xauth

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.

3.1 Listando os Magic-Cookies

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.

3.2 Inserindo um Magic-Cookie

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...

3.3 Criando magic-cookies

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 

O script acima deve funcionar na maior parte dos casos. Para fazer um teste, acrescente um 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.

3.4 Trocando Magic-Cookies

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
                        


Next Previous Contents 1