为什么用户的 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

在系统 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.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,因此他们不会再更新错误。

希望这可以帮助!

相关内容