Por que os valores umask de um usuário diferem entre dois sistemas?

Por que os valores umask de um usuário diferem entre dois sistemas?

Eu tenho dois sistemas, A e B. A é Ubuntu 16.04 e B é Ubuntu 20.04. Cada um tem um usuário utilitário 'rufus' definido nele. 'rufus' temsem loginem qualquer sistema.

Quero entender por que 'rufus' tem valores umask padrão diferentes entre os dois sistemas. No sistema A (16.04), recebo

$ sudo -u rufus sh -c umask
0022

No sistema B (20.04), recebo

$ sudo -u rufus sh -c umask
0002

Executar umasktanto para meu próprio usuário quanto para 'root' retorna 0022, o padrão esperado, em ambos os sistemas. Qualquer que seja a diferença, parece estar relacionada com alguma propriedade específica de 'rufus'.

Aqui estão as coisas que considerei:

1) usuários do sistema

Alguns sistemas Linux definem umasks padrão diferentes para usuários do sistema e para usuários regulares.

No sistema A (16.04), 'rufus' tem

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

No sistema B (20.04), 'rufus' tem

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

Sobreambossistemas, /etc/login.defstem uma umask padrão de 022 e a janela do usuário do sistema está comentada

UMASK           022
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999

mas /etc/adduser.conftem

FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

indicando que 'rufus' é um usuário do sistema emambossistemas (ou seja, UID > 99 e UID < 1000). Portanto, não parece que isso explique a diferença no umask padrão.

2) Scripts de login

O umask padrão de um usuário pode ser definido por scripts de login, sejam globais, como /etc/profileou específicos do usuário, como ~/.profile. 'rufus' temsem login, portanto, esses arquivos não devem afetar o que umaskretorna, porque eles nunca são processados.

Para ser completo, no entanto, verifiquei novamente os arquivos

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

em ambos os sistemas ('rufus' possui uma pasta pessoal). Nenhum deles definiu um valor para umask. Portanto, por alguns motivos, não parece que isso explique a diferença no umask padrão.

3) /etc/senha

O 'umask' de um usuário pode ser definido em /etc/passwd.

No Sistema A (16.04):

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

No Sistema B (20.04):

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

Nenhum deles define 'umask', então não parece que isso explique a diferença no umask padrão.

4) libpam-umask

Sei muito pouco sobre isso, mas entendo que pode ser usado para definir o valor umask para um usuário. Em ambos os sistemas, libpam-umaské fornecido pelo pacote libpam-modules. Este pacote foi instalado em ambos os sistemas, mas nunca o usei ou configurei. Em ambos os sistemas, os arquivos de configuração /etc/pam.d/common-sessione /etc/pam.d/common-session-noninteractivenão possuem configuração umask na linha

session    optional    pam_umask.so

então, a menos que haja outro lugar que eu precise procurar, isso não parece explicar a diferença no umask padrão.

Isso é tudo que consigo pensar. O que mais pode explicar a diferença no umaskretorno de 'rufus' entre os dois sistemas?

Uma pergunta que gostaria que fosse respondida em particular é: Quando o Ubuntu define uma umask padrão para todos os usuários do sistema (UID 100-999), em qual arquivo isso é definido?. Esta parece ser mais uma peça da "informação secreta" exclusiva do Linux.

Responder1

Acho que descobri isso. Em /etc/login.prefs20.04 é declarado o seguinte:

# 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, isso pode ser um bug no 16.04 ao executar o comando sudo -u username sh -c umask. Esta é a única coisa que consigo inventar. Nos meus sistemas de teste, recebo a seguinte saída.

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 suportam exatamente os mesmos comandos e têm exatamente o mesmo texto no arquivo /etc/login.prefs. Mas o 16.04 parece não ler o usuário corretamente, como acontece no 20.04. Parece um bug, mas como 16.04 agora é EOL, eles não serão mais atualizados em busca de bugs.

Espero que isto ajude!

informação relacionada