ユーザーの umask 値が 2 つのシステム間で異なるのはなぜですか?

ユーザーの umask 値が 2 つのシステム間で異なるのはなぜですか?

私はAとBの2つのシステムを持っています。AはUbuntu 16.04、BはUbuntu 20.04です。それぞれにユーティリティユーザー「rufus」が定義されています。「rufus」にはログインなしどちらのシステムでも。

'rufus'が2つのシステム間で異なるデフォルトの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)では、「ru​​fus」は

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

システムB(20.04)では、「ru​​fus」は

$ 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 の違いを説明していないようです。

私が思いつくのはこれだけです。2umaskつのシステム間で「rufus」に対して返される値の違いを説明できるものは他に何があるでしょうか?

特に答えてほしい質問が 1 つあります。 Ubuntu がすべてのシステム ユーザー (UID 100-999) に対してデフォルトの umask を設定する場合、これはどのファイルで設定されますか?これは Linux 特有の「秘密情報」のもう一つのようです。

答え1

私はこれを理解したと思います。20.04 では/etc/login.prefs次のように述べられています。

# 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 になったため、バグのために更新されることはもうありません。

お役に立てれば!

関連情報