Почему значения umask пользователя различаются в двух системах?

Почему значения umask пользователя различаются в двух системах?

У меня есть две системы, A и B. A — Ubuntu 16.04, а B — Ubuntu 20.04. На каждой из них определен пользователь утилиты 'rufus'. 'rufus' имеетнет логинав любой системе.

Я хочу понять, почему 'rufus' имеет разные значения umask по умолчанию в двух системах. В системе A (16.04) я получаю

$ sudo -u rufus sh -c umask
0022

В системе B (20.04) я получаю

$ sudo -u rufus sh -c umask
0002

Запуск umaskкак для моего собственного пользователя, так и для 'root' возвращает 0022, ожидаемое значение по умолчанию, в обеих системах. Какова бы ни была разница, она, похоже, связана с каким-то свойством, специфичным для 'rufus'.

Вот что я рассмотрел:

1) пользователи системы

В некоторых системах Linux для системных пользователей по умолчанию определены разные значения umask, отличные от значений для обычных пользователей.

В системе A (16.04) 'rufus' имеет

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

В системе B (20.04) 'rufus' имеет

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

Наобасистемы, /etc/login.defsимеет значение umask по умолчанию 022 и закомментированное окно пользователя системы

UMASK           022
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999

но /etc/adduser.confимеет

FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

указывая, что «rufus» является пользователем системыобасистем (то есть UID > 99 и UID < 1000). Так что, похоже, это не объясняет разницу в umask по умолчанию.

2) Скрипты входа

Значение umask пользователя по умолчанию может быть установлено с помощью сценариев входа в систему, как глобальных, так /etc/profileи пользовательских, например ~/.profile. 'rufus' имеетнет логина, поэтому эти файлы не должны влиять на umaskвозвращаемые данные, поскольку они никогда не обрабатываются.

Однако, чтобы быть дотошным, я дважды проверил файлы.

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

в обеих системах (у 'rufus' есть домашняя папка). Ни одна из них не устанавливает значение umask. Так что по нескольким причинам это не объясняет разницу в umask по умолчанию.

3) /etc/passwd

«Umask» пользователя можно задать в /etc/passwd.

По Системе А (16.04):

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

В Системе B (20.04):

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

Ни один из них не устанавливает «umask», так что, похоже, это не объясняет разницу в umask по умолчанию.

4) libpam-umask

Я знаю об этом очень мало, но я понимаю, что это может быть использовано для установки значения umask для пользователя. В обеих системах libpam-umaskпредоставляется пакетом libpam-modules. Этот пакет установлен в обеих системах, но я никогда не использовал его и не настраивал. В обеих системах файлы конфигурации /etc/pam.d/common-sessionи /etc/pam.d/common-session-noninteractiveне имеют настройки umask в строке

session    optional    pam_umask.so

так что если мне не нужно искать что-то еще, это, похоже, не объясняет разницу в umask по умолчанию.

Это все, что я могу придумать. Как еще можно объяснить разницу в том, что umaskвозвращается для 'rufus' между двумя системами?

Один вопрос, на который я хотел бы получить ответ, это: Когда Ubuntu устанавливает umask по умолчанию для всех пользователей системы (UID 100-999), в каком файле это устанавливается?. Похоже, это еще одна часть фирменной «секретной информации» Linux.

решение1

Я думаю, я понял это. В /etc/login.prefs20.04 указано следующее:

# 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.

Это может быть честной ошибкой в ​​16.04 при запуске команды sudo -u username sh -c umask. Это единственное, что я могу придумать. На моих тестовых системах я получаю следующий вывод.

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

Как оказалось, они оба поддерживают одни и те же команды и имеют одинаковую формулировку в /etc/login.prefs. Но 16.04, похоже, не считывает данные пользователя правильно, как это происходит в 20.04. Это похоже на ошибку, но поскольку 16.04 уже EOL, они больше не будут обновляться для ошибок.

Надеюсь это поможет!

Связанный контент