kerberos在linux中需构建以kdc为核心的可信认证体系:先确保主机名/dns一致、全节点时间同步(≤5分钟)、开放88/749/464端口、精准配置krb5.conf;再为各服务创建主体并分发keytab;最后启用ssh/nfs等服务的gssapi认证,客户端通过kinit获取tgt实现单点登录。

Kerberos 身份认证在 Linux 服务器中不是“加个插件就能用”的功能,而是需要围绕 KDC(密钥分发中心)构建一套可信的认证体系。它的核心价值在于:用户一次登录获取 TGT(票据授予票据),后续访问 SSH、NFS、Hive、Web 应用等服务时无需重复输密,且所有凭证全程不以明文形式在网络上传输。
搭建可信的 KDC 认证中心
KDC 是整个 Kerberos 体系的根。它必须部署在一台专用或高保障的服务器上,并确保以下四点到位:
-
主机名与 DNS 严格一致:KDC 服务器需有固定主机名(如
kdc.example.com),且所有客户端能通过 DNS 或/etc/hosts正向/反向解析该名称;否则票据验证会因主机名不匹配而失败。 -
时间同步是硬性前提:Kerberos 票据含时间戳,客户端与 KDC 时间差超过默认 5 分钟即拒绝认证。务必在所有节点运行
chronyd或ntpd,指向同一 NTP 源。 - 防火墙开放关键端口:UDP/TCP 88(AS/TGS 通信)、TCP 749(kadmin 管理)、UDP 464(密码修改)必须可达;生产环境建议仅允许内网 IP 访问。
-
配置文件精准无歧义:
/etc/krb5.conf中default_realm、kdc和admin_server必须指向真实地址,域名大小写敏感,dns_lookup_kdc建议设为false避免解析干扰。
为服务注册主体并分发密钥表
每台参与 Kerberos 认证的服务器(如 SSH 服务器、NFS 服务器、HiveServer2)都必须拥有自己的服务主体(Service Principal),格式为 服务名/主机全名@REALM,例如 host/server1.example.com@EXAMPLE.COM 或 nfs/nfs1.example.com@EXAMPLE.COM。
- 使用
kadmin.local(在 KDC 本机)或kadmin -p admin/admin@EXAMPLE.COM(远程)创建主体,并用ktadd -k /tmp/host.keytab 主体名生成密钥表(keytab)。 - 将 keytab 安全复制到对应服务器的
/etc/krb5.keytab,权限设为600,属主为root;切勿在多台机器共用同一 keytab 文件。 - 确认 keytab 内容:执行
klist -k /etc/krb5.keytab,应看到与本机主机名匹配的主体条目及加密类型(推荐 AES256-CTS)。
配置常用服务启用 Kerberos 认证
服务本身不自动支持 Kerberos,需显式开启 GSSAPI(Generic Security Services API)机制:
-
SSH 服务:编辑
/etc/ssh/sshd_config,启用GSSAPIAuthentication yes、GSSAPICleanupCredentials yes、GSSAPIKeyExchange yes,重启sshd;客户端需安装krb5-user并能正常kinit。 -
NFS 服务:启用
rpc-gssd和rpc-svcgssd,导出选项中加入sec=krb5p(加密传输)或sec=krb5i(完整性校验);挂载时需指定-o sec=krb5p。 -
Hive/Spark 等大数据服务:除配置 keytab 外,还需在服务启动参数中指定
java.security.krb5.conf、javax.security.auth.useSubjectCredsOnly=false,并在core-site.xml中设置hadoop.security.authentication=kerberos。
客户端接入与日常运维要点
客户端只需完成三步即可加入体系:安装客户端工具、同步 krb5.conf、获取并缓存票据。
- 执行
kinit username@EXAMPLE.COM获取 TGT,输入密码后可用klist查看有效期;票据默认缓存在/tmp/krb5cc_$(id -u)。 - 票据过期前可执行
kinit -R刷新(需配置renew_lifetime),或设为登录时自动执行(如 PAM 模块pam_krb5)。 - 排错优先看日志:
/var/log/secure(SSH)、/var/log/messages(KDC)、klist -e(查看加密类型是否匹配)、kvno 主体名(测试 KDC 是否响应主体查询)。











