您能否分享一下关于 Kerberos keytab 是否应该仅由 root 读取的想法 -在任何情况下? 或者这条规则有例外吗?
我正在 Debian Jessie 上设置 Squid 代理,以便使用 Active Directory 进行 Kerberos 身份验证。大多数文档建议为 Squid 创建一个密钥表,其中包含“HTTP”服务主体的条目。
但是,如果我将系统加入到 Active Directory 域中,例如领域,这将创建一个密钥表,即/etc/krb5.keytab
。我甚至可以确保此密钥表包含“HTTP”服务主体的必要条目:
# adcli preset-computer -D mydomain.org --service-name HOST --service-name HTTP proxy.mydomain.org
# realm join mydomain.org
因此,我不需要为 Squid 创建第二个密钥表,只需向/etc/krb5.keytab
运行 Squid 的进程(Debian 上的用户代理)授予读取权限即可。
我知道如果除 root 之外的任何用户都可以访问系统密钥表,则这被视为安全问题/etc/krb5.keytab
。但是,如果我的服务器没有托管任何服务,只有 Squid 代理,则专门为 Squid 创建的密钥表(例如,使用net ads keytab create && net ads keytab add HTTP
)将包含与系统密钥表大致相同的信息。(或者不会?)
那么,以这种方式设置会不会存在任何安全漏洞?
答案1
我想我应该重新表述我的问题,从而回答它:如何创建包含仅有的HTTP SPN 的条目?
如果我使用以下命令为 Squid 创建一个新的密钥表,如鱿鱼维基
# export KRB5_KTNAME=FILE:/etc/squid/HTTP.keytab
# net ads keytab CREATE
# net ads keytab ADD HTTP
# unset KRB5_KTNAME
那么新的密钥表/etc/squid3/HTTP.keytab
将包含与系统密钥表相同的 SPN 的条目加HTTP SPN 的条目:
# klist -k
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- -----------------------------------------
2 [email protected]
2 host/[email protected]
2 host/[email protected]
# klist -k /etc/squid3/HTTP.keytab
Keytab name: FILE:/etc/squid3/HTTP.keytab
KVNO Principal
---- -----------------------------------------
2 [email protected]
2 host/[email protected]
2 host/[email protected]
2 http/[email protected]
2 http/[email protected]
2 HTTP/[email protected]
2 HTTP/[email protected]
这就是为什么我认为拒绝 Squid 对系统密钥表的读取权限是没有意义的/etc/krb5.keytab
——无论如何,它在自己的密钥表中有相同的 SPN。
但是,如果我让HTTP.keytab
包含仅有的HTTP 条目的不同权限将有意义:然后 Squid 只能使用它实际需要的 HTTP SPN - 但不能使用系统密钥表中可能包含的其他 SPN。可以按如下方式完成:
# net ads keytab add HTTP
这会将 HTTP SPN 添加到系统密钥表。然后,我们基于系统密钥表创建一个新的密钥表,并在此新密钥表中删除除 HTTP SPN 之外的所有内容:
# ktutil
ktutil: rkt /etc/krb5.keytab
ktutil: list
ktutil: delent <number of non-HTTP entry>
重复最后一步,直到只剩下以http
或开头的条目HTTP
。然后将结果写入新文件并设置权限:
ktutil: wkt /etc/squid3/HTTP.keytab
ktutil: quit
# chown root:proxy /etc/squid3/HTTP.keytab
# chmod 640 /etc/squid3/HTTP.keytab
生成的密钥表现在仅包含 HTTP SPN:
# klist -k /etc/squid3/HTTP.keytab
Keytab name: FILE:/etc/squid3/HTTP.keytab
KVNO Principal
---- -----------------------------------------
2 http/[email protected]
2 http/[email protected]
2 HTTP/[email protected]
2 HTTP/[email protected]
对我有用:-)