Cambiar el valor de UMASK en Debian …

openlogo-100… puede ser más complicado de lo que parece.

Mis queridos homínidos arrastran un problema desde hace tiempo y para el que por fin he conseguido una solución: trabajan cada vez más con archivos compartidos en red, y mientras que antes se limitaban a consultarlos o a imprimirlos, ahora les ha dado por retocarlos entre varios.

Y es entonces cuando se dan cuenta de que pueden leer el archivo creado por otro pero no modificarlo. Y sufren. Y me lo cuentan a mí para que yo sufra también y, de paso, se lo solucione.

Los directorios están instalados siempre con los permisos correctos (bit SGID) para asegurar que los nuevos archivos conserven el grupo del directorio padre. Y esto funciona y es simple. Sólo queda cambiar el valor de UMASK para asegurarnos de que no se elimine el bit de escritura para el grupo. Y ahí es donde la cosa parece que se complica.

En teoría debe bastar con cambiar el valor de la variable UMASK en el archivo  /etc/login.defs, pero por alguna razón no parece funcionar del todo ni en todos los equipos, especialmente si algún programa envoltorio (esos que cambian cosas en el entorno antes de lanzar el programa real y de los que tengo que emplear bastantes) realiza otra modificación. O, peor aún, algún archivo de inicio de sesión que no tengo bien controlado en su escritorio.

El caso es que ya que tengo todo el entorno del escritorio empaquetado para Debian he buscado la forma de cambiar este parámetro en todos y cada uno de los equipos y sesiones, y lo he encontrado en el subsistema PAM y el módulo pam_umask incluído en el paquete pam-modules.

Parece que los módulos del sistema PAM están algo más organizados que la última vez que los vi. Toda la configuración va en /etc/pam.d/ como siempre pero además se ha añadido un juego de perfiles situado en /usr/share/pam-configs y un programa que los lee y los aplica a la configuración base. Este programa se llama pam-auth-update, se incluye en el paquete libpam-runtime y puede emplearse en la fase de configuración de los paquetes que instalemos.

Así que eso es lo que he hecho. He construído un perfil para el módulo que he llamado umask y lo he añadido a la última versión del  paquete empresa-desktop. Ahora, tras actualizar los sistemas, las sesiones de usuario ya tienen una máscara de permisos más acorde con sus necesidades.

Hasta la próxima, claro.

Por cierto:

ha sido bastante difícil encontrar información sobre el formato de los perfiles. Al final he encontrado una referencia en el wiki de Ubuntu del año 2008 y que es en realidad la propuesta para construir el mecanismo. También hay una explicación excelente en stackoverflow (para variar) y luego está el fuente del programa pam-auth-update que tampoco contiene documentación al respecto pero que se puede más o menos leer.

Digo yo que ya que haces un programa que va a cambiar tanto el acceso al sistema podrías poner un ejemplo claro de tus datos, ¿ no ? Pues eso.

 

Perfil de pam_umask

El archivo está nombrado como /usr/share/pam-configs/umask aunque por lo que he podido ver el nombre es lo de menos.

Name: Set the file mode creation mask
Default: yes
Priority: 256
Session-Type: Additional
Session:
optional pam_umask.so umask=0002

Configuración del paquete

La siguiente estrofa se incluye en el archivo debian/postinst del paquete en cualquier parte bajo la opción configure.

# Actualizamos los módulos PAM
PAM_UPDATE=$(which pam-auth-update)
$PAM_UPDATE -auth-update --package