自定義 PAM 模組和安全注意事項
我正在編寫自己的 PAM 模組,該模組將成為我正在開發的應用程序的一部分,但我不確定將它放在哪裡。我的模組基本上進行類似於 LDAP 的網路級身份驗證(當然還有其他 mojo)。
我的目錄中有很多配置文件,
/etc/pam.d/
我知道大多數服務的作用(除了幾個,比如 atd、polkit、ppp)。我假設使用 PAM 堆棧進行身份驗證是這樣的:
- 根據服務名稱執行堆棧(如果存在配置文件)
- 如果未通過身份驗證,則使用 common-*,其中 * 是模組類型(身份驗證、帳戶等)
- 返回成功或失敗以呼叫應用程序(當然還有任何其他數據)
我在這個假設中正確嗎? 是否所有平台都有 common-auth、common-account、common-password 和 common-session?
如果是這樣,我正在考慮將它作為一個
sufficient
模組放在 common-* 的頂部,以便在失敗時正常 PAM 堆棧不受影響。這特別有利,因為我可以在軟體安裝時以程式方式執行此操作。我是否遺漏了任何潛在的安全漏洞?
我找不到關於在哪裡集成自定義 PAM 模組或在哪裡放置模組的安全問題的很好的文件。
當您呼叫 Linux-PAM 進行某些身份驗證過程時,始終只有一個堆棧在執行。
在這些地方查找堆棧定義;第一次成功嘗試確定讀取哪個文件:
/etc/pam.d
以應用程序“服務名稱”命名的文件(例如,sshd
或gdm
),或- 如果不存在特定於服務的文件,則為該文件
/etc/pam.d/other
,或者/etc/pam.conf
目錄/etc/pam.d
不存在時的文件。有關詳細資訊,請參閱函式pam_start的文件。
common-* 文件是許多 Linux 發行版遵循的約定,但 PAM 軟體本身並不強制要求。它們通常通過
@include
語句被其他 PAM 文件包含;例如/etc/pam.d/other
Debian 上的文件有以下內容:# We fall back to the system default in /etc/pam.d/common-* @include common-auth @include common-account @include common-password @include common-session
服務特定的文件也可以使用相同的
@include
語句,並且-實際上-它們在 Debian 上的預設配置中。請注意,這是一個配置問題:系統管理員可以隨意更改文件以/etc/pam.d
不包含任何 common-* 文件!因此:如果您的 PAM 模組特定於您的應用程序,請創建一個特定於應用程序的服務文件並從那裡呼叫該模組。不要自動將模組添加到其他服務的 PAM 文件或回退
others
文件中,因為這可能會破壞系統上安裝的其他應用程序。PAM 軟體堆棧的管理是系統管理員的任務,而不是應用程序開發人員的任務。