Linux

什麼會在 rpm 安裝時修改 PAM 文件以添加配置更改?

  • June 12, 2017

這個問題是針對一般應用的,但我可以使用一些具體的例子來說明我的問題的性質。當某些 Linux 身份驗證包(如 krb5、sssd 或 pam_pkcs11)安裝時,某些內容會進入 PAM 配置目錄下的文件(如**/etc/pam.d/system-auth/etc/pam.d/password-auth**),並將添加或修改一行以指向已安裝的新**.so**文件,例如pam_krb5.sopam_sssd.sopam_pkcs11.so以供使用。

對於某些軟體包,這似乎會自動發生,無需使用者干預,只需安裝 rpm 軟體包(使用 yum 或直接使用 rpm 工具),就像我觀察到的安裝 sssd 軟體包(至少在 RHEL 7 上)的情況一樣,這將將對 pam_sssd.so的引用添加到***-auth** PAM 文件中。我認為這可能的唯一方法是通過 rpms 可以擁有的內部腳本,所以我查找瞭如何在 rpm 的 SPEC 中列出內部腳本,安裝了一個 RHEL 7 映像以查看源包,並且在 Packages 目錄中執行它:

sudo rpm –scripts -qpl sssd-* | grep -i pam

然而,我沒有返回任何行,這表明 /etc/pam.d 目錄中的文件有任何影響,即使我刪除了 grep,我確實看到了 if/then 腳本邏輯做其他事情的結果,所以**–scripts**參數工作。

我也很好奇,在一個非常特殊的例子中,是什麼將這一行添加到我的 /etc/pam.d/system-auth文件中:

授權

$$ success=done authinfo_unavail=ignore ignore=ignore default=die $$pam_pkcs11.so 節點錯誤

如果它不是 RPM 的內部腳本,我想知道它是否可能是最初執行的新安裝文件中的某個二進製文件,這就是添加這些更改的原因,但沒有看到任何證據那。

此外,我實際上也對RPM 腳本中的authconfig行進行了 grep,因為我知道authconfig可以做到這一點,但沒有找到任何東西。然而,它似乎必須在後台執行authconfig或類似的東西才能做到這一點。

有沒有人知道是什麼導致了這些變化?

很有趣的問題,我承認。

RedHat 是一個龐大的組織,它有能力重寫它在其發行版(RHEL、CentOS)中提供的任何開源軟體。它做到了。

我決定在 CentOS7.3 機器上strace安裝samba一段時間,這是我看到的(部分輸出):

open("/etc/pam.d/samba;593a8da8", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 47
fcntl(47, F_SETFD, FD_CLOEXEC)          = 0
umask(022)                              = 0777
write(47, "#%PAM-1.0\nauth       required\tpa"..., 177) = 177
close(47)                               = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
lstat("/etc/pam.d/samba", 0x7ffeed35d250) = -1 ENOENT (No such file or directory)
rename("/etc/pam.d/samba;593a8da8", "/etc/pam.d/samba") = 0
getuid()                                = 0
getuid()                                = 0
chown("/etc/pam.d/samba", 0, 0)         = 0
chmod("/etc/pam.d/samba", 0644)         = 0
utime("/etc/pam.d/samba", [2017/05/25-07:33:05, 2017/05/25-07:33:05]) = 0
getuid()

它創建/etc/pam.d/samba具有以下內容的文件:

#%PAM-1.0
auth       required     pam_nologin.so
auth       include      password-auth
account    include      password-auth
session    include      password-auth
password   include      password-auth

此外,還有一個可以自動更新的工具,可用於備份和/或恢復 pam.d 配置文件 - 即authconfig. 我的猜測是它可能會在安裝某些軟體包的過程中用於更新PAM配置文件。例如,RedHatSSSD為系統身份驗證配置的部分程序(包括配置PAM)是:

Use authconfig to enable SSSD for system authentication.
# authconfig --update --enablesssd --enablesssdauth This automatically updates the PAM configuration to reference all of the

rpm --scripts -qpl samba-4* | grep -i pam這是我的測試伺服器的輸出: /etc/pam.d/samba- 這是在 samba 安裝期間創建的新文件。

引用自:https://serverfault.com/questions/853306