2023年11月27日发(作者:)有许多原因可能导致用户口令的遗失, 这对系统管理员而言, 可能不是一个问题, 只要以 Root 账号登录,再用 Passwd 命令更改用户口令就可以了。可是,如果丢失的是 Root 口令,这又 怎么办?难道就束手无策、重装系统?这样不仅费时费力,而且还可能造成重要数据的丢失 和应用程序的破坏。显然这种做法并不可取。

其实,恢复 Linux 口令并不是一件很难的事情。Linux 口令的恢复有 2 个方面: 一是给 用户产生一个新的口令,使用户能够重新登录系统; 二是找出用户原来的口令,而不是以新 口令代替旧口令。一般情况下,用户只希望能够再次登录进入系统即可,而不是获得原口令, 也就是这里所说的第一个方面,相对而言,这方面要容易实现得多。 Linux 口令的恢复是系统维护的一种典型情况,本文中提到的一些方法从系统维护的角 度出发,不仅适用于 Linux 口令的恢复,也适用于因为某些原因不能正常登录进系统时的维 护工作,对 Linux 系统的管理维护有参考作用。 本文中所有提到的恢复 Linux 口令的方法均在实践中测试通过,所用的 Linux 系统主要 是 RedHat Linux For x86,在实际口令恢复中,可能因 Linux 发行商、发行版本、处理器和 硬盘等的不同而略有不同, 但相差不会很大。 其中一些方法也适用于其他 Unix 系统口令的恢 复,甚至 Windows 等操作系统口令的恢复。 一、口令恢复途径 下面恢复 Linux 口令的途径适用于不同的情况,难易度各有不同。 1. 紧急修复模式 在无法启动 Linux 时,常常需要通过磁盘、光盘或其他方法启动 Linux 基本环境,进入 Linux 紧急修复模式。在紧急修复模式下,能够访问硬盘上的 Linux 系统文件,恢复系统正 常,包括恢复口令等。 2. 单用户模式 Linux 有多个运行级别,如单用户模式、无网络服务多用户模式、完全多用户模式和 X11 图形多用户模式等运行级别。单用户模式是指系统运行在惟一用户——Root 用户模式下,进 入此模式时,系统只是加载了可运行的最低软硬件配置,以 Root 直接进入,没有口令验证。 在单用户模式下,可以用 passwd 命令来更改用户口令,也可以直接对/etc/passwd 等账 户口令文件进行读写,达到口令恢复的目的。 3. 修改口令文件 Linux 口令文件有 2 种保存形式: 一种是把账户信息和经加密后的口令密文都保存在 /etc/passwd 文件中,此形式不够安全,在早期 Unix 中采用;另一种是把账户信息和口令密 文分开存放,/etc/passwd 文件用于保存账户信息,/etc/shadow 文件用于保存口令密文。至 于采用何种保存形式和加密算法,可以用/usr/sbin/authconfig 程序来设置。

x0c对于没有 shadow 的 passwd 文件,只要

把相应账户的口令字段删除,即可不经口令验证 直接登录系统,例如某 passwd 文件的 root 账户如下: root1$dPTzzYkE$Zd3Vs6yCu VH8RC1gwKXX01:0:0:root:/root:/bin/bash 将其修改为: root::0:0:root:/root:/bin/bash 如果是有 shadow 的 passwd 文件,其口令字段以“x”字母代替,口令密文保存在 Shadow 文件中。可以删除 passwd 文件中的“x”字母,或者删除 shadow 文件中的口令密文,都可以 使相应用户不经口令验证直接登录系统,达到口令恢复的目的。 4. 口令还原 有些情况下,想找出被丢失的原始口令,而不是登录系统去产生一个新的口令。但是, Linux 使用的是 DES(加密函数式是 Crypt)或 MD5(函数式是 Md)加密算法,由于计算量之 大,它们几乎都没有可能被逆向破解。DES 口令密文是有 13 个 ASCII 字符的字符串,而 MD5 口令密文的启始字符总是“$1$” 。 虽然很难逆向破解,但要通过口令密文找出原始口令也不是不可能的,从一个字典或一 些字符的排列组合中提取字符串,提取出来的字符串用同样的加密算法加密,将产生的密文 与口令密文比较,如果一致则表明该字符串即为原始口令,从而达到口令还原的目的。如果 口令很复杂,使用此种方法也是很难找出原始口令的,但用户对自己口令的长度、采用的字 符等会有大致的印象,这使得成功的可能性会更大。 破解 Linux 口令的工具有很多,如 John the Ripper、Crack by Alex Muffett 和 Cracker Jack 等等,其中 John the Ripper 的功能最为强大,速度也最快。 5. 系统攻击破解 如果能够关闭电源重新启动系统,那么很容易恢复口令,但有时 Linux 系统上运行着非 常重要的服务,不能直接关闭电源,否则会对系统和数据产生破坏。 像这种在系统运行的情况下获得系统口令,往往是比较困难的,但由于系统管理员对操 作系统和应用程序的版本、配置等情况有着全面的了解,加上没有防火墙和入侵检测系统等 的防护,那么发现和利用系统漏洞的机会还是不少的,口令恢复的成功机会还是有的。 这方面涉及的内容太复杂,在此就不多做介绍了。如果确有这方面的需求,最好由专业 人士来帮忙,以免破坏系统和数据。 二、如何进入紧急修复模式 由于软硬件故障、错误配置等多种原因无法启动 Linux 时,需要进入紧急修复模式,有 可能解决问题,至少也能拷出重要文件。 进入紧急修复模式的方法并不复杂,在 boot 提示符下输入如下参数:

