解决Linux修改密码报PAM身份验证失败错误

最近听到一个运维开发任务,需要开发一个帐号管理系统,敌人头三千多台 Linux 服务器进行批量管理,实现定期修改 root 密码并加密,并向运维管理后台提供密码解密等功能。

刚开始,我基于 php+ssh2_exec 开发了一套雏形。基本功能都实现了,结果老大说这里的运维就让我有点会点 php,后面可不好维护。本来也让我说服了,因为写都写好了,顾不上重构?

后面线上测试发现,公司有部分系系统接入了ldap鉴权,php的ssh2_exec就无法工作了,返回登陆失败的错误。

不得已,最后苦逼的用 python 将这个系统重构了一遍,并实现了多线程模式,因为不太会 python 的 cgi 框架,就用 php 搭的 api 接口,到此为止,基本全部搞定了。

在线上测试了几天后,发现总是有一台服务器要卡半天,登陆验证日志倒是成功的,但总是卡在修改密码那一步。

于是,打印一下过程,发现 chpasswd 改密码这一步报错了!导致 expect 卡住了。

查看以下错误信息是:

chpasswd:PAM 身份验证失败

实际登陆这台机器,执行了chpasswd,发现也是报告这个错误。

试着执行密码,也报错误:

passwd: pam_start() 失败,错误 26

搜了半天,也看了半天的洋文案例,都没找到一个贴切的解决办法。最终,我看到了一篇类似的案例,他通过检查 /var/log/secure 日志文件找到错误。

于是,我也试着尝试碰碰运气,发现真正的记录!

在 /var/log/secure 中,发现我在执行 chpasswd 命令时会提示找不到 /etc/pam.conf 文件。于是到其他系统上去看有没有这个文件,发现也没有。

最终,我无奈之下,对抗了2个系统的/etc/目录,让我发现了猫腻!不知道哪个无聊的人把这个系统的/etc/pam.d 给重命名为 pam.d_bak 了!!我去你XXX,浪费我半天时间。

直接 mv pam.d_bak pam.d,然后就能够执行 echo 'root:newpassword'|chpasswd 来修改密码了。

这类原因并不多见,所以这个问题很可能会被搜索引擎得到答案。

不过,我写这篇文章的时候,特意把 pam.d 再一次重命名,chpasswd 仍然报错,但是 passwd 却报错却变成了:

passwd:权限被拒绝

罗里吧啦说了半天,主要分享一下这个奇葩的案例和解决的过程。当搜索引擎找不到的时候,恭喜你第一个吃螃蟹的人,有了造福互联网的机会,赶紧解决问题再分享吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值