Introducci�n
El objeto de este art�culo es la instalaci�n y uso del gestor de
pantalla X (X Display Manager). El gestor de pantallas se ejecuta como
un demonio en una m�quina y gestiona m�ltiples pantallas X (tanto
remotas como locales) ofreciendo una gesti�n b�sica al usuario de
forma an�loga a como lo hacen init(8), getty(1) y
login(1) sobre terminales de texto. Tambi�n ofrece utilidades
para limpiar las pantallas sobre las que ya no hay un servidor X
ejecut�ndose. Una de las caracter�sticas m�s valiosas del xdm es su
habilidad para generar informaci�n de autorizaci�n que puede ser
utilizada por el servidor X para controlar el acceso al nivel de
m�quina y usuario. Gracias a su capacidad para relanzar sesiones X
utilizando t�cnicas est�ndar de autentificaci�n, xdm es ideal en
lugares donde una m�quina es compartida por m�ltiples usuarios
ejecutando sesiones X individuales y personalizadas.
Contenidos
Aunque aqu� s�lo trataremos el tema de la autorizaci�n (seguridad)
bajo xdm, la seguridad en X Window es en s� mismo un tema de
inter�s y ser� tratado con mayor profundidad en el pr�ximo n�mero. Si
s�lo estas interesado en ejecutar xdm sobre una m�quina aislada puedes
saltarte la secci�n XDMCP ya que probablemente tienes un setup
perfectamente pulido y f�cil de instalar con tu distribuci�n de Linux.
Si este es el caso, seguramente puedes pasar las secciones de
personalizaci�n y de puesta en marcha del XDM pues el resto del
art�culo trata principalmente con entornos de red e interacci�n con
terminales X. Tambi�n, si est�s buscando un libro de la A a la Z sobre
instalaci�n de terminales X, te sugiero el libro "The X Window
System Administrators Guide" de O' Reilly & Associates, pues
aborda detalles de administraci�n de terminales X que est�n m�s all�
del �mbito de este art�culo.
Gesti�n de sesiones bajo X
En una conexi�n tradicional una sesi�n es un shell de login, bajo xdm
una sesi�n se controla por un gestor de sesi�n arbitrario; porque en
un entorno de ventanas un shell de login de usuario no tiene
necesariamente un programa al estilo terminal con el que
conectarse. Para la gesti�n de sesiones en el entorno de ventanas X
nosotros utilizamos el gestor de ventanas (window manager) como
"gestor de sesiones" y cuando el proceso gestor de ventanas
termina, tambi�n lo hace la sesi�n del usuario.
XDM, conceptos b�sicos
xdm es un Xclient que gestiona la entrada y salida de una conexi�n,
controla y coordina la sesi�n un usuario. Xdm mantiene un registro de
qu� servidores X hay disponibles para conectarse leyendo el fichero
Xservers y escuchando el puerto XDMCP para gestionar otros servidores
que lo pidan. Cuando al xdm se le da la gesti�n de un servidor X env�a
una ventana de login a la pantalla del servidor y espera la entrada de
alg�n usuario. En cuanto que un usuario introduce su nombre y clave
(pasword) son verificados utilizando los mismos mecanismos que una
conexi�n est�ndar tty (consola de texto). Luego xdm ejecuta una serie
de guiones de shell (shell scripts) que ponen en marcha los Xclients
que el usuario prefiere. Ahora est� en marcha una sesi�n X normal,
cuando el usuario se desconecte de esta sesi�n, xdm cierra todas las
conexiones y devuelve la terminal al estado de espera de conexi�n
(login), listo para una nueva sesi�n.
�Porqu� utilizar XDM?
A pesar de las caracter�sticas de seguridad, uso remoto y facilidad,
xinit est� considerado obsoleto por el X Consortium (ahora denominado The Open Group) con todas las
nuevas funcionalidades que se han a�adido a xdm. Xdm ofrece una forma
de configurar todo el entorno del sistema a los administradores. Xdm
es tambi�n la �nica forma que conozco de compartir la pantalla de una
m�quina entre varios usuarios sin tener que matar y re-ejecutar el
servidor X.
Configuraci�n
Xdm se configura mediante ficheros ASCII est�ndar. Sus ficheros globales de
configuraci�n se encuentran tradicionalmente en /usr/lib/X11/xdm/etc/xdm mientras que los ficheros locales se encuentran en
el directorio de trabajo (home) de cada usuario. De especial
importancia es el hecho de que en el fichero xmd-config se puede
indicar una localizaci�n diferente para todos los otros ficheros e
incluso su propia localizaci�n en el disco puede especificarse
expl�citamente cuando se ejecuta xdm utilizando el par�metro
-config, por tanto sistemas con una instalaci�n automatizada
pueden f�cilmente modificarse para dejar la instalaci�n original tal
cual. A continuaci�n hay una peque�a descripci�n de cada fichero junto
con un ejemplo comentado (cuando sea apropiado).
Ficheros globales
xdm-config
Este fichero especifica la ubicaci�n de todos los dem�s ficheros de
configuraci�n (si est�n situados en otros directorios distintos a los
por defecto) y establece los comandos para el setup, arranque, parada
y gui�n inicial del xdm. En el ejemplo que sigue se especifica que
todos los ficheros adicionales han de ser cargados bajo
/etc/X11/xdm de forma que queden los ficheros por defecto de
/usr/lib/X11/xdm sin modificar.
DisplayManager.errorLogFile: /var/log/xdm-error.log
DisplayManager.pidFile: /var/run/xdm.pid
DisplayManager.keyFile: /etc/X11/xdm/xdm-keys
DisplayManager.servers: /etc/X11/xdm/Xservers
DisplayManager.accessFile: /etc/X11/xdm/Xaccess
DisplayManager._0.authorize: true
DisplayManager._1.authorize: true
DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0
DisplayManager._0.startup: /etc/X11/xdm/GiveConsole
DisplayManager._0.reset: /etc/X11/xdm/TakeConsole
DisplayManager*resources: /etc/X11/xdm/Xresources
DisplayManager*session: /etc/X11/xdm/Xsession
DisplayManager*authComplain: false
Xservers
Una lista de servidores que pueden ser gestionados por xdm. Por lo
menos este fichero deber�a incluir el servidor local. NOTA - este
fichero s�lo se vuelve a leer despu�s de terminar una sesi�n o
si xdm recibe la se�al SIGHUP. Para enviar la se�al SIGHUP a el xdm
debes conocer su n�mero de PID del proceso.
# ps -a | grep xdm
2639 ? R 0:09 /usr/bin/X11/xdm
# kill -9 2639
Aqu� puede ver un ejemplo del fichero Xservers utilizado en una
m�quina aislada...
# Primera l�nea debe ser el display local.
:0 local /usr/X11R6/bin/X
# :0 Especif�ca consola
# local denota el servidor X est� ejecut�ndose localmente
# /usr/X11R6/bin/X ejecutable ejecutado al arrancar
# la sintaxis para el terminal X es un poco diferente
# pues ellos ejecutan el servidor X desde otra m�quina
# SOLO pon terminales X si NO soportan XDMCP
eng1:0 foreign NCD xterminal
# eng1 es el nombre de la terminal
# :0 es el display a utilizar en la terminal
# foreign significa que el servidor X est� ejecut�ndose en
# una m�quina distinta
# NCD xterminal es la clase display espec�fica de esta terminal
# y no son absolutamente necesarios.
eng2:0 foreign NCD xterminal
eng3:0 foreign Visual xterminal
Xsession
Gui�n inicial de puesta en marcha utilizado por cada sesi�n X.
#!/bin/sh
# la siguiente secci�n habilita la conexi�n segura cuando sea necesario
# utilizando despu�s del password activa el modo seguro
case $# in
1)
case $1 in
failsafe)
exec xterm -geometry 80x24-0-0
;;
esac
esac
# re-dirigir errores al fichero en el directorio home del usuario
for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER"
"/tmp/xses-$USER"
do
if ( cp /dev/null "$errfile" 2> /dev/null )
then
chmod 600 "$errfile"
exec > "$errfile" 2>&1
break
fi
done
# Utiliza los ficheros locales .xsession y .Xresources si existen
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ -x "$startup" ]; then
exec "$startup"
elif [ -x "$HOME/.Xclients" ]; then
exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
exec /etc/X11/xinit/Xclients
else
if [ -f "$resources" ]; then
xrdb -load "$resources"
fi
exec xsm
fi
Xresources
Define los recursos que se cargar�n v�a xrdb(1) por todos los
servidores gestionados por xdm.
# key settings to be used by Xlogin widget
xlogin*login.translations: #override\
# Ctrl R stops xdm from managing display
CtrlR: abort-display()\n\
# F1 or Ctrl Return run a failsafe session
# consisting of a single xterm window
F1: set-session-argument(failsafe) finish-field()\n\
CtrlReturn: set-session-argument(failsafe) finish-field()\n\
Return: set-session-argument() finish-field()
# display setings for Xlogin widget to be displayed by xdm
xlogin*borderWidth: 3
xlogin*greeting: CLIENTHOST
xlogin*namePrompt: login:\040
xlogin*fail: Sorry Try Again
#ifdef COLOR
xlogin*greetColor: CadetBlue
xlogin*failColor: red
*Foreground: black
*Background: #fffff0
#else
xlogin*Foreground: black
xlogin*Background: white
#endif
# settings for xconsole client which is used when xdm connection on
# local server is initialized. This keeps console messages sent
between
# logins from going everywhere across the screen
XConsole.text.geometry: 480x130
XConsole.verbose: true
XConsole*iconic: true
XConsole*font: fixed
Chooser*geometry: 700x500+300+200
Chooser*allowShellResize: false
Chooser*viewport.forceBars: true
Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-*
Chooser*label.label: XDMCP Host Menu from CLIENTHOST
Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1
Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-*
xdm-pid
Fichero que contiene el identificador (pid) del proceso xdm (s�lo como
informaci�n, no lo edites).
xdm-errors
Fichero de registro (log) de los errores del xdm.
Xaccess
Configura el control de acceso para XDMCP (X11R5 y posteriores). Este
fichero s�lo define los permisos de acceso para consultas XDMCP . Este
fichero tambi�n permite definir macros para agrupar l�gicamente
m�quinas relacionadas. El Control de acceso del servidor se activa
utilizando el recurso DisplayManager*authorize en el
fichero xdm-config. Para m�s informaci�n sobre configuraci�n
de XDMCP y ejemplos ver la secci�n CHOOSER.
GiveConsole
Es un gui�n de shell utilizado para cambiar la propiedad de la consola
del usuario. A no ser que tengas muy buenas razones, deja este gui�n
y el de takeconsole como est�n por defecto (que son los que se
muestran a continuaci�n):
#!/bin/sh
# Assign ownership of the console to the invoking user
# $XConsortium: GiveConsole,v 1.2 93/09/28 14:29:20 gildea Exp $
#
# By convention, both xconsole and xterm -C check that the
# console is owned by the invoking user and is readable before attaching
# the console output. This way a random user can invoke xterm -C without
# causing serious grief.
#
chown $USER /dev/console
TakeConsole
Un gui�n de shell que devuelve la propiedad de la consola a "root"
(X11R5 y posteriores). Otra vez, deja este fichero tranquilo.
#!/bin/sh
# Reassign ownership of the console to root, this should disallow
# assignment of console output to any random users's xterm
# $XConsortium: TakeConsole,v 1.2 93/09/28 14:30:29
#
chmod 622 /dev/console
chown root /dev/console
Xsetup_0
Gui�n shell utilizado para inicializar la pantalla de la consola
local (X11R5 o posteriores). Inicializa la xconsole: una
terminal en ventana que muestra los mensajes del sistema que se
producen entre conexiones (logins).
#!/bin/sh
# $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31
/usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify
-verbose -fn fixed -exitOnFail
Ficheros Locales
~/.xsession
Recursos espec�ficos de cada usuario leidos por el gui�n global
Xsesion.
~/.xsession-errors
Fichero de registro para los errores de cada usuario.
~/.Xauthority
Contiene informaci�n de autorizaci�n del usuario.
XDMCP
El X Display Manager Control Protocol (XDMCP) fue primero introducido
en la versi�n X11R4 para resolver varios problemas entre xdm y
terminales X. Antes del XDMCP la �nica forma que xdm ten�a de conocer
qu� servidores hab�a disponibles era leyendo el fichero
Xservers. Puesto que el fichero Xservers solo se lee al
arrancar xdm, aparec�an problemas cuando terminales X se apagaban y
volv�an a enchufar. B�sicamente, cada vez que una terminal X se
conectaba (se pon�a en marcha) despu�s de estar apagada, era necesario
que el Administrador del sistema forzara xdm a re-leer el fichero
Xservers envi�ndole la se�al SIGHUP.
XDMCP permite que los servidores hablen con xdm sin tener �ste un
conocimiento expl�cito previo del servidor. Bajo XDMCP, la m�quina
escucha peticiones (en cualquiera de los tres diferentes formas de
comunicaci�n soportados) en un puerto XDMCP y cuando recibe unas
peticiones de gesti�n, crea una copia de �l mismo (spawns) y env�a la
pantalla de conexi�n a esa terminal.
Modos de comunicaci�n
XDMCP permite utilizar tres modos de comunicaci�n con servidores
pidiendo gesti�n que no aparecen en el fichero Xservers; estos
m�todos son: DIRECT, INDIRECT o BROADCAST. En el modo DIRECT un
servidor est� haciendo una petici�n no espec�fica de gesti�n a la
red. El primer proceso xdm que responda esta petici�n DIRECT se
convierte en el gestor del servidor. Una petici�n INDIRECT resulta en
que la terminal recibe una ventana con la lista de todas las m�quinas
disponibles para conectarse y te permite al usuario elegir qu� m�quina
le ofrece la gesti�n. El modo INDIRECT es especialmente �til en un
entorno con m�ltiples m�quinas. Para implementar el modelo INDIRECT se
necesita utilizar el identificador CHOOSER en el fichero de
recursos Xaccess. Otra forma de implementar la elecci�n es
utilizando el modo BROADCAST en conjunci�n con el recurso CHOOSER, el
cual env�a un mensaje de BROADCAST a todas las m�quinas de la red y
permite al usuario elegir entre ellas.
Chooser
Cuando se utilizan terminales X que no ofrecen un men� de m�quinas el
arrancar el programa de elecci�n puede ser utilizado junto con los
BROADCAST o INDIRECT. Para activar el programa de elecci�n utiliza
CHOOSER como primera entrada en la lista de m�quinas indirectas del
fichero Xaccess.
modos
eng*.odhs.dsd.com CHOOSER BROADCAST
Esto permite que todas las terminales que comiencen por "eng" de odhs.dsd.com
utilicen una ventana de selecci�n listando todos las otras m�quinas
disponibles. Un escenario probable ser�a aquel en el que todas las
terminales del departamento de ingenier�a tuvieran un conjunto de
m�quinas a las cuales pueden conectarse, lo cual puede hacerse mejor
con el modo INDIRECT.
eng*.odhs.dsd.com CHOOSER dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com
test.odhs.dsd.com
La anterior asignaci�n permitir� a todos los terminales del
departamento de ingenier�a acceder a la aplicaci�n, base de datos y
testear los servidores v�a un men� de elecci�n.
El fichero Xaccess tambi�n te permitir� definir macros para
agrupar l�gicamente m�quinas relacionadas. El siguiente ejemplo
utiliza estas macros con las asignaciones anteriores.
%ENGHOSTS dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com test.odhs.dsd.com
eng*.odhs.dsd.com CHOOSER %ENGHOSTS
El aspecto del selector (para elegir) puede ser modificado a trav�s
del fichero(s) Xresources.
Ejecutando XDM
Para verificar que tu xdm se ejecuta sin necesidad de re-arrancar la
m�quina, desde la consola ejecuta:
$ init 5
Esto normalmente lanzar� el sistema al nivel 5. Xdm se ejecuta
autom�ticamente cuando el sistema entra en el nivel 5. Si cambiando al
nivel 5 no arranca el xdm mira /etc/inittab, en este fichero
se especifica en qu� nivel se arranca xdm (las distribuciones de
slackware lo arrancan algunas veces en el nivel 4, pero la mayor�a de
las distribuciones lo hacen en el nivel 5). Ahora deber�as ver la
ventana de xlogin pidiendo un nombre de cuenta y la clave asociada y
ser capaz de conectarte y comprobar varias opciones. Si est�s seguro
que el sistema est� en el nivel correcto de arranque de xdm pero no responde
como deber�a, �chale un vistazo a la secci�n de problemas m�s adelante. En caso
contrario, desde este punto puedes jugar con cada una de las opciones
(mira la secci�n de presonalizaci�n m�s adelante). Una vez tengas el
xdm configurado, puedes modificar /etc/inittab para cambiar el nivel
de arranque por defecto. En mi m�quina es tan sencillo como cambiar:
#/etc/inittab
id:3:initdefault:
por
id:5:initdefault:
Esto inicia a Linux en el nivel de arranque 5 por defecto, que a su
vez, autom�ticamente arranca xdm cada vez que el sistema arranca.
Resolviendo problemas
Si xdm no funciona como es de esperar, el primer lugar donde mirar es
~/.xsession-errors. Este fichero local de errores contiene los
errores producidos solamente cuando has accedido a tu cuenta y es por tanto m�s
espec�fico que los errores del sistema. Abajo, he esbozado algunos de
las potenciales pifias y sus potenciales soluciones.
La ventana de conexi�n (login) no aparece en la
pantalla
Este es muy probablemente un error en los ficheros de configuraci�n,
�Est�s intent�ndolo antes de cambiar el nivel de arranque del sistema?
Puedes conectarte con �xito y la ventana de
conexi�n desaparece
Tu fichero .xsesion puede que no sea ejecutable. Intenta
conectarte, pero pulsa CTRL-RETURN despu�s de la palabra clave
en lugar de Enter. Esto pasar� por alto el gui�n
.xsesion y te dar� un terminal simple en una ventana desde la
que puedes:
# chmod +x .xsession
e int�ntalo otra vez.
Despu�s de conectarte, la pantalla parpadea y
la ventana de conexi�n (login) vuelve a aparecer.
Emplea el m�todo descrito en el escenario anterior para saltarte el
fichero .xsesion durante la conexi�n y aseg�rate que el �ltimo
comando de .xsesion se ejecuta en segundo plano (background).
Conclusi�n
Espero que este art�culo te haya convencido de la potencia y
flexibilidad de X Display Manager. Si lo que buscas es m�s informaci�n
sobre xdm por favor mira los enlaces que hay al final. En la siguiente
entrega, investigaremos en el, a menudo olvidado, tema de la seguridad en
X Window. No dudes en enviarme un mail si tienes dudas o alg�n
comentario a [email protected].
|