Linux

不帶 @DOMAIN 後綴的 REMOTE_USER 變數

  • November 12, 2014

我管理一個應用程序,該應用程序允許使用有效的 AD 使用者進行單點登錄,並且目前在 IIS 上執行。為了提高性能,我的任務是將 Web 層遷移到 Linux 上的 Apache/Php。

我在 Win2012 伺服器上有一個 AD,在 CentOS 上有一個 Apache。我已經成功加入域(TEST.COM),並且可以使用windows使用者帳戶登錄centos。

我還配置了 Kerberos 和 Samba,並且 SSO 可以正常工作,但有一個問題。

來自 AD 的使用者在沒有域名前綴/後綴的情況下導入應用程序。所以,如果我的使用者是 AD 中的 TEST\myUser,那麼在應用程序中使用者就是 myUser。

應用程序從 REMOTE_USER 變數中讀取使用者名,但使用者名附加了 @DOMAIN 字元串,導致完整的使用者名是 myUser@TEST.COM。應用程序自然認為它不是有效使用者,因為它希望它只是 myUSer。如果我在名為 myUser@TEST.COM 的應用程序中添加一個新使用者,則 SSO 可以正常工作。

有沒有辦法丟棄 REMOTE_USER 變數中的 @DOMAIN 屬性?你會怎麼做以及需要配置哪些文件?

mod_auth_kerb 是 Kerberos 特定的:它通過 HTTP Negotiate 實現 Kerberos 身份驗證。因此,在 REMOTE_USER 環境變數中,它報告經過身份驗證的客戶端的 Kerberos 標識(“主體名稱”)。Kerberos 主體名稱寫成 foo/bar/baz/…@REALM;領先的組件被稱為“實例”(一個最常見的只有一兩個),而“領域”是 Kerberos 系統中的一個信任域,一種內置的聯合機制。在 AD 中,Kerberos 領域與 AD“域”名稱相同,大寫。

mod_auth_kerb(足夠新的版本)有一個稱為 KrbLocalUserMapping 的功能。這將呼叫 Kerberos 庫函式 krb5_aname_to_localname() 將主體名稱轉換為“本地名稱”;也就是說,在本地主機上有意義的東西。此函式的作用取決於 Kerberos 實現。在 MIT Kerberos 中,您可以使用 krb5.conf 中的“auth_to_local”規則自定義映射。預設規則只翻譯 foo@

$$ default realm $$-> foo,這在有一個領域並且您的使用者名與您的 Kerberos 主體名稱相同的簡單情況下就足夠了。但是,您可能需要更複雜的規則。例如,我們有一個約定,Windows 管理員除了他們的“使用者”帳戶外,還有一個具有域管理員權限的“使用者管理員”帳戶。當登錄到他們的“管理員”帳戶時,他們會在訪問 Unix 上執行的經過身份驗證的 Web 服務時被拒絕,因為“使用者管理員”未被辨識。我們剛剛添加了一個映射,以便 user-admin@REALM 像 user@REALM 一樣映射到“使用者”,並且立即對所有 Web 應用程序透明地修復了這個問題。 有些人建議將所有 user@REALM 名稱全部映射到“使用者”,而不管領域如何(這是建議的 mod_map_user 解決方案所做的)。請注意,這是一個潛在的安全問題:如果您有多個通過跨領域信任連接的 Kerberos 領域,則領域部分變得有意義;它是使用者標識的一部分。如果您只是剝離它,這意味著另一個領域的管理員可以通過創建一個具有相同名稱的帳戶來模擬本地使用者到 Apache。

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