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 umask
tanto 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.defs
tem 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.conf
tem
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/profile
ou específicos do usuário, como ~/.profile
. 'rufus' temsem login, portanto, esses arquivos não devem afetar o que umask
retorna, 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-session
e /etc/pam.d/common-session-noninteractive
nã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 umask
retorno 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.prefs
20.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!