x0cboot: linux rescue 通过如下方法可以得到 Boot 提示符。 用 Linux 随盘发行的或由 文件写成的安装引导软盘引导系统, 通常这需要紧急 修复盘或安装光盘或者硬盘上的 ISO 文件配合使用才能引导进入紧急

修复模式。紧急修复盘 可由 文件写成或随盘发行。在 RedHat Linux 6.1 以后,RedHat 不再提供紧急修 复盘(安装光盘 image 目录下也没有 文件用来写) ,而是把它直接做在安装光盘 上。 用安装光盘引导系统。 用 文件写成的网络引导盘或 文件写成的 PCMCIA 引导盘引导系 统,此方法先要确保网络连接正常,并且需要确定网络主机和传输类型。 RedHat Linux 7.2 及其以后的版本,可以选择是否要把安装在硬盘上的 Linux 自动尝试 加载到目录/mnt/sysimage 下,否则,要用 mount 命令手工加载。 5. 系统攻击破解 如果能够关闭电源重新启动系统,那么很容易恢复口令,但有时 Linux 系统上运行着非 常重要的服务,不能直接关闭电源,否则会对系统和数据产生破坏。 像这种在系统运行的情况下获得系统口令,往往是比较困难的,但由于系统管理员对操 作系统和应用程序的版本、配置等情况有着全面的了解,加上没有防火墙和入侵检测系统等 的防护,那么发现和利用系统漏洞的机会还是不少的,口令恢复的成功机会还是有的。 这方面涉及的内容太复杂,在此就不多做介绍了。如果确有这方面的需求,最好由专业 人士来帮忙,以免破坏系统和数据。 二、如何进入紧急修复模式 由于软硬件故障、错误配置等多种原因无法启动 Linux 时,需要进入紧急修复模式,有 可能解决问题,至少也能拷出重要文件。 进入紧急修复模式的方法并不复杂,在 boot 提示符下输入如下参数: boot: linux rescue 通过如下方法可以得到 Boot 提示符。 用 Linux 随盘发行的或由 文件写成的安装引导软盘引导系统, 通常这需要紧急 修复盘或安装光盘或者硬盘上的 ISO 文件配合使用才能引导进入紧急修复模式。紧急修复盘 可由 文件写成或随盘发行。在 RedHat Linux 6.1 以后,RedHat 不再提供紧急修 复盘(安装光盘 image 目录下也没有 文件用来写) ,而是把它直接做在安装光盘 上。

x0c用安装光盘引导系统。 用 文件写成的网络引导盘或 文件写成的 PCMCIA 引导盘引导系 统,此方法先要确保网络连接正常,并且需要确定网络主机和传输类型。 RedHat Linux 7.2 及其以后的版本,可以选择是否要把安装在硬盘上的 Linux 自动尝试 加载到目录/mnt/sysimage 下,否则,要用 mount 命令手工加载。 2. 修改默认运行级别 /etc/inittab 文件是系统运行级别的配置文件,每当启动 init 进程时,init 程序都会 读取/etc/inittab 文件中的相应配置并运行。 在 Linux 系统启动时,/etc/inittab 文件中有如下一行指定了默认的运行级别,通常的 运行级别是 3 或 5。 id:3:init

default: 要使系统启动后进入单用户模式,只要把上面一行中的 3 改为 1 就可以了。 id:1:initdefault: 3. 启动盘引导 在 Linux 系统启动时, Init 读取/etc/inittab 配置进入默认运行级别, 但也可以为内核 指定一个启动参数,内核将依此参数设定特定设备和环境变量等,对于不能接受解释的参数 将传递给内核启动后的第一个程序,即 Init 程序,Init 程序据此参数启动进入非默认运行 级别,如指定参数为 1 或 single 进入运行级别 1,即单用户模式。内核启动参数的指定可通 过在系统启动软盘、多重启动管理器或程序 Loadlin 等的执行过程中指定。 在系统维护或内核更新时,常用到当前 Linux 系统的启动盘,在系统安装时会提示用户 制作一张启动盘,在系统安装完成后也可以制作,下面是一个简单示例。 在软驱中放入软盘, uname 命令查看系统内核版本号, 用 然后用 Mkbootdisk 命令创建引 导盘,输入的命令如下: #uname –r 2.4.7-10 #mkbootdisk –device /dev/fd0 2.4.7-10 以启动盘引导,在 boot 提示符下以“linux ”的语法形式输入如下参数之一,即可引导 进入单用户模式如下: boot: linux 1 boot: linux single 4. 多重启动管理器 多重启动管理器是一个能在系统启动时用来选择加载某个操作系统的引导程序,它可以 载入操作系统的内核和初始化操作系统(如 Linux 或 FreeBSD) ,或者把引导权交给操作系统

