"Después del juego es antes del juego"
Sepp Herberger

viernes, 3 de febrero de 2017

Cerrar sesiones inactivas de usuario en Linux y en Windows.

Un problema frecuente que tenemos con los ordenadores compartidos es el de usuarios que se dejan su sesión abierta al alcance de todo el mundo. Además del evidente problema de seguridad esto lleva a malentendidos de todo tipo, ya que si se sienta otro usuario despistado y se pone a trabajar en la sesión de anterior, manipulando y guardando ficheros, cuando se va al final no sabemos fácilmente en que sesión ha trabajado y la pregunta "¿dónde están mis datos?" irrumpirá en nuestra tranquilidad de sysadmin.

Lo ideal es colocar un temporizador que cierre las sesiones inactivas pasado un tiempo, mitigando en menor o mayor medida el problema descrito. Veremos soluciones para nuestros clientes Windows y Linux.

1. Soluciones para Linux.

A lo largo de los años hemos encontrado varias soluciones al problema de cerrar la sesión cuando ha pasado un tiempo sin actividad. Repasemos algunas de ellas:

  • Evanescent: es un software específico para esta tarea. Por desgracia parece abandonado y no sabemos si funcionará ahora. Código para descargar y capturas de pantalla.
  • Creando un protector de pantalla ad-hoc para salir de sesión, mediante un script y seleccionando dicho salvapantallas en la lista que podemos ver con xscreen-saver-demo o la utilidad que tengamos para seleccionar screensaver. Aquí cuentan como sería. Al ser un protector de pantalla "falso" simplemente hay que configurar el tiempo y cuando le toque saltar lo que hará será cerrar la sesión en lugar de hacer dibujitos en la pantalla.
  • Usando xprintidle. Es una utilidad que muestra el tiempo que lleva una sesión ociosa, sin interacción del usuario. Combinado con idlekiller tendremos un programa que se ejecuta como un servicio y cierra sesiones que lleven más de cierto tiempo inactivas. Otra opción es usarlo con un script arrancado desde crontab, como muestran aquí o aquí.
  • Usando xautolock. Este método me lo ha revelado mi compañero Camilo, ¡gracias!. xautolock es una utilidad que se arranca en el inicio de sesión, desde /etc/xdg/autostart/xxxx.desktop y permite configurar un programa a ejecutar cuando la sesión del usuario lleve un tiempo ociosa. En nuestro caso, el programa a ejecutar ser xfce4-session-logout (evidentemente cambiará según el escritorio usado). Este es el fichero .desktop que Camilo usa, que lanza el cierre de sesión a los 55 minutos de inactividad:
    # cat /etc/xdg/autostart/xautolock.desktop
    [Desktop Entry]
    Type=Application
    Name=xautolock
    Comment=Lock the screen after a certain time automagically
    Exec=xautolock -time 55 -locker "xfce4-session-logout"
    OnlyShowIn=XFCE;
    NoDisplay=true
    

Y con esto acaban los sistemas en Linux, como vemos hay de sobra donde elegir.

2. Solución para Windows.

En el caso de los Windows la cosa se complica y se hace mas necesaria ya que por motivos diversos tengo habilitado el cambio rápido de usuario. Esto hace que un usuario pueda abrir sesión sin cerrar la del anterior, de tal forma que al final del día hay una pila de sesiones abiertas chupando recursos. Da igual que digas a los usuarios que cierren sesión abierta antes de entrar con la suya. No lo hacen. Por eso es importante cerrarlas de forma forzada si no registran actividad.

La forma mas sencilla de hacerlo que he podido encontrar es usando la utilidad gratuita IdleLogoff. Sencillamente le dices un tiempo en segundos y una acción (logoff, lock o shutdown) y al pasar dentro de las sesión esos segundos inactivos se ejecuta dicha acción.

La segunda parte es meterla en un script que lo lance, por ejemplo a los 1800 segundos. Una vez descargado el ejecutable y puesto en c:\windows creamos también allí el fichero .bat:
c:\> type c:\windows\IdleLogoff.bat
Echo off
start c:\Windows\IdleLogoff.exe 1800 logoff 
La tercera y última parte es la más peliaguda: que se inicie una instancia del IdleLogoff con cada usuario que inicie sesión en la máquina, para poder cerrarlas si se quedan ociosas en primer o segundo plano.

La primera proposición es utilizar GPO (políticas de grupo), como cuentan aquí: se crea una GPO que ejecuta el script IdleLogoff.bat en el inicio de sesión de cada usuario. El problema que tengo con esto es que en nuestras redes no tenemos un Windows Server que nos distribuya las GPO. Desde arriba nos llenaron de Windows pero se les olvidó ese pequeño detalle: mejor tener un administrador informático apretando tuercas Windows a Windows que un servidor que los administre centralizadamente. Ya avisamos de ello.

Otra opción es definir una tarea programada que ejecute el script al inicio de sesión de cada usuario o quizá algo parecido a como se cuenta aquí. El problema que he encontrado con esto es que las tareas programadas asociadas a determinados eventos no van muy bien con Windows 8 y/i Windows 10. Si no fallan por una cosa fallan por otra, por lo que no son viables debido a fallos en su implementación. Con la úĺtima edición de Windows 10, por poner un ejemplo, han dejado de funcionar los eventos vinculados al establecimiento de conexión de la interfaz de red.

¿Qué opción nos queda a los pobres?. Pues la carpeta "Inicio" del Menú de Inicio de Windows de siempre. Ahora esa carpeta está en la ruta:
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
antes estaba en c:\documents and settings\all users\... y luego en c:\users\public\..., Microsoft la mueve de vez en cuando para aumentar la entropía del Universo (y es que en Microsoft se lleva la Segunda Ley de la Termodinámica a rajatabla). Allí ponemos nuestro script IdleLogoff.bat para que se ejecute en el inicio de sesión de todos los usuarios. Como el /etc/xdg/autostart de toda la vida de Linux. ¿Funciona?. Si: cuando hay varios usuarios en el sistema hay un idlelogoff.exe por usuario y cuando expira su tiempo de inactividad la sesión desaparece y libera recursos. Misión cumplida.

Bueno, pues he dedicado un post conjunto a Windows y Linux. Para que luego no digáis que los linuxeros tenemos prejuicios cognitivos.

No hay comentarios:

Publicar un comentario