root账户无法登录解决办法

今天遇到的一个看上去很奇怪的问题(其实是自己蠢,具体经过感兴趣的可以参照一次特殊的root密码错误经历)。本文主要记录Linux系统下,root账户无法登录的解决办法。

  1. /etc/securetty中规定了root可以从哪个tty设备登录,如果root登录不了,可以检查/etc/securetty文件,看看是否禁用了什么设备。如果发现被修改,可以将文件改回原来的样子。并且注意,如果修改了该文件,要保证该文件的权限模式为600,才能正常生效。

    正常的/etc/securetty文件内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    console
    vc/1
    vc/2
    vc/3
    vc/4
    vc/5
    vc/6
    vc/7
    vc/8
    vc/9
    vc/10
    vc/11
    tty1
    tty2
    tty3
    tty4
    tty5
    tty6
    tty7
    tty8
    tty9
    tty10
    tty11
  2. /etc/ssh/sshd_config文件中禁用root登录。如果sshd_config文件中有PermitRootLogin no这行,root就无法通过ssh登录。请改成PermitRootLogin yes,然后重启ssd/etc/init.d/sshd restart

  3. 使用了pam认证,pam配置中限制了root账号的登录。这种情况的可能性比较多,需要仔细检查/etc/pam.d/下以及/etc/security/下的配置文件是否有禁止root的设置。

  4. /etc/passwd文件被修改。检查passwd文件中,rootuid是否为0,rootshell路径是否真实存在,总之root这行的每个设置要完全正常才行。

    我就遇到过一种特殊情况,passwd文件的换行符变成了DOS格式,结果linux系统认为shell路径是/bin/bash^M,返回路径不存在错误,导致了root无法登录。所以还要保证passwd文件的换行符是unix格式。