Abr 23 2012

Retomar una sesión SSH de la que nos desconectamos

Gabolonte Blasfemus

si Keanu lo dice por algo seráPor estos días tenía una pequeña duda existencial (no, no de estas): ¿Qué pasaba cuando me desconectaba de una sesión SSH en la que estaba corriendo algo? Bueno, en realidad la respuesta a eso la intuía por experiencia y por mirar: Cuando el cliente se desconecta la sesión, y sus procesos hijos, son eliminados. Más bien mi inquietud era: ¿Existe alguna forma de dejar un proceso corriendo en una sesión, desconectarse y que este continúe ejecutándose, para luego volver a conectarse y resumir dicha sesión?

Pongamos como ejemplo que estamos cursando la carrera de BOFH básico, y hay un luser que nos cae tan pero tan bien que vamos a copiar una de sus copias de seguridad, donde figuran todos esos correos y videos calientes que no le muestra a nadie en la oficina, a una carpeta pública en la red para deleite de compañeros y superiores. Pero el muchacho en cuestión tiene tonelada de material, y es fanático de la alta definición, y nosotros queremos copiarlo todo; si lo hacemos desde una sesión SSH deberíamos tenerla abierta todo el tiempo que la operación de copia dure. Todo un bajón si estamos desde el Wi-Fi de nuestro café favorito y en un rato nos tenemos que ir, ya que si nos desconectamos, como dijimos antes, todos los procesos hijos se matan, entre ellos la copia de archivos que ejecutamos. Lo ideal sería, iniciar la copia ahora desde el café, y cuando lleguemos a nuestro nuevo destino volver a conectarnos por SSH y de alguna manera recuperar esa sesión, que nunca debería haberse anulado, para continuar viendo el proceso, o si ya terminó y todo salió bien.

Desde mi tierna inocencia sospechaba que un mundo tan poderoso a nivel línea de comandos como el de *nix tenía que tener desde hace tiempo una solución a esto, y esa solución es el comando screen. screen mantiene la sesión abierta por nosotros, con el proceso que hayamos lanzado corriendo, aún cuando nos hayamos desconectado. En realidad, screen es una herramienta mucho más poderosa, no pensada únicamente para esto, ya que se trata de un emulador de terminales virtuales desde donde podemos correr varias sesiones separadas de línea de comandos, cada una con su proceso, en simultáneo. Pero para nuestro fin todo lo que tenemos que saber es que tenemos que tipear el comando screen ni bien iniciamos sesión, luego presionar espacio o enter para continuar, y volveremos a la línea de comandos para hacer lo que tengamos que hacer, por ejemplo copiar los videos y mails de nuestro amigo luser. ¿Qué pasa entonces si nos desconectamos de la sesión SSH? screen continúa corriendo esa sesión de consola con el proceso que hayamos lanzado por nosotros. Cuando nos volvemos a conectar por una nueva sesión SSH y deseamos volver a ella, todo lo que tenemos que escribir es screen –r, y la magia sucederá.

la pantalla de inicio de screen

También podemos, como mencioné antes, manejar varias sesiones desde screen. Supongamos que mientras copiamos los videos de nuestro muchacho queremos hacer algo más, como por ejemplo borrarle un documento importante (acción digna de todo BOFH). Con presionar Control+a y luego c, screen creará una nueva sesión y nos posicionará en ella; de esta manera podemos crear tantas como necesitemos. Para luego volver a cada una, podemos presionar Control+a y el número de sesión (comienza desde 0) o simplemente Control+a y luego (comillas dobles) para visualizar un menú desde donde podemos ver las sesiones activas e ingresar a la deseada. Podemos ver la abrumadora lista de completa de atajos y parámetros de línea de comandos en su manpage cuando no tengamos nada que hacer durante una tarde.

image

