FreeIPA ssh 身份验证无法通过 .k5login 文件进行远程工作

FreeIPA ssh 身份验证无法通过 .k5login 文件进行远程工作

我无法使用 kerberos 和 ~/.k5login (ksu 正在运行) 登录到我的 root 帐户和任何其他不是我所有者的帐户。以下是问题描述:

root@gwhost:~# ssh user@freeipa01
user@freeipa01's password: 
Last login: Tue Sep  8 15:46:20 2015 from 172.16.0.31
-bash-4.2$ klist
Ticket cache: KEYRING:persistent:1570800003:krb_ccache_HGjE46r
Default principal: [email protected]

Valid starting       Expires              Service principal
09/08/2015 17:12:09  09/09/2015 17:12:08  krbtgt/[email protected]
-bash-4.2$ ssh freeipa02
Last login: Tue Sep  8 09:34:04 2015 from freeipa02.domain.local
-bash-4.2$ ksu
Authenticated [email protected]
Account root: authorization for [email protected] successful
[Last failed login: Tue Sep  8 06:25:15 PDT 2015 from freeipa01.domain.local on ssh:notty]
[There was 1 failed login attempt since the last successful login.]
Changing uid to root (0)
[root@freeipa02 user]# cat /root/.k5login 
[email protected]
[root@freeipa02 user]# exit
-bash-4.2$ logout
Connection to freeipa02 closed.
-bash-4.2$ ssh root@freeipa02
root@freeipa02's password: 
Permission denied, please try again.
root@freeipa02's password: 

-bash-4.2$
  1. 登录到第一个使用 Kerberos 的服务器并接收 krb 票证。
  2. 使用票证(无密码)登录到第二个使用 Kerberos 的服务器,然后使用 ksu 和 .k5login 文件以 root 身份登录(无需密码) - 一切成功。
  3. 返回第一台服务器并尝试直接以 root 身份登录(使用 krb 票证和 root .k5login 文件) - 失败(要求输入 root 密码)。

造成这种现象的原因是什么?我可以检查/更改什么来修复它?

答案1

我认为这是由于 SSSD 为 MIT Kerberos 实现的 localauth 插件中缺少 root 用户的条件。localauth 插件控制 Kerberos 库如何将经过身份验证的主体映射到本地用户名。最初,MIT Kerberos 只有“local_to_auth”规则集和“.k5login”来提供此映射。FreeIPA 团队要求 MIT Kerberos 开发人员扩展此机制,以避免在拥有数千和数百万用户的环境中使用手动规则(想想在每台机器上为数百个受信任领域指定 local_to_auth 规则)。

成功验证后,SSH 服务器将调用 krb5_kuserok(),将经过验证的主体名称转换为本地用户名,并检查是否允许登录。SSSD 实现了 localauth 插件,该插件提供了 userok() 实现,但它没有考虑 root 用户的情况。它需要为这种情况返回 KRB5_PLUGIN_NO_HANDLE 错误代码,以便 ~/.k5login 中的默认检查继续进行。

我已经向 SSSD 提交了一张票来纠正该实施:https://fedorahosted.org/sssd/ticket/2788

相关内容