Posts etiquetados ‘xauth’

Sobre el post “Script para propagar credenciales X11 mediante sudo”

Recomiendo que se entienda cómo funciona esto de las X. Os ayudará, y no sufriréis cuando las cosas no funcionen:

  1. Cuando te logueas, se crea:
  • La variable $DISPLAY=localhost:11.0. Eso indica que hay un servidor de X escuchando en el puerto TCP 6011 de localhost. En el caso del SSH, se crea un túnel virtual al servidor de X de tu PC.
  • Se da de alta una clave (como las claves de SSH o certificados de SSL) en .Xauthority. Se puede consultar con xauth:
$ xauth list
hostname/unix:14  MIT-MAGIC-COOKIE-1  6a45c2933b65cd936f3e9031c8553d75
  1. Cuando ejecutas el script, lo único que se hace es EXPORTAR la clave (xauth extract fichero <host>/11.0) e importárselo al usuario destino (xauth merge fichero), usando sudo para ejecutar los comandos.

3.  Al hacer sudo al usuario destino, debe permanecer la variable $DISPLAY. En ocasiones sudo está configurado para no propagar esa variable, por lo que si no tiene valor, se le debe asignar (de ahí lo de sudo -u usuario DISPLAY=… –s)

Esto puede fallar:

  1. Porque no se crea el $DISPLAY o la clave inicial. Esto a su vez es:
    1. Porque no está instalado el xauth o no está en el $PATH del usuario.
    2. Porque el servidor de SSH no tiene habilitado el soporte de X forwarding.
    3. Porque el $HOME del usuario no está accesible para escritura/lectura/bloqueo.
    4. Porque el servidor no tienes arrancado el servidor de X o bien configurado el X forwarding: (http://www.cse.unsw.edu.au/~helpdesk/documentation/Putty.html)
  1. Porque no se propagan las credenciales al usuario destino:
    1. Porque no está instalado el xauth o no está en el $PATH del usuario.
    2. Porque el $HOME del usuario destino no está accesible para escritura/lectura/bloqueo.
    3. Porque no se tiene permisos para hacer sudo.
Anuncios

Los usuarios-administradores de servicios que corren en mi máquina muchas veces tienen que ejecutar programas gráficos. Por supuesto, les tengo prohibido entrar con usuarios de sistema o servicios, y les obligo a usar sudo para convertirse en el usuario de turno.

Para simplificarles la vida, he hecho este script que propaga las credenciales X11, a un usuario destino usando sudo.

De esta forma podemos entrar en una máquina con nuestro usuario corporativo con las X11 activas (p.ej. con Xming) y poder usar el sistema gráfico con un usuario de sistema, como oracle o was.

En inglés: Script to propagate xauth (x11) credentials to other user using sudo.

El script:

Para eso sólo hay que ejecutar:

./xauth-propagate-to-user.sh <usuario>

Por ejemplo:

$ ./xauth-propagate-to-user.sh pepito
Testing the display 'localhost:17.0'. Close the graphical program 'xclock' when displayed
(...)
Exporting dcdcorejees1/unix:12 to user pepito.
myuser's password for sudo: *****
WARNING, sudo does not propagate the $DISPLAY variable. It must be set manually:
 'sudo -H -u pepito DISPLAY=localhost:17.0 <command>'
Testing the display 'localhost:17.0' for user 'pepito'. Close the graphical program 'xclock' when displayed
(...)
It works!!!
To execute any command as 'pepito', use this command line:
 'sudo -H -u pepito DISPLAY=localhost:17.0 <command> [<args>]'

So. to work with a shell with 'pepito', execute this command:'
 'sudo -H -u pepito DISPLAY=localhost:17.0 sh'

Luego, durante esa sesión, podremos convertirnos al usuario de turno y ejecutar comandos que requieran entorno gráfico.

IMPORTANTE: en el sudo debe indicarse la opción –H, para que establezca el $HOME al del usuario destino.