Linux 操作系统原理 — 系统启动流程

举报
云物互联 发表于 2021/08/06 00:57:01 2021/08/06
【摘要】 目录 文章目录 目录系统启动流程编辑 gurb.cfgRHEL7 的启动级别RHEL7 破密码步骤grup2 加密,防止破密码initramfs 文件 系统启动流程 RHEL7 使用了 GRUB2 引导程序。 开启电源。加载主板 BIOS检测硬件是否有故障 。找启动介质,进入磁盘的 MBR 引导分区分区。MBR 大小为 512Byte,由 Bootl...

目录

系统启动流程

RHEL7 使用了 GRUB2 引导程序。

  1. 开启电源。
  2. 加载主板 BIOS
  3. 检测硬件是否有故障 。
  4. 找启动介质,进入磁盘的 MBR 引导分区分区。MBR 大小为 512Byte,由 Bootloader(446B)+ 分区表(64B)+ 校验结束位(2B)组成。一个分区的标识数据占用 16B。
  5. Linux 内核文件保存在 /boot 目录下,通过 GRUB2 程序将内核加载到内存。可以通过修改 grub.cfg,来控制系统启动选项。GRUB2 的本质是一个微型的操作系统,他可以识别到一些常用的文件系统,GRUB 2运行时会读取自己的配置文件 /boot/grub2/grub.cfg。每个内核条目都会以 menuentry 开头 ,menuentry 包含标题、选项(不建议修改),menuentry 后面有一对大括号,其中都是启动项,启动项以 TAB 开头 ,linux16 这行指定内核的位置、根分区的位置、以只读方式挂载根分区 、字符集、键盘布局、语言、rhgb(以图形化方式显示启动过程)、quiet(启动过程出现错误提示)。根分区都是 xfs 格式的,xfs 需要驱动才能读取文件,驱动的位置在 /lib/modules/3.10.0-123.el7.x86_64/kernel/fs/xfs,通过 initrd16 将启动相关的驱动和模块解压到内存,再读取根分区(xfs)的数据。

注意:RHEL7 的 grub.cfg 不能直接修改,要通过修改 /etc/default/grub 来间接编辑 grub.cfg。

编辑 gurb.cfg

修改配置文件 /etc/default/grub,修改后用 grub2-mkconfig 指令成 grub2.cfg。在 grub2-mkconfig 生成配置文件时需要加载 /etc/grub.d 目录,此目录下有下列文件:

  • 00_header:设置 grub 的默认参数。
  • 30_os_prober:设置其他分区中的系统(硬盘中有多个操作系统时设置)。
  • 40_custom、41_custom:用户自己自定义的配置。
  • 10_linux:系统中存在多个 Linux 版本。
  • 20_ppc_terminfo:设置 tty 控制台 。

/boot/grub2/grub.cfg 就是上面文件的组合体。

例如,设置指定内核启动:

# vim  /etc/default/grub
grub2-set-default saved|number

  
 
  • 1
  • 2

RHEL7 的启动级别

临时修改

  • 进入系统后修改:systemctl isolate TAB
  • 未进入系统前修改:按 e,到 linux16 行尾,加入systemd.unit=xxxx.target

永久修改systemctl set-default TAB

TAB 类型和其特性:

  • emergency.target:sulogin 提示,grub 启动完成,同时系统的 root 把/只读挂载。救援模式(只挂载/而且只读,不加载 /etc/fstab)。在文件系统出了故障时使用。
  • graphical.target:支持多用户,图形化和文本登录。
  • multi-user.target:支持多用户,文本登录。
  • rescue.target:sulogin(单用户模式)提示,基本的系统初始化完成,单用户模式需要口令,要输入密码。和多用户区别在于不启动任何服务,加载了文件系统,适用于某服务设置故障,进入此模式修补。

RHEL7 破密码步骤

rd.break破解

  1. 开启电脑 systemctl reboot
  2. 在 Grub 选项上按 e 键,进入编辑模式。
  3. 在 vmlinuz 行后加入 rd.break console=tty0(单用户模式)。
  4. ctrl+z 保存重启。
  5. mount -o remount,rw /sysroot 挂载系统临时根目录为可写。
  6. chroot /sysroot 改变系统目录为临时挂载目录。
  7. echo fanguiju | passwd --stdin root 修改密码。
  8. touch /.autorelabel
  9. exit
  10. exit

注意:若在 VMware 虚拟机上操作不成功,可以尝试将 rhgb quiet(图形化启动)先删除。

rd.break 一般用于修改 passwd 或者出现重大问题,临时中断运行,未加载 FileSystem,比但用户模式还要精简。若这样 rd.break 不能进入,则向 kernel 传递 init=/bin.bash 或 init=/bin/sh 参数,使用 init 的方法来破解。

init破解

  1. 开启电脑 systemctl reboot
  2. 在 Grub 选项上按 e 键,进入编辑模式。
  3. 在 kernel(linux16/linux/linuxefi)行尾添加 init=/bin/sh
  4. Ctrl+x 启动 Shell。
  5. 挂载文件系统为可写模式 mount –o remount,rw / 直接挂载根目录。
  6. passwd root 修改 root 密码。
  7. exec /sbin/init 启动,或者用指令 exec /sbin/reboot 重启。

NOTE:如过系统启动了 selinux,必须运行以下命令,否则将无法正常启动系统:touch /.autorelabel

grup2 加密,防止破密码

获取加密密码

grub2-mkpasswd-pbkdf2  # 输入密码

  
 
  • 1

编辑 00_header 文件:此文件配置初始的显示项目,如默认选项,时间限制等,加入密码验证项目,在最后一行添加:

# vim /etc/grub.d/00_header

cat << EOF
set superusers="jmilk"
password jmilk grub.pbkdf2.shaxxxxxxxxxxxxxxx  #加密密码
EOF

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更新 grub 配置后并重启

grub2-mkconfig -o /boot/grub2/grub.cfg
systemctl reboot

  
 
  • 1
  • 2

initramfs 文件

存放 kernel 可以 rw fs 的驱动,当 kernel 加载到内存后要以 ro 的方式加载根分区(xfs),但是因为系统驱动存放在根分区中。所以额外将让 kernel 可以读取根分区的驱动全放入到 initranfs 中,在 Kernel 还没有读取根分区时,initramfs 文件将所有的驱动解压到内存中供 kerne l使用。

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/49928853

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。