解决 Linux 中 su: Authentication failure 的问题
在 Linux 系统中,当尝试使用 su
命令切换到 root 用户时,即使输入的密码正确,仍可能会遇到 su: Authentication failure
的错误提示。这个问题可能由多个原因引起,以下是详细的排查步骤和解决方案。
一、检查用户是否在 sudoers 列表中
-
编辑 sudoers 文件:确保用户在
/etc/sudoers
文件中具有适当的权限。使用visudo
命令编辑 sudoers 文件:sudo visudo
-
添加用户权限:在文件中添加以下行,以确保用户具有使用
su
命令的权限:username ALL=(ALL) ALL
将
username
替换为您的实际用户名。
二、检查 PAM 配置
PAM(Pluggable Authentication Modules)配置错误可能导致认证失败。
-
编辑 pam.d 文件:检查
/etc/pam.d/su
文件的配置,确保没有错误配置。该文件的内容应类似于:auth required pam_rootok.so auth sufficient pam_wheel.so trust use_uid auth required pam_wheel.so use_uid auth include system-auth account sufficient pam_rootok.so account include system-auth
-
确保 pam_wheel.so 配置正确:如果使用了
pam_wheel.so
模块,请确保目标用户属于wheel
组:usermod -aG wheel username
三、检查 SELinux 配置
SELinux 可能会阻止某些认证操作。
-
临时禁用 SELinux:可以临时禁用 SELinux 以检查是否是其引起的问题:
sudo setenforce 0
-
永久禁用 SELinux:如果确认是 SELinux 问题,可以编辑
/etc/selinux/config
文件,设置SELINUX=disabled
:SELINUX=disabled
-
重启系统:修改后重启系统使设置生效:
sudo reboot
四、检查系统日志
系统日志可以提供更多关于认证失败的详细信息。
-
查看认证日志:使用
journalctl
查看系统日志:sudo journalctl -xe
-
查看安全日志:检查
/var/log/secure
文件中的日志信息:sudo cat /var/log/secure
五、确认 root 用户状态
-
确认 root 用户是否锁定:检查 root 用户是否被锁定:
sudo passwd -S root
输出应为
root P
表示用户没有锁定。 -
解锁 root 用户:如果用户被锁定,可以使用以下命令解锁:
sudo passwd -u root
六、检查 su 命令权限
-
确认 su 命令权限:确保
su
命令具有正确的权限设置:ls -l /bin/su
输出应类似于:
-rwsr-xr-x 1 root root 32128 Apr 4 2018 /bin/su
rws
表示su
命令具有 SUID 位。 -
修正 su 命令权限:如果权限不正确,可以使用以下命令修正:
sudo chmod 4755 /bin/su