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