我现在有一个 Kerberos 领域,如MYDOMAIN.CH
,一个管理服务器和一个主体root/admin
,以及领域主密码和root/admin
主体密码。现在我想使用 Postfix 和 Dovecot 设置 Kerberos 身份验证,以便让客户端使用 Kerberos 进行身份验证,并以经过身份验证的方式发送/接收电子邮件。
在提出这个问题之前,我已经在 Google 上进行了一些研究,但不幸的是没有找到任何结果(并且 RedHat 的付费墙是无法绕过的)。
为了实现此目标,我需要调整哪些配置,尤其是配置文件中的身份验证配置?此外,我需要使用像private/auth
Kerberos 这样的专用 Unix 套接字,以便身份验证仅以相对安全的方式进行。
答案1
Kerberos 5 通过 GSS API 使用。所有相关邮件协议都使用 SASL 身份验证框架,其中GSSAPI
是 Kerberos-via-GSS 的 SASL 机制名称。
因此,如果您希望 Dovecot 使用 GSSAPI,首先在 auth_mechanisms 中启用它:
auth_mechanisms = $auth_mechanisms gssapi
POP3 和 IMAP4 分别使用pop
和imap
GSS 服务名称,因此 Dovecot 需要在 Kerberos 域中创建的Kerberos 主体pop/<fqdn>
和。您必须将其密钥导出到密钥表中,然后将其路径配置为:imap/<fqdn>
auth_krb5_keytab = /etc/dovecot/dovecot.keytab
Kerberos 客户端将遵循 CNAME 来规范化服务主体,因此如果您的客户端连接到imap.example.com
已“CNAME”到的mailsrv.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 主体。但是,当 SASL 由 Dovecot 处理时,此主体的密钥也会进入Dovecot 的keytab – Postfix 不需要。
然而,如果由于某种原因您决定使用 Cyrus SASL 作为您的smtp_sasl_type
,那么您将需要为“smtp”服务创建一个 libsasl 配置文件/etc/sasl2/smtp.conf
(请注意,旧版本需要它位于/usr/lib/sasl2
):
mech_list: GSSAPI
keytab: /etc/postfix/postfix.keytab
使用 Cyrus SASL 时,GSSAPI 由库萨斯在 Postfix 内部,因此无需设置额外的套接字。
缺点是 Cyrus libsasl 可能具有与 Dovecot 不同的逻辑(例如关于主体到用户名的转换),因此您最终可能会得到略微不一致的邮件服务器服务。
你不要需要运行 saslauthd 守护进程进行 Kerberos 身份验证。其目的是处理密码身份验证,例如,它可以根据 Kerberos 领域(直接或通过 PAM)检查收到的密码,但让客户端提交密码是不是无论使用什么后端,都进行 Kerberos 身份验证。
对于 SSH,GSS 服务名称是host
,而 keytab 始终是/etc/krb5.keytab
。您还需要在服务器的 /etc/ssh/sshd_config 中启用 Kerberos 作为 GSSAPI:
GSSAPIAuthentication yes
(不要关注设置KerberosAuthentication
:它的目的实际上就像 saslauthd 一样,它实际上处理密码身份验证,并且仅通过尝试获取票证来根据 Kerberos 验证收到的密码,但不是“真正的” Kerberos 身份验证。)
对于 HTTP/HTTPS,服务名称为HTTP
(大写)。与上述协议的细微差别在于,HTTP 通常使用 SPNEGO 作为附加协商层(即 Kerberos-in-SPNEGO-via-GSS),并且您会发现更多文档提到“SPNEGO”或“协商”,而不是单独的 Kerberos。
Apache 通过外部mod_auth_gssapi
模块支持 Kerberos,该模块有完整的文档记录别处。不要使用过时的 mod_auth_kerb 模块——尽管它的功能相同,但实际上无人维护。Nginx 有一个spnego
模块,但它似乎是商业“NGINX Plus”产品的一部分。
请注意,虽然您可以将 Kerberos 与 HTTP 结合使用,但这不会自动导致 Webmail 的单点登录,因为 Web 服务器无法将相同的身份验证数据转发到其他服务。为此,您需要转发整个 TGT(无约束委派),或通过 S4U 进行模拟(约束委派),或通过 SASL 进行模拟(授权身份)。