在 apache httpd 內採用 Kerberos 進行驗証
你果你擁有一台 Kerberos 或 Active Directory 的安裝,你或許會想在 apache httpd 內採用 Kerberos 進行驗証及單一登錄。 這份教學文檔假設你已經有一台運作中的 kerberos 伺服器,或者如 zh-tw/TipsAndTricks/WinbindADS 般採用 winbindd 整合了 active directory。
這份教學文檔只供 CentOS 5 使用。CentOS 4 在 httpd-config 內需要稍微不同的選項。
1. Keytab
要在 apache httpd 內使用 kerberos 進行驗証,在你執行 apache httpd 的機器上的 keytab 檔內需要有一項服務的主記錄。這裡的所有描述都採用位於 /etc/krb5.keytab 的總體 keytab 檔。基於安全理由,你或許會給每個服務一個 keytab 檔,好叫服務甲無法閱讀服務乙的 keytab 資訊。apache httpd 的 kerberos 模塊預設使用的服務原則名叫 HTTP。
1.1. 清一色 kerberos
要以 kadmin 加入一個服務原則,在執行 apache httpd 的機器上啟動 kadmin 並使用這個指令
ktadd HTTP/$HOST@$REALM
當中 $HOST 是這台機器的完整域名,而 $REAL 是你的 kerberos 域名。假如你有意使用另一個服務名稱,請亦取替 HTTP。
1.2. winbindd
如果你使用 winbindd,請使用以下指令來建立 keytab,並在你的 keytab 內加入服務原則:
net ads keytab create net ads keytab add HTTP
之後你可以發出這個指令來檢查你的 keytab
klist -k
它應該列出最少 2 行,包括 host/$HOST@$REALM 及 HTTP/$HOST@$REALM 的原則。
2. 設定 apache httpd
除了 krb5-workstation 這個套件外,你亦需要 mod_auth_kerb 這個套件。一旦你安裝了它,你便可以在合適的 http 段落裡(<Directory> 或 <Location>)設定驗証。 這個設定檔有以下模樣:
<Location /> AuthName "Restricted Access" AuthType Kerberos Krb5Keytab /etc/krb5.keytab KrbAuthRealms $REALM KrbMethodNegotiate On KrbMethodK5Passwd On require valid-user </Location>
很明顯你需要以你的 kerberos 區域來取代 $REALM。如果有非 kerberos 的系統進行存取的話,你需要設定 KrbMethodK5Passwd 為 On 來採用密碼作後備方法。
3. 單一登錄
3.1. Internet Explorer
假若你的 kerberos 區域等同你的 Active Directory 區域,Internet explorer 會自動嘗試以 kerberos 登錄。
3.2. Firefox
在 firefox 的位置列內輸入 about:config 並編輯 network.negotiate-auth.trusted-uris 這個項目,輸入 apache httpd 伺服器的機名,或 .domain.tld 來容許這個區域內的所有伺服器採用 kerberos。
4. 偵錯
如果運作上出現問題,請利用 klist 來確定你在客戶端擁有一張有效的 kerberos 通行票。借著將 LogLevel 設定為 debug 來啟動 apache httpd 伺服器上的偵錯日誌,輸出便可以在 apache httpd 的故障日誌中找到。
Translation of revision 3