O xhost
é o mecanismo mais simples e
potencialmente o mais danoso de permitir acesso a um
servidor X.
O princípio de funcionamento do xhost
é
simples: o X mantém uma lista de hosts que tem permissão de
conectar aplicativos a si. Quando um host é acrescentado à
lista, qualquer aplicativo daquele host pode ser conectado
ao seu servidor X.
Por exemplo, para permitir que os aplicativos de
myotherhost.example.org
possam se conectar ao
nosso servidor X, executamos a seguinte linha de comando:
$ xhost +myotherhost.example.org
Com esta linha de comando, podemos iniciar um aplicativo em
myotherhost.example.org
e apresentar a tela do mesmo
no nosso servidor. Supondo que o nome de nosso host fosse
myhost.example.org
, bastaria uma seqüência do
tipo:
myhost$ telnet myotherhost.example.org
username: eumesmo
password:
myotherhost$ export DISPLAY=myhost.example.org:0.0
myotherhost$ /usr/X11R6/bin/xeyes &
O que o exemplo faz é simples: abre uma conexão telnet
para myotherhost.example.org
, configura a variável
$DISPLAY
de acordo, e inicia o xeyes. Os ``olhos''
irão aparecer em nossa tela em myhost.example.org
,
e serão uma lembrança que o host remoto está nos
espiando...
O xhost
pode ser usado de quatro formas:
sem nenhum parâmetro, ele apresenta a lista de
servidores que tem permissão para conectar-se ao
nosso servidor X, e informa se a proteção por
xhost
está habilitada ou desabilitada:
$ xhost
access control enabled, only authorized clients can connect
INET:myotherhost.example.org
O exemplo acima mostra o resultado após termos
acrescentado o host
myotherhost.example.org
à
lista de hosts permitidos do xhost
.
Uma vez acrescentado o host, podemos retirar o
mesmo da lista de controle de acesso do
xhost
usando a mesma linha de comando que
usamos para acrescentar o host, apenas trocando o
``+'' por um ``-'':
$ xhost -myotherhost.example.org
myotherhost.example.org being removed from access control list
A partir deste momento, os clientes de
myotherhost.example.org
não tem mais
permissão para se conectar ao nosso servidor X.
Podemos também abrir completamente o nosso servidor, fazendo com que o mesmo aceite conexões de qualquer host:
$ xhost +
access control disabled, clients can connect from any host
Imediatamente o xhost
nos alerta para o fato
que o controle de acesso está desabilitado, e que
clientes de qualquer host podem se conectar ao noso
servidor X.
Finalmente, podemos restabelecer o controle de acesso:
$ xhost -
access control enabled, only authorized clients can connect
A partir deste momento, a lista que tínhamos passa
a valer novamente. Se alguém duvida, execute um
xhost
...
O leitor atento terá percebido que, quando acrescentamos o nome do host que poderia fazer conexões ao nosso X, não especificamos o usuário que poderia fazê-lo. Qual usuário do host remoto terá permissão para se conectar ao nosso host? Todos. É isto mesmo, todos os usuários que estiverem conectados no host remoto poderão conectar-se ao nosso X a partir do host remoto.
Imagine agora que você está sossegado digitando
um texto quando o fundo de tela muda para uma
figura ou fotografia desagradável. A culpa é nossa
mesmo: deixamos o nosso X aberto para qualquer
usuário daquele host remoto, e alguém resolveu
animar a nossa janela, usando o comando
xloadimage(1x)
para isto. Para quem consegue
ler e entender uma página man, isto é
brincadeirinha...
Outros abusos possíveis incluem o dump da tela em um arquivo, com uma imagem de todo trabalho que estamos fazendo; e a carga de um logger de teclas, e o usuário remoto só tem que ficar atento para algo que se pareça com um login/senha...
Uma maneira simples de evitar estes abusos é
agir rapidamente: usar o xhost +host
para
dar permissão de acesso, abrir o cliente remoto, e
imediatamente após, executar um xhost
-host
para desabilitar o acesso. A
desabilitação não vai afetar as conexões já
estabelecidas, mas irá impedir novas conexões. É
claro que entre a habilitação e a desabilitação
pode acontecer muita coisa...