У меня есть две системы, 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.prefs
20.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, они больше не будут обновляться для ошибок.
Надеюсь это поможет!