我有兩個系統,A和B。每個都定義了一個實用程式使用者“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
。 「魯弗斯」有沒有登入,所以這些文件不應該影響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
我想我已經明白這一點了。 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,他們將不再更新錯誤。
希望這可以幫助!