问题说明

  使用普通用户su - root命令切换root用户,多次报密码错误,用ssh直接root用户登录, 密码确认又是正确的。

$ su - root
密码:
su: 密码不正确

$ su - root
密码:
su: 密码不正确

查看系统登录日志

  然后查看用户登录的系统日志,看错误是依赖包的问题。

# tail -f /var/log/secure

Dec 20 03:46:50 iZn7m5cjif1krmysk8523fZ su: PAM unable to dlopen(/lib/security/pam.tally.so): /lib/security/pam.tally.so: 无法打开共享对象文件: 没有那个文件或目录
Dec 20 03:46:50 iZn7m5cjif1krmysk8523fZ su: PAM adding faulty module: /lib/security/pam.tally.so

检查系统是否有提示的依赖包

  于是检查用户系统里是否存在提示的依赖包发现系统不存在提示错误的pam.tally.so这个依赖包。

# find / -name pam.tally.so

检查系统认证配置文件

​  于是用户登录的认证配置文件,发现有一行/lib/security/pam.tally.so的配置,于是确认问题为该配置所导致。询问系统管理员确认原因为因为要做安全加固,所以做了相关配置。

# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so


account required /lib/security/pam.tally.so deny=3 no_magic root reset
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so

问题修复方法

  找到问题后,处理就很简单了,在此提供两种解决方法供参考使用,第一种方法就是直接注释导致问题的配置语句,如果系统安全加固需要谨慎使用;第二种方法是直接配置普通用户sudo -s切换免秘钥登录,方法如下。

方法一:

# vi /etc/pam.d/system-auth
注释掉该句
#account required /lib/security/pam.tally.so deny=3 no_magic root reset

方法二:

#username为你的实际用户需注意

chmod u+w /etc/sudoers
cp /etc/sudoers /etc/sudoers.orig
echo "username ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
chmod u-w /etc/sudoers

#测试普通用门切换root用户免秘钥登录正常
sudo -s