Linux启动过程及Grub加密

linux的基础启动流程
1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。
2. 读取第一个启动设备的MBR的引导加载程序(即lilogrubspfdisk等)的启动信息。
3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。
4. 核心执行init程序并获得运行信息。 /etc/inittabb
5. init执行/etc/rc.d/rc.sysinit文件。
6. 启动核心的外挂模块(/etc/modprobe.conf)。
7. init执行运行的各个批处理文件(Script
8. init执行/etc/rc.d/rc.local文件。
9. 执行/bin/login程序,等待用户登录。
10. 登录之后开始以shell控制主机。

1. linux核心的引导
操作系统的核心是放在文件系统中的,要想正确加载核心就必须提前识别文件系统。系统刚启动的时候,就需要通过引导加载程序(即lilogrubspfdisk等)来识别文件系统,引导核心。要想加载linux的核心就必须能识别linux的文件系统,要加载windows核心就必须能识别windows文件系统。而grub是同时支持linuxwindows的。但windows的加载程序并不支持linux文件系统,所以在多重启动设置的时候,总是要先装windows而后装Linux

核心文件在哪里呢?一般来说,它会放在/boot里,并且取名为/boot/vmlinuz

在加载核心的过程中,必须知道,系统只会载入根目录,并且是以只读方式载入的。有时为了让某些功能可以用文件的方法来读取,有的系统在启动的时,会建立虚拟盘(ramdisk),这就需要使用initrd以及linuxrc了。在加载核心的时候,一起加载initrd的映像文件(boot/initrd-xxxx.img),并利用linuxrc(在initrd的映像文件内)程序来加载模块。在核心驱动外部硬件的工作完成之后,initrd所建立的虚拟盘就会被删除。

2. 第一个程序init的加载和runlevel设置
在核心加载完成之后,系统就准备好了,等待程序的执行。整个linux系统中,第一个执行的程序就是“/sbin/init”init程序做的工作相当多,除了利用设置文件“/etc/inittab”来获取运行等级之外,还会通过运行等级的设置值启动不同的服务项目。运行等级是指linux通过设置不同等级来规定系统用不同的服务来启动,让linux的使用环境不同。

"/etc/inittab"中有这么一句"si::sysinit:/etc/rc.d/rc.sysinit",表明系统需要主动使用"rc.sysinit"这个shell脚本来设置系统环境。但这个文件的文件名在各个版本中是不一样的,需要自行查看确认。


3. init处理系统的初始化流程(/etc/rc.d/rc.sysinit
1)获取网络环境与主机类型。

首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境。
2)测试与载入内存设备/procusb设备/sys。除了/proc外,系统会主动检测是否有usb设备,并主动加载usb驱动,尝试载入usb文件系统。
3)决定是否启动SELinux
4)接口设备的检测与即插即用(pnp)参数的测试。
5)用户自定义模块的加载。用户可以再"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。
6)加载核心的相关设置。又一个文件"/etc/sysctl.conf",按这个文件的设置值配置功能。
7)设置系统时间(clock)。
8)设置终端的控制台的字形。
9)设置raidLVM等硬盘功能。
10)以方式查看检验磁盘文件系统。
11)进行磁盘配额quota的转换。
12)重新以读取模式载入系统磁盘。
13)启动quota功能。
14)启动系统随机数设备(产生随机数功能)。
15)清楚启动过程中的临时文件。
16)将启动信息加载到"/var/log/dmesg"文件中。
如果想知道启动过程中发生了什么事可以查看dmesg文件。

4. 启动系统服务"/etc/rc.d/rc*.d"与启动设置文件"/etc/sysconfig"
之前结束了inittab中的rc.sysinit之后,系统可以顺利工作了,只是还需要启动系统所需要的各种服务,这样主机才可以提供相关的网络和主机功能。因此根据之前设置的运行等级,会启动不同的服务项目。如果当时我们在inittab中选择了等级3,系统则会在"/etc/rc.d/rc3.d"目录中运行相应的服务内容,选择等级5,就在"/etc/rc.d/rc5.d"目录内。

