SDB:恢复root密码

跳转至: 导航, 搜索
本教学将教会您如何在 openSUSE 下恢复 root 密码。

设置 root 密码

若您丢失了您的 root 密码,您可能能够通过以下步骤恢复之。然而,某些使用了引导加载器密码保护的系统在没有该密码的情况下将无法允许您恢复 root 密码。若您的引导加载器使用了密码保护,您需要从其它镜像如 openSUSE CD/DVD/mini-boot 引导。openSUSE 安装 CD 是最佳的。


CD/DVD 恢复模式

若使用的是 CD/DVD 引导镜像,您需要选择救援系统。您将进入最大权限模式,然后手动挂载磁盘。例如,一个 IDE 硬盘可能是 /dev/hda,而一个 SATA 硬盘可能是 /dev/sda。使用 fdisk -l /dev/sda 找到 root 分区,然后挂载之。

mount -o remount,rw /dev/sda2 /mnt
# cd /mnt
# chroot /mnt
# passwd

针对 10.3,您需要的步骤多一些:

启动救援系统。查找磁盘 root 分区,然后,假设它是 sda2:

mount /dev/sda1 /mnt
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt

现在您就处于已安装的系统的 root 身份了,天下我有:使用 passwd 命令,也可以使用 YaST 的 ncurses 界面重置 root 密码。

"bind" 允许使用两个挂载点作为系统虚拟目录。

如果手边没有救援系统,也可以考虑取出该硬盘并在其它运行 Linux 的计算机上挂载它,然后再进行 chroot。


单用户模式

首先应该尝试能够引导至单用户模式。这可能对您不起作用,因为您的系统可能配置为进入单用户模式仍旧需要询问 root 密码。如果您的情况是那样,我们将会在后面教您使用 /bin/bash 替换 init 的技巧。

首先,尝试单用户模式。若您没有看到 LILO 或 GRUB 引导菜单,可尝试按下 CTRL + X 看看。若是 LILO,只需输入 "linux single" 就可以了(假设 "linux" 是 lilo 标签)。如果是 GRUB 的话,按下 e 键,然后选择 "kernel" 行,再次按下 e 键,然后添加 "single" (或者数字 "1" 也行)到行尾。按回车键,然后按下 b 键来引导。(新版本的 grub 使用 a 键来追加内容到内核引导行)

您现在应该能够看到一个看起来非常正常的引导过程,除了它结束得早了一些,结束在了一个 bash 提示符那里。若您看到了 "Give root password for system maintenance",那单用户模式对您就行不通,请看后面的 "init 或 /bin/bash" 的版本。

若您确实看到了提示符,/ 根文件系统可能无法可读可写 (rw 权限) 地挂载(虽然 "mount" 命令说它能)。尝试:

mount -o remount,rw /

如果这不行(不一定不行),请输入 "mount" 来找出现在根文件系统挂载在哪儿。比如 /dev/sda2。然后您应该输入:

mount -o remount,rw /dev/sda2

如果您能够运行这条命令而没有报错,那您只需要在挂载成功后输入一次 "passwd" 命令,就可以随便改 root 密码了。或者也可以编辑 /etc/shadow 来移除密码字段:移动到第一个冒号后面并移除到第二个冒号之前的所有东西。使用 vi 的话,应该是输入 "/:" 来移动到第一个冒号,敲一下空格,然后输入 "d/:" 并回车。您可能会收到一个警告说您正在修改一个只读文件,这是正常的。在您修改 /etc/shadow 文件前,它可能长这样:

root:$1$8NFmV6tr$rT.INHxDBWn1VvU5gjGzi/:12209:0:99999:7:-1:-1:1074970543
bin:*:12187:0:99999:7:::
daemon:*:12187:0:99999:7:::
adm:*:12187:0:99999:7:::

修改之后,应该长这样:

root::12209:0:99999:7:-1:-1:1074970543
bin:*:12187:0:99999:7:::
daemon:*:12187:0:99999:7:::
adm:*:12187:0:99999:7:::

您需要强制写入:使用 vi 的话是 ":wq!"。(如果依然不对,您需要重复进行上面的 -o remount,rw 可读可写地挂载根文件系统直到成功为止)。


INIT 或 /bin/bash 模式

另一种技巧是添加 "init=/bin/bash" (LILO 是 "linux init=/bin/bash",Grub 是添加到内核引导行)。这将把您引向一个 bash 提示符,在引导流程中这比单用户模式要早得多,许多东西也还没有初始化或者挂载。使用这种方法您是一定需要 "-o remount,rw" 的。也请注意其它文件系统也根本没有挂载,如果您需要它们就要手动挂载之。设备名称请看 /etc/fstab。

请记住如果您的 Linux 计算机是公共可访问的:不加额外保护的话,通常恢复丢失的 root 密码并不是很难,这意味着别人改起来或者不经您的允许获取 root 权限也很简单。

另一种方式是从 /etc/shadow 移除密码。为防止您搞砸了,我建议先把它复制到安全的位置。您应该查找像下面这样的行:

原始行:

root:$1$EYBTVZHP$QtjkCG768giXzPvW4HqB5/:12832:0:99999:7:::

After editing:

root::12832:0:99999:7:::

若您编辑起来有问题(哪天您真的应该学学 vi),您也可以(当然在备份后)只:

 echo  "root::12832:0:::::" > /mnt/etc/shadow(假设您把 root 根分区挂载到了 /mnt)

或者要是在单用户模式下的话:

 echo  "root::12832:0:::::" > /etc/shadow 

然后重启,您的计算机就修好了。

当然,你也可以不修改/etc/shadow文件,当你启动一个bash之后,直接输入passwd命令

(none)/# passwd

然后根据提示输入你想改成的密码,root用户可以设置成任何密码,所以可以忽视系统关于密码的警告

直接重复一次密码,root密码就改成你想要的密码了