在我的工作中,我们将产品作为软件/硬件包装在预安装的服务器上。我们使用 Open SUSE 10.3 作为操作系统,我们设置并始终以 root 用户身份登录以对机器进行维护。最近,我们刚刚收到一个机器,客户说他们无法再通过网络接口连接到机器。因此,当我开始操作机器时,我遇到了这个问题:在登录的命令提示符下,我输入用户名“root”并按回车键。然后,甚至在它要求我输入密码之前,我就收到“登录不正确”的信息。
我以前从未见过这种行为,也在网上找不到任何相关信息。有人知道发生了什么吗?
谢谢。
答案1
检查你的/var/log/auth.log针对失败的 root 登录。您可能会发现类似以下内容的内容:
12月30日 07:31:51 vps login[18093]: (pam_securetty) 访问被拒绝:tty‘hvc0’不安全! 十二月 30 07:31:51 vps login[18093]: 'hvc0' 上的 'root' 登录失败 (1),身份验证失败
在现代系统中使用了许多新技术,例如 XenServer 虚拟化实例可能有控制台作为 hvc0。
可以通过将该控制台包含到 /etc/securetty 中来解决此问题。只需输入:echo hvc0 >> /etc/securetty && kill -1 1 然后再次尝试登录。
答案2
我立即想到了一些可能性:
- 最有可能的是,有人更改了 root 密码。这可能意味着该盒子已被黑客入侵。
- 密码或影子文件因某种原因被损坏或删除。
- /etc/nsswitch.conf 或您的 PAM 配置也是如此。
修复(或者至少再次获得 root 访问权限):
重新启动系统。在 grub 提示符下,编辑内核行并添加“init=/bin/bash”。系统启动时,您将获得一个 bash 提示符,并且根文件系统将以只读方式挂载。您需要将其重新挂载为 RW。然后更改 root 密码。然后运行 sync,再次将 / 重新挂载为 RO,然后“reboot -f now”(可选择在重新启动之前进行更多调查/修复)。
注意:但是控制台 tty 将处于非常奇怪的状态。例如,您将无法通过按 ^C 来终止进程(因为 ^C 尚未映射到 SIGINT)。因此,不要犯这样的错误:在任何地方 ping 或运行任何其他一直运行直到获得 INT 的程序。在执行任何操作之前,请使用 openvt 命令打开更多 VT。
(顺便说一句,有关此主题的更多信息,请参阅我的博客文章^C 不会终止进程,SIGINT 会)
答案3
我想此时没人会在意,但我却遇到了这个问题。
场景:我们尝试使用救援模式启动 SuSE Linux 11,并将 /etc/shadow 条目替换为 null,以便 root 无需密码即可登录。结果正如原始发帖者所说:“登录不正确”,没有提示输入密码。不知道是什么,但是某物else 正在被 passwd 改变。
解决方案是使用真正的 passwd 命令,而难点在于下面的 mount --bind,因为如果没有它,passwd 就会失败,因为没有所需的块设备:
- (救援启动)
- 挂载 /dev/sda1 /mnt
- 安装--bind /dev /mnt/dev
- chroot /mnt
- 密码 root
然后通常进行 umount、umount、sync、halt。
希望这对某人有帮助。
答案4
听起来最好的选择可能是使用实时 CD 并查看盒子上的实际登录配置。