x0c(如 DOS 或 Windows) 来完成引导。 Intel 兼容 PC 机上的多重启动管理器有 LILO 和 GRUB 等, Alpha PC 机上使用 MILO,Sparc 兼容的工作站是用 SILO。 在多重启动管理器中为 Linux 内核指定启动参数引导进入单用户模式。 Intel 兼容 PC 以 机上的 Linux 为例,如果安装的是 LILO,在 LILO 引导画面,按 Ctrl+X 键切换入命令行,在 LILO 提示符下输入与启动盘引导 Boot 提示符下相同的参数之一, 即可引导进入单用户模式: 在 RedHat Linux 7.2 以后,多重启动管理器开始用 GRUB 代替 LILO,它比 LILO 具有更 多的优势,是 LILO 的替代品。下面是 GRUB 引导进入单用户模式的过程。 在出现 GRUB 引导画面时,按字母 e 键,进入 GRUB 编辑状态。 按↑键或↓键选择相应的引导项,并再接字母 e 键进入命令行编辑。 在出现的命令行上添加“1”或 single,并按键,返回 GRUB 编辑状态。 按字母 b 键,引导进入单用户模式。 从上可以看出多重启动管理器对 Linux 系统启动和维护的重要性, 所以建议在安装 Linux 时也安装好多重启动管理器,便于将来系统的维护,哪怕是主机上只安装了 Linux 一个操作 系统。 5. loadlin 引导 loadlin 是一个能在 DOS 下启动 Linux 核心的装载程序,可从 DOS 引导进入 Linux 或安 装 Linux 系统等。如果

没有安装多重启动管理器或者配置有误不能进入 Linux 的话,常常会 用到这个程序。 在 loadlin 的启动命令中添加 single 参数就可以进入单用户模式。如果主机上安装有 Windows 9x 系统,在系统启动时按 F8 进入 MS-DOS,运行 loadlin 程序引导进入单用户模式。 下面是一次启动实例,该主机上没有安装 Windows 9x,也没有安装 DOS。 以 Windows 98 安装光盘引导启动,在“Microsoft Windows 98 Startup Menu”上选择 第 2 项: “start computer with CD-ROM support.” 。 进入 MS-DOS 后,在光驱中换入 RedHat Linux 安装光盘。 在命令行上分别输入如下命令引导 Linux 单用户模式,假设 Linux 根文件系统在分区 /dev/hda5 上: A:>;d: D:>;cd dosutils DOSUTILS>;loadlin autobootvmlinuz root=/dev/hda5 ro single 在启动盘引导的 boot 提示符下,在 LILO 和 GRUB 等启动管理器的命令行下,以及在 Loadlin 程 序 上 都 可 以 配 置 很 多 参 数 引 导 进 入 系 统 , 对 系 统 维 护 很 重 要 , 可 以 参 考 BootPrompt-HowTo。 上面提到的方法,都需要对/etc/passwd、/etc/inittab 等 Linux 文件进行读写,但在

x0c正常情况,只有 root 用户登录进去才可以读写。那么在不能正常登录进系统时,又如何能对 这些文件进行读写呢? 除了可以在紧急修复模式、单用户模式下读写 Linux 文件外,采用下面的方法也不失为 良策: 通过 Linux 系统软盘引导启动,就能进入 Linux 系统; 通过 Linux 系统光盘进入,如 DemoLinux; 在 DOS/Windows 下读写 Linux 文件,几乎所有版本的 DOS/Windows 都不提供对 Linux 文 件系统的支持,但借助不少软件可以实现,如 FSDext2、Ext2fsnt、Ext2ifs、Ext2 tools、 Ltools 和 Explore2fs 等,还有 Microsoft IFS Kit; 通过第二硬盘。 上面提到的种种 Linux 口令恢复方法,读者可以结合自己的实际情况,选择一种最简单 易行的方法来恢复自己的 Linux 口令。从中可以看出,他人通过在本地重启系统很容易获取 Linux 口令,所以为了加强系统安全,有必要在启动管理器(如 LILO 和 GRUB)及 BIOS 中设 置口令,使他人不能轻易得逞,更重要的是加强安全管理工作。

x0c