pam_unix(sudo:auth):对话失败,auth 无法识别 [用户名] 的密码

问题描述 投票:0回答:6

我正在使用 ansible 来配置我的 Centos 7 生产集群。不幸的是,执行以下命令会导致 ansible

Tiemout
和 Linux 可插拔身份验证模块 (pam)
error conversation failed

相同的 ansible 命令效果很好,针对疯狂的 vagrant 盒子中的虚拟实验室执行。

Ansible 命令

$ ansible master_server -m yum -a 'name=vim state=installed' -b -K -u lukas -vvvv
123.123.123.123 | FAILED! => {
    "msg": "Timeout (7s) waiting for privilege escalation prompt: \u001b[?1h\u001b=\r\r"
}

SSHd 日志

# /var/log/secure
Aug 26 13:36:19 master_server sudo: pam_unix(sudo:auth): conversation failed
Aug 26 13:36:19 master_server sudo: pam_unix(sudo:auth): auth could not identify password for [lukas]
ssh ansible centos pam sshd
6个回答
15
投票

我发现问题了。原来是PAM的auth模块问题!让我描述一下我是如何找到解决方案的。

背景:

我设置了我的机器进行调试 - 也就是说我打开了四个终端窗口。

  • 第一个终端(本地计算机):在这里,我正在执行
    ansible prduction_server -m yum -a 'name=vim state=installed' -b -K -u username
  • 第二个终端(生产服务器):在这里,我执行了
    journalctl -f
    (系统范围日志)。
  • 第三个终端(生产服务器):在这里,我执行了
    tail -f /var/log/secure
    (sshd 的日志)。
  • 第四个终端(生产服务器):在这里,我正在编辑
    vi /etc/pam.d/sudo
    文件。

每次,我从第一个终端执行命令我都会收到以下错误:

# ansible error - on local machine Timeout (7s) waiting for privilege escalation prompt error.
# sshd error - on remote machine
pam_unix(sudo:auth): conversation failed
pam_unix(sudo:auth):  [username]
我向同事展示了我的整个设置,他告诉我该错误必须与

“PAM”有关。坦白说,这是我第一次听说PAM。所以,我必须阅读这个PAM教程。 我发现,该错误与位于 /etc/pam.d/sudo 模块中的 auth 接口有关。在互联网上挖掘,我偶然发现了这个带有 pam_permit.so

 控制标志的 
sufficient
 模块,它解决了我的问题!

解决方案

基本上,我添加的是

auth sufficient pam_permit.so

 行到 
/etc/pam.d/sudo
 文件。请看下面的例子。

$ cat /etc/pam.d/sudo #%PAM-1.0 # Fixing ssh "auth could not identify password for [username]" auth sufficient pam_permit.so # Below is original config auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so session include system-auth
结论:

我花了 4 天才找到这个解决方案。我偶然发现了十多个对我不起作用的解决方案,从

“ansible 主机/配置文件中重复的 sudo 密码”“ldap 特定配置” 到从总是脾气暴躁的系统管理员那里获取建议!

注:

由于我不是PAM专家,我不知道此修复是否会影响系统的其他方面,因此请谨慎盲目复制粘贴此代码!但是,如果您是 PAM 专家,请与我们分享替代解决方案或意见。谢谢!


8
投票
假设

lukas 用户是本地帐户,您应该查看 pam_unix.so 模块是如何在 system-auth pam 文件中声明的。但要获得具体答案,需要有关用户帐户和 pam 配置的更多信息。


添加

auth 足够的 pam_permit.so 足以获得访问权限。不建议在除最不安全的测试环境之外的任何环境中使用它。来自 pam_permit 手册页:

pam_permit is a PAM module that always permit access. It does nothing else.


因此,以这种方式将

pam_permit.so 添加为 sufficient 进行身份验证将完全绕过所有用户的安全性。


3
投票
发现自己处于同样的情况,撕扯着我的头发。就我而言,隐藏在 sudoers 文件末尾的行是:

%sudo ALL=(ALL:ALL) ALL
这会撤消之前的授权。如果您不使用 sudo 组,则可以安全地删除此行。


2
投票
当我尝试使用

sudo service apache2 restart

 重新启动 apache2 时,我遇到了同样的错误

当登录 root 时,我能够看到真正的错误在于 apache2 的配置。结果我几个月前删除了一个站点的 SSL 证书文件,但没有在 apache2 中禁用该站点。

a2dissite

成功了。


2
投票
自从使用 pacman 将 sudo 升级到版本 1.9.4 后,我遇到了这个错误。我没有注意到 pacman 提供了一个新的

sudoers

 文件。

我只需要合并

/etc/sudoers.pacnew

。
请参阅此处了解更多详细信息:
https://wiki.archlinux.org/index.php/Pacman/Pacnew_and_Pacsave

我知道这并不能回答最初的问题(与 Centos 系统有关),但这是错误消息的 Google 结果,所以我想我会在这里留下我的解决方案,以防有人偶然发现这个问题来自基于 Arch Linux 的操作系统。


0
投票
它与 Ansible 无关,但我在我的情况下遇到了同样的问题,我需要 telegraf 服务帐户才能在 [inputs.exec] 中运行 sudo 命令。 验证失败,因为未能输入 sudo 密码。所以我添加了 NOPASSWD 但仍然失败并出现此错误消息:

# You can see the same errors using systemctl status telegraf.service or journalctl -u telegraf | tail -f <date> <server name> sudo: pam_unix(sudo:auth): conversation failed <date> <server name> sudo: pam_unix(sudo:auth): auth could not identify password for [telegraf]
问题是我的 /etc/sudoers 文件和 /etc/sudoers.d/ 中存在重复条目。

# /etc/sudoers %sudo ALL=(ALL:ALL) ALL telegraf ALL=(ALL:ALL) ALL #this line should be removed


# /etc/sudoers.d/go telegraf ALL=(ALL:ALL) NOPASSWD:ALL
删除该行并重新启动 telegraf 服务(sudo systemctl restart telegraf)后,它再次工作。

© www.soinside.com 2019 - 2024. All rights reserved.