我们正在使用 PAM 与外部半径服务器进行身份验证。我们在 /etc/pam.d/common-auth 中有以下行
auth [success=6 default=ignore] pam_exec.so 暴露_authtok /home/cliuser/radiusAuth.sh
PAM 将密码写入脚本的 stdin 并提供用户名作为环境变量。
这一直工作到 libpam-modules 版本 1.1.1-6.1。升级到 1.1.3-7.1 后,当我尝试在脚本中读取时密码为空。我们使用 open-ssh 作为我们的 ssh 服务器。
谢谢,普拉桑斯
简答
我遇到了这个问题,问题是 /etc/ssh/sshd_config 中有一个被违反的策略。我的是设置了 AllowUsers 并且我试图以系统上尚不存在的用户身份登录。
更长的答案
更长的答案是密码被覆盖。它实际上并不是空的。碰巧第一行有一个不可显示的退格字符(^H)和一个新行。我使用的读取命令只是将第一行读入变量。在 stdin 上使用 cat 后,完整内容(如带有 :set list 的 vim 所示)是
"^H$
^M^?INCORRECT^@"
Run Code Online (Sandbox Code Playgroud)
美元符号是一条新线。
经过一番挖掘,我们在 openssh 源代码中找到了这个
这显示密码被覆盖
其中包含我们期望的字符。评论解释了原因:
/*
* If the user logging in is invalid, or is root but is not permitted
* by PermitRootLogin, use an invalid password to prevent leaking
* information via timing (eg if the PAM config has a delay on fail).
*/
Run Code Online (Sandbox Code Playgroud)
用于将 authctxt->valid 标记为 false 的验证逻辑在这里 https://github.com/openssh/openssh-portable/blob/df56a8035d429b2184ee94aaa7e580c1ff67f73a/auth.c#L98
其中列出了用户/密码可能无效的所有原因。
编辑:我已更新链接以锁定特定提交,以便它们保持正确。虽然代码改变了行为并没有改变。
| 归档时间: |
|
| 查看次数: |
3116 次 |
| 最近记录: |