You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让特定域下所有用户通过Kerberos认证SSH登录客户端?

问题解答

一、允许特定域所有用户通过SSH登录的方法

不用逐个编辑.k5login文件,有两种更高效的实现方式:

1. 通配符格式的.k5login文件

MIT Kerberos等主流实现支持在.k5login中用通配符匹配Kerberos主体。直接在目标用户主目录的.k5login里添加一行:

*@EXAMPLE.LOCAL

就能让EXAMPLE.LOCAL域下的所有用户登录到该系统账户。注意要设置正确的文件权限:所有者为目标用户,权限设为600,避免安全风险。

2. 用Kerberos的auth_to_local规则映射域用户到系统账户

如果希望域用户登录到同名的本地系统账户(比如user@EXAMPLE.LOCAL对应本地user),可以修改/etc/krb5.conf的规则:

[realms]
EXTENSODATA.LOCAL = {
    auth_to_local = RULE:[1:$1](@EXAMPLE\.LOCAL$)
    auth_to_local = DEFAULT
}

这条规则会提取EXAMPLE.LOCAL域用户主体的用户名部分,映射到同名本地用户。之后确保SSH开启Kerberos认证(在/etc/ssh/sshd_config中设置GSSAPIAuthentication yes),域用户即可直接登录对应本地账户。

二、你的auth_to_local规则分析

你编写的规则:

auth_to_local = RULE:[1:$1@$0](.*@EXAMPLE\.LOCAL)s/(\d+)@.*/root/

无法实现将EXAMPLE.LOCAL域下所有用户映射为root,问题出在:

  • 替换逻辑的正则(\d+)@.*仅匹配含数字+@的主体(比如123@EXAMPLE.LOCAL),普通用户名(如user@EXAMPLE.LOCAL)完全不匹配,不会执行替换。
  • 规则格式存在逻辑漏洞,没有覆盖所有域用户的场景。

如果要把EXAMPLE.LOCAL域所有用户统一映射为root,正确的规则写法是:

[realms]
EXTENSODATA.LOCAL = {
    auth_to_local = RULE:[0:$0](.*@EXAMPLE\.LOCAL)s/.*@EXAMPLE\.LOCAL/root/
    auth_to_local = DEFAULT
}

这条规则会匹配所有@EXAMPLE.LOCAL结尾的主体,直接替换为root。修改后需重启Kerberos相关服务和SSH服务生效。

内容的提问来源于stack exchange,提问作者Aalish Kshetry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:10:52