抛出问题
现场同事在安装PG数据库后,发现:
su切root,报:passwd: Module is unknown
passwd user1修改用户密码,报:passwd: Module is unknown
问题定位
看到这个报错,初步定位就是PAM的问题,至于是PAM配置的问题,还是缺少了PAM模块,还是其他,就需要逐步排查了。
1、查看了现场的/etc/pam.d/su、/etc/pam.d/passwd,均未见问题,但是这两个配置文件均引用了/etc/pam.d/system-auth
2、查看/etc/pam.d/system-auth,也没有发现问题,但是这个文件里的配置就要复杂了很多,所以找了台相同版本的Linux虚机,将其/etc/pam.d/system-auth备份后,替换成现场出问题设备的配置,尝试去复现现场问题:未复现。
3、至此,只能怀疑缺失了PAM模块了,所以,通过命令ls -l /usr/lib64/security/ 查看了/etc/pam.d/system-auth中涉及的PAM,也没有缺失。
4、结合,现场同事是安装PG后出现的问题,所以咨询是源码编译安装还是RPM二进制包安装?答案:源码编译安装。
5、根据现场源码编译安装会装编译环境以及很多依赖,所以怀疑期间pam包被替换了,所以我问了现场pam模块的版本:
正常设备:
pam-1.4.0-5.oe1.x86_64
问题设备:
pam-1.5.2-2.oe2203.x86_64
pam-devel-1.5.2-2.oe2203.x86_64
到这里,这个问题就找到了,因为在openeuler21.10上装了openeuler22.03的PAM,因为版本不兼容导致的问题。
问题解决
1、现场已经无法得到root权限,只能由网管通过console进入(很可能需要进到单用户模式下)
2、通过yum history undo 命令回滚之前的安装升级操作(如果回滚后,原pam包不能被正确安装,可能需要配置正确的镜像源,手动安装)