Security

自定義 PAM 模組和安全注意事項

  • June 20, 2011

我正在編寫自己的 PAM 模組,該模組將成為我正在開發的應用程序的一部分,但我不確定將它放在哪裡。我的模組基本上進行類似於 LDAP 的網路級身份驗證(當然還有其他 mojo)。

我的目錄中有很多配置文件,/etc/pam.d/我知道大多數服務的作用(除了幾個,比如 atd、polkit、ppp)。我假設使用 PAM 堆棧進行身份驗證是這樣的:

  1. 根據服務名稱執行堆棧(如果存在配置文件)
  2. 如果未通過身份驗證,則使用 common-*,其中 * 是模組類型(身份驗證、帳戶等)
  3. 返回成功或失敗以呼叫應用程序(當然還有任何其他數據)

我在這個假設中正確嗎? 是否所有平台都有 common-auth、common-account、common-password 和 common-session?

如果是這樣,我正在考慮將它作為一個sufficient模組放在 common-* 的頂部,以便在失敗時正常 PAM 堆棧不受影響。這特別有利,因為我可以在軟體安裝時以程式方式執行此操作。

我是否遺漏了任何潛在的安全漏洞?

我找不到關於在哪裡集成自定義 PAM 模組或在哪裡放置模組的安全問題的很好的文件。

當您呼叫 Linux-PAM 進行某些身份驗證過程時,始終只有一個堆棧在執行。

在這些地方查找堆棧定義;第一次成功嘗試確定讀取哪個文件:

  1. /etc/pam.d以應用程序“服務名稱”命名的文件(例如,sshdgdm),或
  2. 如果不存在特定於服務的文件,則為該文件/etc/pam.d/other,或者
  3. /etc/pam.conf目錄/etc/pam.d不存在時的文件。

有關詳細資訊,請參閱函式pam_start的文件。

common-* 文件是許多 Linux 發行版遵循的約定,但 PAM 軟體本身並不強制要求。它們通常通過@include 語句被其他 PAM 文件包含;例如/etc/pam.d/otherDebian 上的文件有以下內容:

# 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 軟體堆棧的管理是系統管理員的任務,而不是應用程序開發人員的任務。

引用自:https://unix.stackexchange.com/questions/15280