Kerberos

MIT Kerberos for Windows 下的多個領域和多個 TGT

  • October 13, 2017

我的本地電腦使用 Windows 7 Pro,屬於 LR 領域,由 AD 伺服器管理。我在連接到該領域的網路時登錄到我的電腦。我可以使用 MIT Kerberos for Windows 版本查看 TGT。4.0.1。

我想訪問外國領域 FR 上的資源。LR 和 FR 之間沒有 Kerberos 信任,但它們允許彼此之間的 TCP 流量。我通過其 KDC (Red Hat IdM / FreeIPA) 請求 FR 的 TGT,並在受到挑戰時成功輸入了我的密碼。同樣,我可以使用 MIT Kerberos for Windows 版本查看 TGT。4.0.1。儘管來自 LR,我現在可以通過 SSH 訪問 FR 中的資源而無需輸入密碼。

問題是當我獲得 FR 的 TGT 時,我的 LR 主體的 TGT 消失了。只有 FR TGT 在 MIT Kerberos 中可見。如果我鎖定我的電腦,然後用我的密碼解鎖,現在 FR TGT 不見了,取而代之的是一個新的 LR TGT。

**似乎 MIT Kerberos for Windows 一次只能儲存一個 TGT。**每個 TGT 完全適用於其領域的所有意圖和目的。如何配置 MIT Kerberos 讓我同時擁有兩個 TGT,每個領域一個?是否可以將多個客戶端實例“劃分”,每個客戶端實例都指向不同的 KRB5_CONFIG 和本地密鑰表?如果我不能,是否存在客戶端 Kerberos 5 的替代 Windows 實現,即使沒有跨域信任也是如此?

PS - 我不想要信任。得不到信任。

**更新:**我之前省略了其中一些細節,因為我認為這可能會混淆問題。但根據布拉德的回答,這可能是有道理的。我希望大多數本地軟體會使用 Kerberos 的內置 Windows 實現,並始終使用 LR 密鑰表。

但是,像我這樣的高級使用者使用 Cygwin 下的 heimdal 來通過 SSH 連接到 FR。我希望通過 Cygwin DLL 的任何東西都可以使用 heimdal 並且永遠不會看到 LR TGT(它沒有,至少預設情況下沒有)。我明確地 kinit 並繼續前進。

對於那些不使用 Cygwin 但確實使用 PuTTY 的非高級使用者,我必須支持這些使用者。PuTTY 允許您指定要使用的 GSSAPI 實現的庫路徑和 DLL。例如,我將 SSH 會話配置為使用 MIT Kerberos DLL 而不是內置的 Windows DLL。我希望那裡有一個 DLL,它要麼從未試圖找到 LR TGT(如 heimdal),要麼允許來自多個領域的多個 TGT。它不必像 MIT Kerberos 那樣具有 GUI 視窗,但它有幫助。

好的,我提出了一個需要更多改進的可行解決方案,因此可能不適用於所有環境。

這適用於:

  1. MIT Kerberos for Windows 4.0.1 和 Windows 支持工具(KSETUP.EXE、KTPASS.EXE)
  2. 膩子0.63
  3. 視窗 7 SP1

我正在查看 MIT Kerberos 原始碼並遇到了README for Windows。特別感興趣的是Credentials Cache的不同值。**它支持API:的預設值,但我驚訝地發現我的系統資料庫使用MSLSA:**代替。

HKEY_CURRENT_USER\Software\MIT\Kerberos5. _ 我嘗試了**MEMORY:**起初,這導致了一些有趣的行為。打開 PuTTY 會話時,我的 MIT Kerberos Ticket Manager 視窗將恢復並進入前台,要求我輸入憑據。哇!這種情況以前從未發生過,但可惜的是,PuTTY 會拒絕它。對我有用的價值是FILE:C:\Some\Full\File\Path. 我不確定如何保護對指定文件的訪問,所以我將把它作為練習留給讀者。我得到了相同的視窗到前台行為,這次只有 PuTTY 喜歡它。票務管理器視窗最後也同時顯示了 LR 和 FR 票。票證被證明是可轉發的,並且可以在多次 Windows 鎖定/解鎖中存活。**筆記:**確保在系統資料庫編輯之間完全退出並重新啟動票務管理器。我還沒有嘗試過API :的****ccname

我不知道這是否會有所不同,但在開始工作之前我也玩過**KSETUP 。**起初,無參數的 KSETUP 只會顯示有關 LR 的資訊。我在本地工作站上添加了一些關於 FR 的資訊。

ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM
ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported

好吧,我不會說它不能用 Windows 完成,但我會說限制是基於會話的。 那麼問題在於,對於每個會話,Windows 都會記憶體一張票。當您鎖定電腦然後將其解鎖時,將啟動另一個會話並從 KDC 請求新密鑰。當您註銷然後再次登錄電腦時,也會發生同樣的事情。這種方法實際上也是為伺服器會話確定使用者權限的方式,這意味著可以記憶體密鑰/票證,這樣您啟動的每個伺服器資源或會話都不必詢問您的密碼,但我從未聽說過/對其進行讀取/研究,以便能夠記憶體多個。

現在,您可能已經知道,鑑於您在問題中顯示的知識,所以我會說基於 Windows 儲存您在發出 TGT 時獲得的密鑰並且基於會話的事實,我不知道認為使用 JUST Windows 是可能的。用於 Windows 的 MIT Kerberos 可能有一種方法可以在一個使用者下啟動兩個會話,但即便如此,我也不確定您正在訪問的資源如何知道要使用哪個票證/密鑰對。那有意義嗎?

有關 Windows 如何儲存 TGT/密鑰對的說明,請參閱此內容。

順便說一句,非常好的問題。

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