MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » Linux 入门记要:十八、Linux 系统启动流程 + 单用

Linux 入门记要:十八、Linux 系统启动流程 + 单用户修改 root 密码 + GRUB 加密

www.MyException.Cn  网友分享于:2013-10-16  浏览:0次
Linux 入门记录:十八、Linux 系统启动流程 + 单用户修改 root 密码 + GRUB 加密

一、系统启动流程

一般来说,Linux 系统的启动流程是这样的:

1. 开机之后,位于计算机主板 ROM 芯片上的 BIOS 被最先读取,在进行硬件和内存的校验以及 CPU 的自检没有异常后, BIOS 将被加载到内存中。

2. BIOS 按照其存储的启动顺序,依次尝试加载含有 MBR 信息的可启动设备(一般是硬盘,可设置),然后将控制权交给 MBR 中的 Bootloader(引导程序)。

3. Linux 中使用 GRUB(多操作系统引导程序)作为 Bootloader。GRUB 可以识别(根)文件系统并加载 Kernel(内核),同时将系统的控制权交给 Kernel。

4. Kernel 极其精简,加载过程中也可能会加载一些必要的模块打包文件。

5. 随同 Kernel 一起加载的还有 init(/sbin/init)进程,是 Linux 启动的第一个进程,它负责加载文件系统并根据运行级别启动(重启)和关闭相应服务,最后初始化字符终端和/或启动图形终端,等待用户登录。

至此,系统启动完成。

 

二、流程详解

1. BIOS(Basic Input Or Output,基本输入输出系统)

BIOS 是计算机启动后最先被读取的系统,在硬件和内存的校验以及 CPU 的自检通过、没有异常后,BIOS 将被加载到内存里。BIOS 主要存储了设备(一般是硬盘,可在 BIOS 界面设置)的启动顺序,BIOS 依次尝试加载含有 MBR 信息的可启动设备,找到后将控制权交给 MBR 中的 Bootloader。

 

2. MBR(Master Boot Record,主引导记录)

MBR 在磁盘上的第一个扇区(1 扇区占 512 字节),它的前 446 字节是 Bootloader(引导程序),后 4 个 16 字节是最多 4 个主分区信息,最后 2 字节 55 AA 是启动标识。

Linux 中使用 GRUB 作为 Bootloader。

 

3. GRUB(GRand Unified Bootloader,多操作系统引导程序)

GRUB 是现在 Linux 使用的主流引导程序,可以用来引导现在几乎所有的操作系统。

GRUB 是模块化的,运行时会经历如下阶段:

(1)stage1:stage 1 大小 512 字节(和 MBR 一样大),是 MBR 的备份,MBR 损坏时可以从这里得到一个备份。

(2)*_stage1_5:用于识别多种类型文件系统的文件。CentOS 6 以后的版本默认文件系统是 ext4,会相应地识别 e2fs_stage1_5 文件。识别后,加载文件系统。

(3)stage2:根据 GRUB 配置文件 /boot/grub/grub.conf 的内容来决定如何加载 Kernel。该文件内容一般如下:

参数详解:

default:默认启动的内核编号,从0开始(每个内核信息由title标识)
timeout:等待用户选择要启动的内核的超时时间,单位为秒
splashimage:使用的背景图片
hiddenmenu:隐藏菜单
title:操作系统或内核的标题
    root:内核所在的分区,(hd0,1)表示第1块磁盘的第1个分区
    (在grub中,设备统统以hd开头,并紧跟一个数字作为各磁盘设备的标记,从0开始编号;分区也是从0开始编号,而我的(hd0,1)是因为我的第0个分区是swap交换分区)
    kernel:要加载的内核文件,后面附带启动参数
    initrd:额外驱动或模块的打包文件,ram disk 或 ram fs 文件(通常是归档压缩文件,以.img为文件名后缀)

 

4. Kernel(内核)

GRUB 的最后阶段 stage2 会根据 GRUB 配置文件 /boot/grub/grub.conf 的内容来加载 Kernel,并将系统控制权交给 Kernel。

命令 dmesg 可以用来查看本次启动时内核的输出信息。

 

