Algo de Linux: abril 2012

domingo, 29 de abril de 2012

Cerrar sesiones de usuario en Gnome

A veces nos interesa cerrar la sesión de un usuario por ejemplo, tras un tiempo de inactividad, como comentaba en un viejo artículo del año 2007 (http://enavas.blogspot.com.es/2007/12/cerrar-sesin-de-usuarios-tras-un-tiempo.html) o por ejemplo para activar una serie de cambios que hayamos realizado en su cuenta que requieran volver a iniciar la sesión.

Para hacerlo tan sólo tenemos que usar el comando gnome-session-save, que nos permite salvar y finalizar una sesión o simplemente finalizarla sin salvar. La primera posibilidad nos va a permitir guardar una instantánea de las aplicaciones que estén corriendo durante la sesión para después  restaurarla en el siguiente inicio de sesión.

gnome-session-save tiene diferentes parámetros que nos servirán para indicarle al gestor de sesiones lo que queremos hacer.

Para cerrar una sesión desde un terminal, ejecutaremos:

$ gnome-session-save --logout

Y la sesión se cerrará a menos que el cierre de sesión haya sido inhibido por alguna aplicación.

Para forzar el cierre de sesión cuando hay aplicaciones en la sesión que no responden o se encuentran ocupadas, podemos hacer un:

$ gnome-session-save --force-logout

Si queremos cerrar la sesión y que se muestre el cuadro de diálogo estándar de cierre de sesión, ejecutaremos:


$ gnome-session-save --logout-dialog

Y si queremos cerrar la sesión mostrando el cuadro de diálogo de apagar, reiniciar o suspender:


$ gnome-session-save --shutdown-dialog

Por defecto, los errores se redirigen a la salida del terminal. Si queremos que se muestren mediante cuadros de diálogo, añadimos la opción --gui. Por ejemplo:

$ gnome-session-save --logout --gui

Cabe mencionar que las opciones --kill y --silent que usábamos antiguamente se consideran ya obsoletas.

martes, 24 de abril de 2012

Realizar backups con rsync controlados mediante nice e ionice

Si queremos realizar backups de una máquina en la que el usuario se encuentra trabajando, pero no queremos que el proceso de backup interrumpa el trabajo del usuario ni ralentice el equipo, podemos utilizar herramientas como nice e ionice.

Por una parte, nice nos permite cambiar la prioridad de un proceso.
Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0.  Podemos usar nice para lanzar un proceso con una determinada prioridad más alta o más baja que la que se asigna por defecto, según se requiera. Las prioridades van de -20 (la más alta) a 19 la más baja. Sólo el usuario root puede asignar prioridades negativas.

Por otra parte, ionice nos va a permitir modificar la prioridad con la que un determinado proceso accede al disco. Esto es muy importante, por ejemplo, cuando queremos realizar un backup transparente, de tal forma que el usuario no note la sobrecarga de estar realizándolo mientras trabaja.

Mediante ionice podemos asignar un proceso a uno de los siguientes planificadores de entrada/salida:
  • Idle (3). El proceso sólo podra acceder a disco cuando el resto de programas se encuentren inactivos. Este planificador no se encuentra disponible para procesos  de usuario ordinarios (no-root).
  • Best effort (2). Nos permite definir una prioridad de 0 a 7, donde 0 es la mayor prioridad y 7 es la menor.  Y si varios programas tienen la misma prioridad, accederán al disco mediante el algoritmo round-robin.
  • Real time (1). Tan pronto como el proceso pida el acceso se le concederá. Al igual que en el caso de Best effort, se pueden establecer 8 niveles de prioridad (del 0 al 7) indicando como de grande el tiempo de acceso que se le concede. Este planificador no se encuentra disponible para procesos  de usuario ordinarios (no-root).
Combinando nice e ionice podemos ejecutar procesos que realicen un backup mediante rsync de forma transparente al usuario, si que se resienta el uso del sistema mientras el proceso esté en marcha. 

Veamos un ejemplo que he probado: Nuestros portátiles tienen una partición /dev/sda2 en la que se encuentra instalado el sistema y disponen de otra partición /dev/sda3, que podríamos usar como copia de seguridad. Podríamos hacer una copia del contenido de la partición /dev/sda2 en /dev/sda3 de la siguiente manera:


# mount  /dev/sda3 /mnt

# nice -n19 ionice -c3 rsync -aSv --exclude "mnt" / /mnt/

Como podemos ver, lo primero que hacemos es montar la partición de destino en /mnt. Una vez montada, lanzamos el proceso rsync con la menor prioridad de proceso (19) y la menor prioridad en la entrada/salida (3).

viernes, 20 de abril de 2012

sshpass: Establecer una conexión ssh de modo no interactivo

Es más seguro utilizar un mecanismo de autentificación basado en clave pública cuando queremos establecer una conexión ssh de forma no interactiva, pero en ocasiones, necesitamos o queremos que al hacer el ssh no se nos pida el password. Para ésto nos viene muy bien sshpass.

Puesto que ssh es una herramienta interactiva, sshpass está pensado para permitirnos establecer conexiones ssh no-interactivas.

Podemos encontrar sshpass en los repositorios de Debian, por lo que instalarlo es trivial:

# apt-get install sshpass

Veamos ahora unos ejemplos de cómo podemos utilizarlo:

El uso más sencillo es especificar el password con el parámetro -p:

$ sshpass -p "mipassword" ssh usuario@host

Podemos combinar sshpass con rsync para sincronizar, por ejemplo, una carpeta de nuestro equipo con la de una máquina remota:

$ rsync -e 'sshpass -p mipassword ssh -l usuariobackup'  -aSv Documentos root@192.168.1.100:/var/copiaseguridad/

Como podemos ver, le decimos a rsync que utilice el usuario usuariobackup (ssh -l usuariobackup) con la password mipassword (sshpass -p mipassword).

Este mecanismo no es muy seguro porque ejecutando un simple ps, se puede ver la password.

Podríamos guardar la password en un fichero y hacer que sshpass lea la password de dicho fichero:

$ rsync -e 'sshpass -f passwordfile ssh -l usuariobackup'  -aSv Documentos root@192.168.1.100:/home/copiaseguridad/

Otro modo que he encontrado buscando información en google para hacer lo mismo usando un descriptor de archivo:

$ rsync -e 'sshpass -d 100 ssh -l root' -aSv Documentos root@192.168.1.100:/home/copiaseguridad/ 100<<<"mipassword"

miércoles, 18 de abril de 2012

Crear un usuario local en la imagen squeeze para los workstation

Como algunos compañeros me han preguntado cómo crear un usuario local en la imagen squeeze que pasé para los workstation, lo escribo aquí, por si alguien más lo necesita.

Como el directorio home es utilizado por autofs para montar el home de los usuarios en el servidor, pensé en colocar los usuarios locales en /var/home.

Para crear un usuario local en /var/home no tenemos más que indicárselo al comando adduser:

# adduser --home /var/home/loginusuario loginusuario
 
Y si posteriormente queremos borrar el home del usuario local junto con su directorio home no tenemos más que hacer:

# deluser --remove-home loginusuario

martes, 17 de abril de 2012

Crear home al iniciar sesión cuando usamos LDAP

Cuando usamos un sistema de autentificación basado en ldap y queremos que el home de cada usuario se almacene de forma local en la máquina, porque, por ejemplo es un portátil, podemos crear dicho home automáticamente la primera vez que el usuario inicia sesión añadiendo la siguiente línea al fichero /etc/pam.d/common-session:

session required pam_mkhomedir.so skel=/etc/skel umask=0022