Kerberos

分佈式服務的 Kerberos 主體名稱

  • January 24, 2010

Kerberos (v5) 主體名稱的兩種典型形式似乎是:

username[/instance]@REALM
service/fully-qualified-domain-name@REALM

對於可能存在於多個埠的服務,我還看到了類似的情況:

service/fully-qualified-domain-name:port@REALM

我有一個內部應用程序,它現在正在被 Kerberized,並且想了解應該如何命名服務主體。該服務是分佈式的,在多個子域中的每一個中的多台機器上執行多個實例。

例如,假設我的域名是zombo.com,而我的 Kerberized 服務“tenaciousd”在電腦“www1”到“www5”上執行。此外,每台機器在眾所周知的埠上都有十個實例,比如 25001 到 25010。

所以我有五十個伺服器實例,基本上都是一樣的,這讓我可以平衡負載,逐步部署新版本等等。

現在,我應該如何在 Kerberos 中命名服務主體?每個執行服務的主機是否應該有一個,就像最常見的形式一樣?

tenaciousd/www1.zombo.com@ZOMBO.COM
tenaciousd/www2.zombo.com@ZOMBO.COM
tenaciousd/www3.zombo.com@ZOMBO.COM
tenaciousd/www4.zombo.com@ZOMBO.COM
tenaciousd/www5.zombo.com@ZOMBO.COM

或者每個服務實例有一個服務主體是更好的做法(以及為什麼)?

tenaciousd/www1.zombo.com:25001@ZOMBO.COM
tenaciousd/www1.zombo.com:25002@ZOMBO.COM
tenaciousd/www1.zombo.com:25003@ZOMBO.COM
...
tenaciousd/www5.zombo.com:25010@ZOMBO.COM

最後,如果只有一個服務主體,這似乎更簡單但不太常見?

tenaciousd@ZOMBO.COM

如果重要的話,Kerberized 服務(和客戶端)使用 Cyrus SASL、GNU GSSAPI 和 MIT Kerberos 5。除了服務名稱之外,SASL API 還採用“完全限定域名”參數,但我懷疑這是因為它支持不僅僅是 Kerberos,我們可能還可以傳遞實際 FQDN 以外的東西。

我發現的大多數文件都假設每個服務都在領域中的單個主機上執行,或者至少客戶端非常關心他們連接到哪個服務實例。就我而言,從客戶的角度來看,服務幾乎都是一樣的,那麼這裡的最佳實踐是什麼?

對於不唯一的東西(即複製服務,執行完全相同的職責),我通常共享一個公共伺服器主體。例如,如果外部實體看到相同的域名,這很有效,因為它保持了這種錯覺。

這也意味著如果使用者從實例 1 切換到實例 49,他們將不必執行另一次 Kerberos 握手,因為他們已經擁有有效的工作票。他們將使用該票證對任何實例進行身份驗證,而無需為每個實例獲取新票證。

因此,我會使用:

tenaciousd/www.example.com@EXAMPLE.COM

作為此服務的主體名稱,假設 www.example.com 是客戶端處理此服務的方式。

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