该目录下的内容全部都是以 S K 开头的链接文件,都链接到"/etc/rc.d/init.d"目录下的各种shell脚本。S表示的是启动时需要start的服务内容,K表示关机时需要关闭的服务内容。如果我们需要自己增加启动的内容,可以再init.d目录中增加相关的shell脚本,然后在rc*.d目录中建立链接文件指向该shell脚本。这些shell脚本的启动或结束顺序是由SK字母后面的数字决定,例如S01sysstat表示第一个执行sysstat脚本,S99local表示排在第99位执行rc.local脚本。

5. 用户自定义引导程序(/etc/rc.d/rc.local
一般来说,自定义的程序不需要执行上面所说的繁琐的建立shell增加链接文件的步骤,只需要将命令放在rc.local里面就可以了,这个shell脚本就是保留给用户自定义启动内容的。

6. 启动终端和X-Window界面
完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录。
tty1,tty2,tty3...这表示在运行等级1234的时候,都会执行"/sbin/mingetty",而且执行了6个,所以linux会有6个纯文本终端,mingetty就是启动终端的命令。
除了这6个之外还会执行"/etc/X11/prefdm -nodaemon"这个主要启动X-Window

7. 有关变换运行等级
linux已经登录之后,有时候还希望更换运行等级,一种方法是改变"/etc/inittab"内的设置内容,将"id:3:initdefault:"中的数字改成相应等级,然后重启即可。

如果只是想暂时地改变运行等级,下次启动还是按原等级登录,可以直接使用init [0-6]命令来改变运行等级。一般来说,运行等级的不同只是相关的启动服务内容的不同而已,因此使用命令改变等级会比较两个改变等级之间的服务内容,关闭一些新等级中不需要的服务项目,启动新等级需要的服务,而保量新等级和原等级中共有的服务内容。查询目前等级的命令也很简单,只需要输入runlevel即可。

如:[root@linux ~]# runlevel  结果显示:N 3

1,明文加密

/etc/grub.conf文件中的default=0title行之间加入

password 123456

重启后,如果需要修改grub,需要输入密码123456才可以修改。

Question No.1
忘记Linux系统的root密码后进入不了系统怎么办?NSSPC,黑客,信息安全! v; ^% x  F, h' G( T' fnsspc.5d6d.com1 T" n- ?5 v/ c3 k- a8 o, E' Z
Answer
在忘记root密码时通过设置GRUB使其以单用户模式引导,进入系统后通过命令“passwd root”来修改root的密码然后重新启动系统即可使用root账号进行登陆,解决办法如下:
1.在刚进入GRUB画面时选择Linux的启动项,譬如“Red Hat Linux (2.4.20-8)”,之后下按'e'进入编辑模式。
2.进入后选择“kernel /vmlinuz-2.4.20-8 ro root=LABLE=/”,然后按'e'进入编辑模式,然后按空格后输入“single”,然后按回车,然后按'b'通知GRUB以单用户模式引导。NSSPC,黑客,信息安全( g2 h# y! l( y% U4 {/ W0 \
3.成功引导后便进入了“sh-2.05b#”,这个就代表单用户模式。然后在提示符后输入“passwd root”就可以更改root的密码了!修改成功后输入“reboot”便可重新启动系统然后使用root用户登陆了!NSSPC信息安全团队! Z& W$ K4 G, a5 j

Question No.2:
既然是这样那岂不是谁都可以修改我的Linux系统的root密码了吗?这也太不安全了!有没有什么办法让别人无法轻易修改我的root登陆密码呢?9 X$ y+ _$ I; Y" _4 k  I9 _% L, G4 l
Answer:NSSPC信息安全团队  K' r, E, x' q: W# f/ g
1.首先使用root用户登陆系统,然后在提示符后输入“more /etc/grub.conf”查看下当前GRUB文件的配置情况,其中部分关键信息的解释如下:NSSPC,黑客,信息安全% v1 ?/ I/ T' t/ S
default=0 (表示GRUB默认引导的操作系统,这里的0也就是我们见到的GRUB引导画面的第一行所指向的操作系统,这里需要注意的是,在GRUB中计数都是从0开始的,譬如我们默认要让GRUB引导第3行所指向的操作系统,那这里就是default=2,其他情况以此类推)NSSPC,黑客,信息安全9 s$ n1 O( I! k0 o9 q  L! p

timeout=10 (表示启动时等待的时间)NSSPC,黑客,信息安全! j- C! @. v5 o( l5 i7 w
splashimage=(hd0,0)/grub/splash.xpm.gz (表示GRUB引导时的画面文件)NSSPC信息安全团队, d5 A7 }1 w  S
root (hd0,0)  (表示启动分区是哪一个,这里表示的是第一个硬盘的第一个分区)  H) G) _, K9 S! r" |. G

2.GRUB加上口令:NSSPC信息安全团队  x% T$ e6 R+ l  x$ u" M
注意:如果我们在grub.conf中的root (hd0,0)前加上口令的话,就表示系统在启动分区前需要输入口令,如果我们在“splashimage=(hd0,0)/grub/splash.xpm.gz”前输入口令的话,就表示在进入GRUB引导画面前需要输入口令!nsspc.5d6d.com* i1 ^+ o- l' S  F( U0 W% Q

1)首先使用vi编辑器修改:“vi /etc/grub.conf”,然后按键盘上的'i'键进入插入状态,然后在“splashimage=(hd0,0)/grub/splash.xpm.gz”上方输入“password xufang”,然后按ESC键返回vi编辑器的命令模式,输入“:wq”保存退出,这样以后在进入GRUB的时候就需要输入密码了,但由于这个密码是明文存放在grub.conf文件中的,非常不安全,致使一些具备一定权限的人可以使用命令“more /etc/grub.conf | grep password”来过滤出里面的明文密码,成功后就会显示“password xufang”,这里的“xufang”也就是我们设置的GRUB引导时所需的密码了,所以我们必须要对其中的密码进行加密!
NSSPC信息安全团队: ]* y- C$ |) `
2)在提示符后输入“grub-md5-crypt”,之后输入密码,然后再次输入密码进行确认,之后便会显示出经过md5加密后的密码,我们将其复制,这里有一个小技巧,就是在字符界面(非X-Window下的shell提示符)都有一个光标,我们将光标移动到密文上,按住左键选中整个密文,然后松开,这样就将其复制了下来,然后我们重新编辑grub.conf文件。
3)输入“vi /etc/grub.conf”,然后按'i'进入编辑模式,进入后首先在“splashimage=(hd0,0)/grub/splash.xpm.gz”上方输入“password --md5 密文(点击右键就将刚才复制的密文粘贴下来了!),如果你还需要给启动分区加上口令的话,在“root (hd0,0)”上方输入刚才的信息就可以了!修改完后按ESC,然后输入“:wq”保存退出,这样下次在进入GRUB引导画面前都需要先按'P'键然后输入正确的密码方可引导Linux系统,如果刚才你在启动分区前也输入了密码的话,那么当系统在引导到启动分区时也会要求你输入相应的密码,否则系统无法引导启动分区,要是把这两个密码设置为不同的话,呵呵,相信你的Linux系统相对来说就安全多了!NSSPC信息安全团队9 k6 h, H( i# e4 [) B: ?
2 l& G, ~; w5 a! _0 L6 d* m/ H
PS:刚才是在字符界面下直接使用命令得到md5加密的密文,还有一种方法是直接进入grub
[xufang@localhost /]#grub
grub>md5crypt
NSSPC信息安全团队3 ?1 B4 L, H/ @! c( \
password:******
Encrypted:
密文
这样同样可以得到一串密文,它的特点是不需要确认,然后退出grub:; e5 O8 I$ l1 `+ z0 W3 p) G# j# D* p3 K
grub>quit (退出grub)NSSPC,黑客,信息安全+ X" N; g3 b2 L: V: k
[xufang@localhost /]#clear (清屏)
[xufang@localhost /]#reboot (
重新启动)% w5 i) Y) Z# ]" l4 u% ^
NSSPC,黑客,信息安全6 E* l0 P, ^3 R' }0 K
重新启动后我们在进入GRUB的时候需要首先按'p'然后输入正确的密码方可进入GRUB并引导系统,如果刚才你在GRUB的配置文件中将启动分区前也加上口令的话,那么在即将启动Linux分区的时候我们还要被要求输入一次密码,倘若我们为其设置了不同的密码的话,那么就等于有了双重验证,这样我们的Linux系统相对来说就安全多了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周三叁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值