我现在有一个 Kerberos 领域,例如MYDOMAIN.CH
,一个管理服务器和一个主体root/admin
,以及领域主密码和root/admin
主体密码。现在我想使用 Postfix 和 Dovecot 设置 Kerberos 身份验证,以便让客户端使用 Kerberos 进行身份验证,并以经过身份验证的方式发送/接收电子邮件。
在问这个问题之前,我已经对谷歌进行了一些研究,但不幸的是没有找到任何结果(而且 RedHat 的背后是一个不可逾越的硬付费墙)。
我需要调整哪些配置,尤其是配置文件中的身份验证配置才能实现此目标?此外,我需要使用专用的 Unix 套接字,例如private/auth
Kerberos,以便身份验证仅以相对安全的方式进行。
Kerberos 5 通过 GSS API 使用。所有相关的邮件协议都使用 SASL 身份验证框架,其中
GSSAPI
Kerberos-via-GSS 的 SASL 机制名称。所以如果你想让 Dovecot 使用 GSSAPI,首先在 auth_mechanisms 中启用它:
POP3 和 IMAP4 分别使用
pop
和imap
GSS 服务名称,因此 Dovecot 需要 Kerberos 主体pop/<fqdn>
并imap/<fqdn>
在 Kerberos 领域中创建。您必须将其密钥导出到密钥表中,然后将其路径配置为:Kerberos 客户端将遵循 CNAME 来规范化服务主体,因此如果您的客户端连接到
imap.example.com
'CNAME'd tomailsrv.example.com
,通常 Kerberos 只使用后者。但还要注意,较旧的 MIT Krb5 和 Heimdal 默认情况下也会使用反向 DNS来查找服务器主体,因此请确保服务器的所有 IPv4/IPv6 地址的 rDNS 与其真正的“规范”名称匹配。对于 Postfix,您有两个选择:Cyrus SASL 和 Dovecot SASL。使用后者是最容易的,因为您已经设置了它,因此唯一需要的 Postfix 配置更改将是Postfix 和 Dovecot SASL中的那些。
SMTP 使用
smtp
GSS 服务名称,因此您需要创建smtp/<fqdn>
Kerberos 主体。但是,当 Dovecot 处理 SASL 时,该主体的密钥也进入Dovecot 的密钥表—— Postfix 不需要。但是,如果由于某种原因您决定使用 Cyrus SASL 作为您的
smtp_sasl_type
.,那么您将需要为 'smtp' 服务创建一个 libsasl 配置文件/etc/sasl2/smtp.conf
(请注意,旧版本需要它/usr/lib/sasl2
):在使用 Cyrus SASL 时,GSSAPI 由 Postfix 内部的libsasl处理,因此无需设置额外的套接字。
一个缺点是 Cyrus libsasl 的逻辑可能与 Dovecot 不同(例如,关于主体到用户名的转换),因此您最终可能会为您的邮件服务器提供稍微不一致的服务。
您不需要为 Kerberos 身份验证运行 saslauthd 守护程序。它的目的是处理密码验证,例如,它可以根据 Kerberos 领域(直接或通过 PAM)检查接收到的密码,但是让客户端提交密码不是Kerberos 验证,无论它使用什么后端。
对于 SSH,GSS 服务名称是
host
,并且 keytab 始终是/etc/krb5.keytab
。您还需要在服务器的 /etc/ssh/sshd_config 中启用 Kerberos 作为 GSSAPI:(不要注意
KerberosAuthentication
设置:它的目的实际上就像 saslauthd 的一样,因为它实际上处理密码身份验证,并且仅通过尝试获取票证来针对 Kerberos 验证接收到的密码,但不是“真正的” Kerberos 身份验证。)对于 HTTP/HTTPS,服务名称为
HTTP
(大写)。与上述协议的一个小区别是,HTTP 通常使用 SPNEGO 作为附加协商层(即 Kerberos-in-SPNEGO-via-GSS),您会发现更多文档提到“SPNEGO”或“协商”而不是 Kerberos它自己的。Apache 通过外部模块支持 Kerberos,该模块在其他地方
mod_auth_gssapi
有完整的文档。不要使用过时的 mod_auth_kerb 模块——虽然它做同样的事情,但实际上没有维护。Nginx 有一个模块,但它似乎是商业“NGINX Plus”产品的一部分。spnego
请注意,尽管您可以将 Kerberos 与 HTTP 一起使用,但这不会自动导致 webmail 单点登录,因为 web 服务器无法将相同的身份验证数据转发到不同的服务。为此,您需要转发整个 TGT(无约束委派),或通过 S4U 模拟(约束委派),或通过 SASL 模拟(授权身份)。