Kerberos keytab 权限

Kerberos keytab 权限

您能否分享一下关于 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]

对我有用:-)

相关内容