Seguramente existirán a lo mejor otras formas de acometer el mismo fin propuesto, pero este método me resultó terriblemente cómodo, y para mejor, screen es uno de esos comandos que vienen incluidos en cualquier Linux; no hace falta andar instalando ni mucho menos compilando nada.


Oct 17 2011

Deshabilitar el ingreso como invitado en Ubuntu 11.10

Gabolonte Blasfemus

imageVengo dándole uso a Oneiric Ocelot, la última y reciente encarnación de Ubuntu, desde el primer día de su lanzamiento, y aunque algunas cosas se ven muy bien tuve algunas decepciones. Canonical está de a poco moldeando su producto a gusto propio, y los motivos a favor para hacerlo son varios: Diferenciación de otras distros, interfaz más simple y amigable para el usuario novato, y una mejor integración entre software y servicios del sistema con la interfaz. El problema es que desde que se comenzó con este cambio del shell estándar de Gnome por Unity, se percibe una fuerte tendencia a la sobresimplificación, que no es para nada buena. Una cosa es crear diálogos simples y limpios en la interfaz gráfica que no confundan al usuario y eviten mayormente todo lo que sea configuraciones avanzadas, pero cuando se comienzan a eliminar opciones intermedias-básicas dejando solo las más elementales ya no se trata de simplificar, sino que se corre el riesgo de restringir y entorpecer.

Por supuesto, Ubuntu sigue siendo un Linux, y todo lo que no se pueda hacer por la GUI se puede realizar desde la línea de comandos. Pero entonces, ¿a donde se fue el concepto de Linux para seres humanos si para cambiar algo trivial que cualquier otro SO permite desde su entorno gráfico es necesario recurrir a la consola?

Uno de los ejemplos que encontré en Ubuntu 11.10 sucede con la cuenta de invitado, que queda habilitada por defecto al instalar el sistema. Es indudable que se trata de una función muy útil para cuando hace falta prestarle nuestra computadora a un amigo sin temor a que acceda a nuestro contenido personal, pero también es un serio problema si no estamos interesados en esa posibilidad y estamos más preocupados por la seguridad, ya que el ingreso a un sistema como invitado puede permitir la explotación de vulnerabilidades para penetrarlo, cosa que de otra manera no hubiese sido a lo mejor posible.

Ubuntu 11.10 se diferencia de sus antecesores, entre otras cosas, en que dejó de utilizar el gestor gráfico de sesiones clásico de Gnome, GDM, cambiando a LightDM, el cual es mucho más ligero, personalizable (el diseño de la interfaz de inicio de sesión se hace en HTML) y no depende de las librerías de entornos de escritorio como Gnome en el caso de GDM. Esto es genial, pero el problema es que no se provee ninguna opción gráfica para configurarlo y de donde se pueda elegir si se quiere activar la sesión de invitado o no. Así como viene Ubuntu Oneiric por defecto, un invitado puede iniciar sesión y sólo podemos elegir como entorno de escritorio a Unity (en su versión principal o en la 2D para equipos sin aceleración gráfica por hardware), y no hay mucho que podamos hacer para cambiarlo desde la GUI. Para eso tendremos que pelar la terminal, pero es bastante fácil.

Editamos, con los derechos de superusuario correspondientes, el archivo /etc/lightdm/lightdm.conf:

sudo gedit /etc/lightdm/lightdm.conf

Al abrirlo notamos que su contenido es ínfimo, especificando tan sólo el greeter-session (la interfaz de inicio de sesión que el usuario verá) y el shell de escritorio a cargarse por defecto.

[SeatDefaults]
<br />greeter-session=unity-greeter
<br />user-session=ubuntu

Tan sólo debemos agregar al final la siguiente la línea allow-guest=false y nos quedará así:

[SeatDefaults]
<br />greeter-session=unity-greeter
<br />user-session=ubuntu
<br />allow-guest=false

Luego guardamos y la próxima vez que iniciemos sesión no volveremos a ver la opción de ingreso como invitado.