¿Por qué los valores de umask de un usuario difieren entre dos sistemas?

¿Por qué los valores de umask de un usuario difieren entre dos sistemas?

Tengo dos sistemas, A y B. A es Ubuntu 16.04 y B es Ubuntu 20.04. Cada uno tiene un usuario de utilidad 'rufus' definido. 'rufus' tienesin iniciar sesiónen cualquiera de los sistemas.

Quiero entender por qué 'rufus' tiene diferentes valores de umask predeterminados entre los dos sistemas. En el sistema A (16.04), obtengo

$ sudo -u rufus sh -c umask
0022

En el sistema B (20.04), obtengo

$ sudo -u rufus sh -c umask
0002

Al ejecutarse umasktanto para mi propio usuario como para 'root' 0022, se obtiene el valor predeterminado esperado en ambos sistemas. Cualquiera que sea la diferencia, parece estar relacionada con alguna propiedad específica de 'rufus'.

Estas son las cosas que he considerado:

1) usuarios del sistema

Algunos sistemas Linux definen máscaras automáticas predeterminadas diferentes para los usuarios del sistema que para los usuarios normales.

En el sistema A (16.04), 'rufus' tiene

$ id rufus
uid=999(rufus) gid=999(rufus) groups=999(rufus)

En el sistema B (20.04), 'rufus' tiene

$ id rufus
uid=114(rufus) gid=119(rufus) groups=119(rufus)

Enambossistemas, /etc/login.defstiene una máscara de usuario predeterminada de 022 y la ventana de usuario del sistema está comentada

UMASK           022
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999

pero /etc/adduser.conftiene

FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

indicando que 'rufus' es un usuario del sistema enambossistemas (es decir, UID > 99 y UID < 1000). Entonces no parece que esto explique la diferencia en la máscara de usuario predeterminada.

2) Scripts de inicio de sesión

La máscara de usuario predeterminada de un usuario se puede configurar mediante secuencias de comandos de inicio de sesión, ya sean globales como /etc/profileo específicas del usuario como ~/.profile. 'rufus' tienesin iniciar sesión, por lo que estos archivos no deberían afectar lo que umaskse devuelve, porque nunca se procesan.

Sin embargo, para ser más exhaustivo, revisé dos veces los archivos.

/etc/profile
/etc/bash.bashrc
~rufus/.profile

en ambos sistemas ('rufus' tiene una carpeta de inicio). Ninguno de ellos estableció un valor para umask. Entonces, por un par de razones, no parece que esto explique la diferencia en la umask predeterminada.

3) /etc/contraseña

La 'umask' de un usuario se puede configurar en formato /etc/passwd.

En el Sistema A (16.04):

rufus:x:999:999:,,,:/home/rufus:/usr/sbin/nologin

En el Sistema B (20.04):

rufus:x:114:119::/home/rufus:/usr/sbin/nologin

Ninguno de estos establece 'umask', por lo que no parece que esto explique la diferencia en la umask predeterminada.

4) libpam-umask

Sé muy poco de esto, pero entiendo que se puede usar para establecer el valor de umask para un usuario. En ambos sistemas, libpam-umasklo proporciona el paquete libpam-modules. Este paquete se instaló en ambos sistemas, pero nunca lo usé ni lo configuré. En ambos sistemas, los archivos de configuración /etc/pam.d/common-sessionno /etc/pam.d/common-session-noninteractivetienen configuración de umask en la línea

session    optional    pam_umask.so

entonces, a menos que haya otro lugar donde deba buscar, esto no parece explicar la diferencia en la umask predeterminada.

Eso es todo lo que puedo pensar. ¿Qué más puede explicar la diferencia en lo que umaskdevuelve 'rufus' entre ambos sistemas?

Una pregunta que me gustaría que me respondieran en particular es: Cuando Ubuntu establece una máscara de usuario predeterminada para todos los usuarios del sistema (UID 100-999), ¿en qué archivo se establece?. Esta parece ser otra pieza más de la "información secreta" característica de Linux.

Respuesta1

Creo que me di cuenta de esto. En el /etc/login.prefs20.04 se establece lo siguiente:

# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.

Honestamente, esto podría ser un error en 16.04 al ejecutar el comando sudo -u username sh -c umask. Esto es lo único que se me ocurre. En mis sistemas de prueba obtengo el siguiente resultado.

16.04:

terrance@terrance-1604:~$ id
uid=1000(terrance) gid=1000(terrance) groups=1000(terrance),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)
terrance@terrance-1604:~$ umask
0002
terrance@terrance-1604:~$ sudo -u terrance sh -c umask
0022

20.04:

terrance@terrance-ubuntu:~$ id
uid=1000(terrance) gid=1000(terrance) groups=1000(terrance),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),126(sambashare),132(vboxusers)
terrance@terrance-ubuntu:~$ umask
0002
terrance@terrance-ubuntu:~$ sudo -u terrance sh -c umask
0002

Parece que ambos admiten exactamente los mismos comandos y tienen exactamente la misma redacción en el archivo /etc/login.prefs. Pero parece que la versión 16.04 no lee al usuario correctamente como lo hace en la versión 20.04. Parece un error, pero como la versión 16.04 está en el EOL, ya no se actualizarán para detectar errores.

¡Espero que esto ayude!

información relacionada