設定 Kerberos 時,一般可以採用兩種方法 — 透過 /etc/krb5.conf
檔案靜態設定,或透過 DNS 動態設定。使用 DNS 組態時,Kerberos 應用程式會嘗試透過 DNS 記錄找出 KDC 服務。使用靜態組態時,請將 KDC 伺服器的主機名稱新增到 krb5.conf
(並在移動 KDC 時更新檔案,或以其他方式重新設定領域)。
以 DNS 為基礎的組態通常較有彈性,每台機器的組態工作量比較少。但是,它要求您的領域名稱必須和 DNS 網域或它的子網域一樣。透過 DNS 設定 Kerberos 也會產生些微的安全性問題 — 攻擊者可透過 DNS 嚴重地干擾您的基礎結構 (藉由癱瘓名稱伺服器、欺騙 DNS 記錄等)。但是,最多僅能達成拒絕服務而已。除非您在 krb5.conf
中輸入 IP 位址取代主機名稱,否則在靜態組態案例中也會發生相似狀況。
設定 Kerberos 的其中一個方式是編輯 /etc/krb5.conf
組態檔。預設安裝的檔案包含各種範例項目。在啟動之前,請刪除所有這些項目。krb5.conf
由數個小節所組成,每一個由包括在括號中的小節名稱做為前導,如 [this]
。
若要設定您的 Kerberos 用戶端,請將下列節新增到 krb5.conf
(其中 kdc.example.com
是 KDC 的主機名稱):
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = kdc.example.com admin_server = kdc.example.com }
default_realm 行設定 Kerberos 應用程式的預設領域。
如果您有數個領域,僅需將其他敘述句新增到 [realms]
小節。
同時新增敘述句到此檔案,告知應用程式如何將主機名稱對應到領域。例如,在連線到遠端主機時,Kerberos 程式庫必須知道此主機所處的領域。這必須在 [domain_realms]
小節中設定:
[domain_realm] .example.com = EXAMPLE.COM www.foobar.com = EXAMPLE.COM
這告訴程式庫 example.com
DNS 網域中的所有主機均位於 EXAMPLE.COM
Kerberos 領域。此外,名為 www.foobar.com
的外部主機應該被視為 EXAMPLE.COM
領域的成員。
以 DNS 為基礎的 Kerberos 組態大量使用 SRV 記錄。請參閱 (RFC2052) A DNS RR 以指定服務的位置,網址為 http://www.ietf.org。在 BIND 名稱伺服器的較早執行方式中不支援這些記錄。至少必須使用 BIND 版本 8 才可執行。
SRV 的名稱 (就 Kerberos 相關的部分) 格式永遠為 _service._proto.realm
,此處領域為 Kerberos 領域。DNS 中的網域名稱沒有大小寫之分,因此有大小寫之分的 Kerberos 領域在使用此組態方式時會發出問題。_service
是服務名稱 (例如,在嘗試聯絡 KDC 或密碼服務時使用不同名稱)。_proto
可以是 _udp
或 _tcp
,但是並非所有服務均支援兩種通訊協定。
SRV 來源記錄的資料部分由優先程度值、權重、連接埠號碼和主機名稱所組成。優先程度定義嘗試主機的順序 (較低的值表示較高的優先程度)。權重在此支援相同優先程度伺服器之間負載平衡的排序。您可能從不需要它,因此也可以設為零。
MIT Kerberos 目前在查詢服務時會查閱下列名稱:
定義 KDC 精靈 (驗證和票證授予伺服器) 的位置。典型記錄是像這樣:
_kerberos._udp.EXAMPLE.COM. IN SRV 0 0 88 kdc.example.com. _kerberos._tcp.EXAMPLE.COM. IN SRV 0 0 88 kdc.example.com.
描述遠端管理服務的位置。典型記錄是像這樣:
_kerberos-adm._tcp.EXAMPLE.COM. IN SRV 0 0 749 kdc.example.com.
因為 kadmind 不支援 UDP,應該沒有 _udp
記錄。
和靜態組態檔相似,有一種機制可通知用戶端特定伺服器在 EXAMPLE.COM
領域中,即使它不是 example.com
DNS 網域的一部分。可將 TXT 記錄附加到 _keberos.hostname
來完成,如此處所示:
_keberos.www.foobar.com. IN TXT "EXAMPLE.COM"