什麼會在 rpm 安裝時修改 PAM 文件以添加配置更改?
這個問題是針對一般應用的,但我可以使用一些具體的例子來說明我的問題的性質。當某些 Linux 身份驗證包(如 krb5、sssd 或 pam_pkcs11)安裝時,某些內容會進入 PAM 配置目錄下的文件(如**/etc/pam.d/system-auth和/etc/pam.d/password-auth**),並將添加或修改一行以指向已安裝的新**.so**文件,例如pam_krb5.so、pam_sssd.so或pam_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 安裝期間創建的新文件。