附录 E...
如果你忘了根用户密码该怎么办 (What to Do If You Forget the Root Password)
当你使用自己的 Unix 系统时,你就是系统 管理员,这也就意味着,万一出了什么问题, 没有人可以来帮你。
那么,如果你忘记了 root(超级用户) 的密码,该怎么办?
下面是在一台典型的 Linux 系统上解决这个 问题所要采取的步骤。具体的细节可能因 系统而异,但你在这里读到的做法,对大多数 现代 Linux 发行版都应该适用。
我不会把其中的每条命令都详细解释一遍, 因为那会把我们带入系统管理的领域,而这 超出了本书的范围。如果有哪条命令你看不 懂,查一下联机手册,或者向别人求助就行。
如果你有 sudo 权限(见第 6 章), 那么用下面这条命令,也许就能很快改掉 root 的密码:
sudo passwd root
如果你没有 sudo 权限,或者你的系统配置成了 sudo 不让你改 root 密码,你就会发现,必须采取更周密的办法才行。
总体的策略是:用一张 Linux 实时 (live)CD 引导计算机,从而取得这台 计算机的控制权。然后挂载(mount)存放在 硬盘上的主(根)文件系统。这一步做完 之后,你就可以把这个挂载点当作文件系统的 根,接着用标准的 passwd 程序来 修改 root 密码。
- 用实时 CD 引导 Linux。
- 按 <Crtl-Alt-F1> 进入命令行。
- 切换为超级用户:
sudo su
- 启动分区表编辑器:
parted
(如果你的系统里没有 parted, 那就得用别的分区编辑器,比如 fdisk、cfdisk 或 sfdisk。)
- 在 parted 里,显示主硬盘上的 各个分区:
- 记下装有你的 Linux 系统的那块硬盘的 设备名,最可能是 /dev/hda 或 /dev/sda。
- 记下根分区的编号,例如 2 号分区。
如果你拿不准哪个才是根分区,就找文件系统 类型为 ext3、ext2、 reiserfs 或 xfs 的分区。 如果这样的分区不止一个,把它们各自的编号 都记下来。
- 退出 parted 程序:
quit
这时你应该已经回到了 Shell 提示符。
- 为存放在硬盘上的那个文件系统创建一个 挂载点。(在本例中,我把它叫作 harley):
mkdir /mnt/harley
- 用你从 parted 得到的设备名和 分区编号,挂载硬盘上的根文件系统。 举例来说,如果你的设备名是 /dev/hda,分区是 2 号,那么 就该用这条命令:
mount /dev/hda2 /mnt/harley
如果在第 7 步你找到了好几个可能的分区, 就先从中挑一个。要是行不通,再试另一个。
- 确认你挂载的确实是根分区。测试的办法是: 看看影子文件(/etc/shadow,也就是 存放密码的那个文件)是否就在该分区里:
ls /mnt/harley/etc/shadow
如果密码文件不在那里,说明你挂载的不是 根分区。回到第 10 步,换一个分区再试。 如此反复,直到成功挂载根分区为止。
- 修改硬盘上那套系统的 root 密码。
实现这一点的方法有好几种。最简单的思路是: 把这个新的挂载点当作文件系统的根,然后 运行 passwd 命令。这只需一条 简单的命令就能做到:
chroot /mnt/harley passwd
这条 chroot(change root,更改根) 命令的意思是:"暂时把文件树的根改为 /mnt/harley,然后执行 passwd 命令。"
由于你正处于超级用户模式,passwd 命令修改的就是 root 密码。又因为 文件系统的根暂时是 /mnt/harley, 所以会被使用的那个密码文件,就是硬盘上的 那一个(/mnt/harley/etc/shadow)。
用这种方式,你就能够修改硬盘上那套系统的 root 密码。
- 取出 CD,从硬盘重新启动,并测试一下, 确认密码已经正确改好。
名称的由来
Root
在 Unix 内部,"root" 这个名字有 四种不同的含义:
- 超级用户的 userid。
- 作为 Unix 文件树起点的那个目录的 名字。
- 主 Unix 文件系统的名字。
- 存放根文件系统的那个磁盘分区的 名字。
请注意,在本附录这短短一段操作说明里, 我们竟然把 "root" 这个词的四种用法全都 用上了。
也就是说,我们挂载了位于 root 分区里的 那个 root 文件系统,好把这个挂载点变成 Unix 文件树的 root,以便修改 root 的密码。
© 本书全部内容,2026 年版权所有,Harley Hahn
完整的商标与版权信息