配置 sssd 连接 AD 服务器。我将 id_provider 设置为 ldap
由于 AD 服务器无法接受 TLS,因此我通过以下方式关闭它:
- ldap_id_use_start_tls = false
- 在 ldap.conf 中关闭 SSL
当我通过域帐户登录 ftp 时,它可以工作。但是对于 ssh 则失败。
我对比了 ftp 和 ssh 的 TCPdump,发现 ftp 和 ssh 的 bindrequest 中的密码不一样,看来 ssh 对密码进行了加密,导致 pam_sss 从 PAM 栈中获取了错误的密码。
加密密码如下:简单:\b\n\r\177INCO
是否可以将其更改为 ssh 的纯文本密码?
答案1
您在此处看到的不是加密密码,它来自 sshd,具体来说:
const char junk[] = "\b\n\r\177INCORRECT";
在 sshd 尝试使用 PAM 进行身份验证之前,它会调用 getpwnam() 来检查用户是否有效。如果无效,它会将输入的密码替换为垃圾字符串的一部分,然后使用 PAM 验证用户/垃圾密码。
我相当确定,最终导致我的问题出在 nscd 上。当我停止该服务时,getpwnam 可以工作,并且正确的密码被发送到 LDAP 后端。我已经安装了 nscd,如果不重新启动,它就不会检查 LDAP 中的用户查询。从命令行测试 getpwnam 调用的一种简单方法是运行id username
或。但要小心,即使用户特定的命令不起作用,getent passwd username
运行并查找预期的用户名也会起作用。getent passwd