Kerberos 密鑰表權限
您能否分享一些關於 Kerberos 密鑰表是否應該在所有情況下都只能由 root 讀取的想法?或者這條規則有例外嗎?
我正在 Debian Jessie 上設置 Squid 代理,以使用 Active Directory 進行 Kerberos 身份驗證。大多數文件建議為 Squid 創建一個包含“HTTP”服務主體條目的密鑰表。
但是,如果我將我的系統加入到 Active Directory 域中,例如,使用realmd,這將已經創建了一個密鑰表,即
/etc/krb5.keytab
. 我什至可以確保這個 keytab 包含“HTTP”服務主體的必要條目:# adcli preset-computer -D mydomain.org --service-name HOST --service-name HTTP proxy.mydomain.org # realm join mydomain.org
/etc/krb5.keytab
因此,我可以簡單地為執行 Squid 的程序(它是 Debian 上的使用者代理)授予讀取權限,而不是為 Squid 創建第二個 keytab 。我知道,如果除 root 以外的任何使用者都可以訪問系統 keytab ,則將其視為安全問題
/etc/krb5.keytab
。但是,如果我的伺服器除了 Squid 代理之外沒有任何服務,那麼專門為 Squid 創建的 keytab(例如,withnet ads keytab create && net ads keytab add HTTP
)將包含或多或少與系統 keytab 相同的資訊。(或者不會?)那麼以這種方式設置時,我會跳入任何安全漏洞嗎?
我想我應該重新表述我的問題,從而回答它:如何創建僅包含HTTP SPN 條目的密鑰表?
如果我使用以下命令為 Squid 創建一個新的密鑰表,如Squid wiki中所述
# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab # net ads keytab CREATE # net ads keytab ADD HTTP # unset KRB5_KTNAME
那麼新的 keytab
/etc/squid3/HTTP.keytab
將包含與系統 keytab 相同的 SPN 的條目以及HTTP SPN 的條目:# klist -k Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ----------------------------------------- 2 PROXY$@mydomain.org 2 host/proxy.mydomain.org@mydomain.org 2 host/proxy@mydomain.org # klist -k /etc/squid3/HTTP.keytab Keytab name: FILE:/etc/squid3/HTTP.keytab KVNO Principal ---- ----------------------------------------- 2 PROXY$@mydomain.org 2 host/proxy.mydomain.org@mydomain.org 2 host/proxy@mydomain.org 2 http/proxy.mydomain.org@mydomain.org 2 http/proxy@mydomain.org 2 HTTP/proxy.mydomain.org@mydomain.org 2 HTTP/proxy@mydomain.org
這就是為什麼我沒有看到拒絕 Squid 對系統密鑰表的讀取權限的意義
/etc/krb5.keytab
——無論如何,它在自己的密鑰表中具有相同的 SPN。但是,如果我只
HTTP.keytab
包含HTTP 條目,那麼不同的權限將是有意義的:然後 Squid 只能使用它實際需要的 HTTP SPN——但不能使用系統 keytab 中可能包含的其他 SPN。可以這樣做:# net ads keytab add HTTP
這會將 HTTP SPN 添加到系統密鑰表中。然後我們基於系統 keytab 創建一個新的 keytab,並在這個新的 keytab 中刪除除 HTTP SPN 之外的所有內容:
# ktutil ktutil: rkt /etc/krb5.keytab ktutil: list ktutil: delent <number of non-HTTP entry>
重複最後一步,直到只剩下以
http
or開頭的條目HTTP
。然後將結果寫入新文件並設置權限:ktutil: wkt /etc/squid3/HTTP.keytab ktutil: quit # chown root:proxy /etc/squid3/HTTP.keytab # chmod 640 /etc/squid3/HTTP.keytab
生成的 keytab 現在只包含 HTTP SPN:
# klist -k /etc/squid3/HTTP.keytab Keytab name: FILE:/etc/squid3/HTTP.keytab KVNO Principal ---- ----------------------------------------- 2 http/proxy.mydomain.org@mydomain.org 2 http/proxy@mydomain.org 2 HTTP/proxy.mydomain.org@mydomain.org 2 HTTP/proxy@mydomain.org
為我工作:-)