本文是Linux入门记录六,本记录为你讲述Linux系统的启动流程、Linux系统单用户修改root密码及GRUB加密内容。
Linux入门记录系列 Linux入门记录五:命令行文本/文件处理工具,包管理工具RPM及YUM Linux入门记录四:网络基础和基本配置,多命令协作之管道及重定向 Linux入门记录三:获取帮助,Linux用户基础,权限机制,扩展权限 Linux入门记录二:硬件概念,fdisk分区工具,文件系统及文件挂载管理 Linux入门记录一:Bash基本,文件结构,文件操作,常用命令,vim编辑器
一、系统启动流程 一般来说,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圈频道。 |