Apache-2.4

Apache、SSSD 和 FreeIPA 的 Kerberos 委託

  • March 15, 2019

讓我從描述我的真正目標開始,因為我不確定我是否正在嘗試以適當的方式解決它 =)

我只是想讓我的 Web 應用程序代表登錄的使用者獲取 Kerberos 憑據。Web 伺服器是我的 Linux 域的一部分(使用 FreeIPA / RedHat IdM 註冊)。客戶端是external,但使用者存在於我的域中。所以我想要實現的是:

  1. 使用者瀏覽到我的 webapp 並輸入他的使用者名/密碼(在自定義登錄表單中)
  2. webapp 根據 FreeIPA 驗證使用者名/密碼
  3. webapp 代表登錄使用者獲取 Kerberos 憑據,以便(例如)webapp 現在可以顯示使用者的保管庫或在 FreeIPA 上執行一些特權任務(這需要對其進行 Kerberos 身份驗證)。

到目前為止,我玩過mod_intercept_form_submit,並且能夠使用pam_sss.so(PAM + SSSD)針對 FreeIPA 對使用者進行身份驗證。這工作正常,但我找不到為使用者獲得的 TGT,所以我無法完成第 3 項。

或者,我可能在 Apache 上使用 GSSAPI 身份驗證,但由於客戶端未在域中註冊,這將顯示系統登錄表單(理想情況下,我想使用來自 webapp 的自定義登錄表單)。

或者,我認為 webapp 可以直接從登錄表單中獲取密碼並kinit <username>直接在 web 伺服器上執行。

您推薦的方式是什麼?因為我覺得必須有一些優雅的東西……例如,如果 PAM 將為我獲取 Kerberos TGT,並且我的 webapp 將能夠在登錄後訪問它,那就太好了……

我想知道您是否真的需要在 Web 應用程序中使用 TGT 來針對 vault 或 FreeIPA 進行後續操作。看來 Kerberos 服務票應該足夠了。

為此,使用 S4U2Proxy 和 S4U2Self 可能是最好的方法。mod_auth_gssapi 模組通過 GssapiUseS4U2Proxy 和 GssapiImpersonate 指令支持它們。事實上,FreeIPA 的 WebUI 在針對其 LDAP 後端進行操作時使用了相同的機制。

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