Squid

Kerberos 密鑰表權限

  • March 31, 2015

您能否分享一些關於 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(例如,with net 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>

重複最後一步,直到只剩下以httpor開頭的條目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

為我工作:-)

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