我有两个系统,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
。
在系统 A(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 为所有系统用户(UID 100-999)设置默认的 umask 时,这个设置是在哪个文件中设置的?这似乎又是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,因此他们不会再更新错误。
希望这可以帮助!