文章来源于微信公众号:Linux运维部落
侵删
11.4 系统修复模式
在操作系统的使用过程中,因为人为的误操作,或者系统非正常关机,都有可能造成系统错误,从而导致系统不能正常启动。Linux为我们准备了完善的修复手段。本节主要介绍单用户模式和光盘修复模式这两种修复手段。
11.4.1 单用户模式
Linux的单用户模式有些类似Windows的安全模式,只启动最少的程序用于系统修复。在单用户模式(运行级别为1)中,Linux引导进入根Shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
如何进入单用户模式
当然不能直接执行命令init了,因为我们的假设是系统出现了问题,已经不能正常登录了。那么,如何进入单用户模式呢?首先需要重启服务器,在GRUB读秒界面按任意键,进入GRUB菜单界面,如图11-7所示。
![655b392f-740f-eb11-8da9-e4434bdf6706.png](http://p04.5ceimg.com/content/655b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-7 GRUB菜单界面
在想要进入单用户模式的Linux菜单上按“e”键,就会进入GRUB编辑界面,如图11-8所示。
![665b392f-740f-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/665b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-8 GRUB编辑界面
在GRUB编辑界面中,移动光标到第二行kernel行,然后继续按e键,进入行编辑界面。在此行最后输入空格single,代表启动进入单用户模式(注意:空格必须存在),如图11-9所示。
![685b392f-740f-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/685b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-9 GRUB行编辑界面
然后按回车键,就会回到上一个界面,如图11-8所示。再按b键(启动),就会启动进入单用户模式。单用户模式是不需要输入用户名和密码就能直接进入提示符界面的,如图11-10所示。
我们已经登录了Linux系统的单用户模式,而且是不需要输入用户名和密码就可以直接进入的。这时如果有系统问题,就可以在单用户模式中进行修复了。
单用户模式常见的错误修复
我们已经进入了单用户模式,那么我们在单用户模式中主要可以修复哪些系统错误呢?下面举几个例子。
1)遗忘root密码
这是管理员最容易犯的错误,应该如何修复呢?当然是使用单用户模式进行修复了,因为进入单用户模式的最大特点就是不需要输入用户名和密码。既然已经登录了单用户模式,那么直接给root用户设定新密码即可。命令如下:
[root@localhost ]# passwd root
2)修改系统默认运行级别
如果我们把系统的默认运行级别修改错误,比如改为了0或6,系统就不能正常启动了。这时也可以利用单用户模式进行修复,只需直接修改默认运行级别配置文/etc/inittab,把系统默认运行级别修改回来即可。命令如下:
[root@localhost /]# vi /etc/inittab
id:3:initdefault:
#把默认运行级别修改为3或5,注意:系统默认的运行级别只能使用3或5
理论上,只要能够进入单用户模式,那么系统错误就可以在单用户模式中进行修复。当然,判断系统到底哪里出现了问题,是需要大量的经验积累的。
11.4.2 光盘修复模式
如果系统错误已经导致单用户模式不能进入了,那么是否需要重新安装Linux系统?不用着急,为了应对单用户模式也无法修复的错误,Linux系统提供了光盘修复模式。这种模式的原理是不再使用硬盘中的文件系统启动Linux,而是使光盘中的文件系统启动Linux。这样,就算硬盘中的Linux系统已经不能登录了(单用户也不能登录),光盘修复模式还是可以使用的。当然,光盘修复模式也不是万能的,这时就只能重新安装Linux系统了。
如何进入光盘修复模式
首先需要有系统光盘或系统修复光盘。这里只需要把CentOS 6.x的第一张光盘放入光驱,然后重启系统,修改BIOS的启动顺序,让系统从光盘启动,就会看到如图11-11所示的光盘启动界面。
![695b392f-740f-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/695b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-11 光盘启动界面
在这个界面上选择Rescue installed system进入光盘修复模式,然后系统就会提示选择语言,如图11-12所示。
![6b5b392f-740f-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/6b5b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-12 语言选择界面
我们选择English,接下来就会让我们选择键盘,如图11-13所示。
![6e5b392f-740f-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/6e5b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-13 键盘选择界面
我们选择us,即美式标准键盘,之后会进入选择是修复模式所在介质界面,如图11-14所示。
![6f5b392f-740f-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/6f5b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-14 选择修复模式所在介质界
我们选择光盘介质,然后确定,就会进入网络配置界面,如图11-15所示。
![705b392f-740f-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/705b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-15 网络配置界面
我们选择No,即不启用网络配置,就会进入Rescue模式选择界面,如图11-16所示。
![715b392f-740f-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/715b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-16 Rescue模式界面
我们选择Continue 进入光盘修复模式,在之后弹出的界面中选择OK,就会进入启动功能选择界面,如图11-17所示。
![725b392f-740f-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/725b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-17 启动功能选择界面
我们选择shell Start shell,就会进入光盘修复模式,看到命令提示符。
光盘修复模式常见的错误修复
我们在光盘修复模式中主要可以修复什么错误呢?其实能在单用户模式中修复的错误都能在光盘修复模式中修复,当然还可以修复一些在单用户模式中无法修复的错误,下面举几个例子。
1)多系统并存,GRUB被覆盖
还记得我们在11.2.3节中讲解的手工安装GRUB吗?有一种情况就是先安装Linux,后安装Windows,导致MBR中的启动引导程序被Windows引导程序覆盖,需要重新安装GRUB引导程序。重新安装GRUB的过程我们已经讲过了,但是重新安装GRUB的命令需要在光盘修复模式中执行。我们重新写一遍覆盖安装GRUB的过程,如下:
#放入光盘重启,进入光盘修复模式
sh-4.1# grub
#启动GRUB交互界面。注意到了吗?提示符不一样了,那是因为从光盘启动了系统,所以环境变量配置文件没有生效
grub> root (hd0,0)
#设置grub的主目录
grub> setup (hd0)
#因为直接把GRUB安装到MBR中,所以不需要指定分区
grub> quit
#退出GRUB交互模式
这样GRUB覆盖安装的实验才算完成了。
2)重要系统文件丢失,导致系统无法启动
如果系统中的重要系统文件丢失,则会导致系统无法正常启动,这时也可以利用光盘修复模式来进行修复。我们假设/etc/inittab文件失了,通过系统启动过程知道这个文件是用于定义系统默认运行级别的,如果丢失了这个文件,那么系统当然不能正常启动,这时就需要进入光盘修复模式中,然后执行chroot命令。命令格式如下:
[root@localhost ~]# chroot 目录名
chroot命令的作用是改变系统根目录,也就是可以把根目录暂时移动到某个目录当中。我们是通过光盘启动的光盘修复模式,所以我们现在所在的根目录并不是真正的系统根目录,而是光盘的模拟根目录,真正的系统根目录被当成外来设备放在/mnt/sysimage/目录中。这时就需要使用chroot命令把我们现在所在的根目录改成真正的系统根目录。命令如下:
bash-4.1# chroot /mnt/sysimage
执行这条命令之后,当前的根目录就是真正的系统根目录了。如果系统有任何错误,则都可以直接修复。比如/etc/inittab文件丢失了。这时如果我们备份过系统重要文件,那么只需要把备份文件复制到/etc/目录下即可。如果没有备份的文件,就需要从RPM包中提取inittab文件,然后复制。具体命令如下:
bash-4.1# chroot /mnt/sysimage
#改变主目录
sh-4.1# cd /root
#进入root目录。因为默认进入的是/目录,所以如果不进入root录,那么一会儿提取的inittab文件会报错
sh-4.1# rpm -qf /etc/inittab
initscripts-9.03.31-2.el6.centos.i686
#查询一下/etc/inittab文件属于哪个包。如果系统中文件丢失不能查询,则需要通过其他Linux系统查询
sh-4.1# mkdir /mnt/cdrom
#建立挂载点
sh-4.1# mount /dev/sr0 /mnt/cdrom
#挂载光盘
sh-4.1# rpm2cpio /mnt/cdrom/Packages/initscripts-9.03.31-2.el6.centos.i686.rpm | cpio -idv ./etc/inittab
#提取inittab文件到当前目录
sh-4.1# cp /etc/inittab /etc/inittab
#复制inittab文件到指定位置
注意:在执行此命令时不能将文件直接恢复到/etc/目录,只能提取到当前目录,且恢复的文件名称所在路径要写完整的绝对路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage/目录下的相应位置即可。
系统修复模式是维护Linux的有力武器,本节通过上述两个例子讲解了它的应用方法,希望能够给读者一点启示。 解决Linux系统启动的故障,必须充分理解Linux的引导过程,才能够对故障进行有效的判断和处理。
11.4.3 Linux的安全性
很多人看到系统修复模式这节内容时,都会有所感慨::Linux的密码破解太容易了,这样的操作系统还安全吗? Linux不是以安全性著称的吗?我们通过图11-18来解释一下这个问题吧。
![735b392f-740f-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/735b392f-740f-eb11-8da9-e4434bdf6706.png)
图11-18 密码安全
我们一开始为了安全,给用户设定密码,但是这种密码可以很容易地被单用户模式破解。我们又想到,进入单用户模式,需要在GRUB启动界面上按"e"键,那么我们就给GRUB加密,必须输入正确的GRUB密码,才能进入GRUB的编辑界面,这样就保证了用户密码的安全。不过GRUB加密是可以通过进入光盘修复模式,直接删除GRUB配置文件中的password行而被破解的。接着我们又想到,进入光盘修复模式,是需要通过光盘启动系统的,那么我们给BIOS加密,这样就必须输入正确的BIOS密码,才能修改光盘的启动顺序。但是BIOS加密是可以通过拔除主板电池而删除的。那我们只能把服务器机箱锁起来,但只是一把锁而已,完全可以被螺丝刀撬开。
其实这里是大家对概念的理解有误。任何一个需要密码的设备,不论是Windows、Linux、 交换机、路由器,还是一个需要密码的软件,都必须留有破解密码的漏洞。如果我们的计算机没有破解密码的方法,那么万一忘记了计算机的密码,难道只能重新买一台吗(如果忘记了BIOS密码,又不能破解,当然不能重新安装系统了)?当然不能是这样的,所以这些漏洞是必须预留的。这些漏洞是不会影响系统安全的,因为我们可以拿到计算机本身。如果我们能够拿到计算机,就认为我们对这台计算机拥有所有权。我们所说的安全性主要是指在对计算机没有所有权时要保证绝对安全。
而且大家要注意,如果root没有密码,那么本机登录是没有任何问题的,但是不可能远程登录。所以我们所说的安全性主要针对的是网络安全。
如果你也希望成为一个好的程序员,了解C语言更多知识,点击下方【了解更多】,接受牛人大牛们的指导,听听他们对写代码的建议,一起快乐学习,共同进步~