5. init(Linux 启动的第一个进程)

init 进程是 Linux 启动的第一个进程,PID 为 1,其他所有进程是它的子进程。

Linux 的 init 进程是由传统的 sysvinit 演变而来的,init 进程读取的配置文件 /etc/inittab 仅保留了 sysvinit 的 inittab 文件定义的默认运行级别 runlevel,其他的配置则分散到了 /etc/init/*.conf 多个文件中。

init 进程会根据 /etc/inittab 文件定义的 runlevel 去执行相应目录下的脚本。

 

6. runlevel(运行级别)

命令 runlevel 可显示上一个及当前 runlevel。命令 init 可用来改变当前的 runlevel。

Linux 的 runlevel 有 7 个:

0:系统停机,默认运行级别不能设为0,否则不能正常启动
1:单用户模式,root权限,用于系统维护,禁止远程登陆
2:多用户模式(无网络)
3:多用户状态(命令行界面)
4:保留未使用
5:多用户模式(X11图形化界面)
6:系统重启,默认运行级别不能设为6,否则不能正常启动

这 7 个 runlevel 分别对应了 /etc/rc.d/rc[0-6].d/ 七个目录:

每个目录存储了所有以 K* 和 S* 开头的文件,K 开头的文件表示从其他 runlevel 切换过来需要开启(重启)的服务,S 开头的文件表示从其他 runlevel 切换过来需要关闭的服务。

 

三、单用户修改root密码

为内核传递参数 "1" 或 "single" ,可让系统进入单用户模式(runlevel 1)。单用户模式下不启动任何服务,直接以 root 用户登录,并且不需要密码,可以使用 passwd 修改 root 密码。

 

操作步骤如下:

开机后,在 GRUB 引导等待用户选择要加载内核的超时时间内,随意按下一个键,进入内核的选择界面。

上图中,选中目标版本内核,按下 "e" 键进入编辑。

上图中,选中 kernel,按下 "e" 键进入编辑。

上图中,在行末尾为内核传递参数 "1" 或 "single" ,回车确定,按 "b" 启动。

上图中,成功进入单用户模式,并且是 root 用户登录。使用 passwd 修改 root 密码,然后 exit 退出,正常重启即可。

 

四、GRUB加密

管理员可以通过单用户模式修改 root 密码,但是这也导致任何人都可能通过这种方式入侵系统。为了防止这种危险,可以进行 GRUB 加密。

1. 在 root 用户下输入 grub-md5-crypt 命令,然后输入为 GRUB 设置的密码,产生一组 MD5 加密后的密文。

2. 将得到的密文添加到 GRUB 配置文件 /boot/grub/grub.conf 中。

这样在用户在开机后要编辑内核时就会强制要求输入 GRUB 密码,剔除了非法修改 root 密码的可能。

其次,也可以在 title 段添加一个 passward,它是用于内核(系统)启动时要求输入的密码。

 

参考链接:

Linux系统启动流程

图解Linux系统启动流程

Linux系统启动过程

linux中inittab文件详解

Linux系统有7个运行级别(runlevel)

CentOS 6.4 Grub加密码

文章评论

那些争议最大的编程观点
那些争议最大的编程观点
如何成为一名黑客
如何成为一名黑客
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
10个调试和排错的小建议
10个调试和排错的小建议
程序员的鄙视链
程序员的鄙视链
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
代码女神横空出世
代码女神横空出世
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
旅行,写作,编程
旅行,写作,编程
每天工作4小时的程序员
每天工作4小时的程序员
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
鲜为人知的编程真相
鲜为人知的编程真相
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我的丈夫是个程序员
我的丈夫是个程序员
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
编程语言是女人
编程语言是女人
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
总结2014中国互联网十大段子
总结2014中国互联网十大段子
老程序员的下场
老程序员的下场
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我是如何打败拖延症的
我是如何打败拖延症的
程序员都该阅读的书
程序员都该阅读的书
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
漫画:程序员的工作
漫画:程序员的工作
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
Java程序员必看电影
Java程序员必看电影
 程序员的样子
程序员的样子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有