1. 程式人生 > >Linux_Grub2、系統啟動流程_RHEL7

Linux_Grub2、系統啟動流程_RHEL7

目錄

前言

RHEL7使用GRUB2,載入程式。

系統啟動流程

控制RHEL7啟動過程

  1. 開機
  2. 載入主機板BIOS
  3. 檢測硬體是否有故障
  4. 找啟動介質,boot分割槽MBR(Master Boot Recorder)512Byte,Bootloader(446B)+分割槽表(64B)+校驗結束位(2B),一個分割槽的標識資料佔用16B。核心儲存在/boot,通過GRUB2將核心載入到記憶體。
  5. 通過修改grub.cfg,來實現對系統啟動選項的控制。GRUB2實際上是一個微型的OS,他可以識別到一些常用的檔案系統,GRUB2執行時會讀取自己的配置檔案/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目錄,此目錄下有下列檔案:
1. 00_header 設定 grub 的預設引數
2. 30_os_prober 設定其他分割槽中的系統(硬碟中有多個作業系統時設定)
3. 40_custom、41_custom 使用者自己自定義的配置
4. 10_linux 系統中存在多個 linux 版本
5. 20_ppc_terminfo 設定tty控制檯
/boot/grub2/grub.cfg 是上面檔案的組合體
設定指定核心啟動


vim /etc/default/grub

grub2-set-default saved|number

RHEL7啟動級別

修改系統執行級別:

臨時修改
進入系統後修改:systemctl isolate TAB
未進入系統前修改:按 e,到linux16行尾,加入systemd.unit=xxxx.target
永久修改systemctl set-default TAB
TAB型別和其特性:
1. emergency.target:
sulogin提示,grub啟動完成,同時系統的 root 把/只讀掛載
救援模式(只掛載/而且只讀,不載入/etc/fstab)
檔案系統出了故障時使用。
2. graphical.target:
支援多使用者,圖形化和文字登入
3. multi-user.target:
支援多使用者,文字登入
4. rescue.target:
sulogin(單使用者模式)提示,基本的系統初始化完成,單使用者模式需要口令,要輸入密碼。和多使用者區別在於,不啟動如何服務,載入了檔案系統,適用於某服務設定故障,進入此模式修補。

RHEL7破密碼步驟

rd.break破解
開啟電腦systemctl reboot
在Grub選項上按e鍵,進入編輯模式
在vmlinuz 行後加入rd.break console=tty0(單使用者模式)
ctrl+z 儲存重啟
mount -o remount,rw /sysroot 掛載系統臨時根目錄為可寫
chroot /sysroot 改變系統目錄為臨時掛載目錄
echo fanguiju | passwd --stdin root 修改密碼
touch /.autorelabel
exit
exit
注意:若在VMWare虛擬機器上操作不成功,可以嘗試將rhgb(圖形化啟動)quiet先刪除。
rd.break一般用於修改passwd或者出現重大問題,臨時中斷執行,未載入FileSystem,比但使用者模式還要精簡。若這樣rd.break不能進入,則向kernel傳遞init=/bin.bash或init=/bin/sh引數,使用init的方法來破解。
init破解
開啟電腦systemctl reboot
在Grub選項上按e鍵,進入編輯模式
在kernel(linux16/linux/linuxefi)行尾新增init=/bin/sh
Ctrl+x啟動shell
掛載檔案系統為可寫模式mount –o remount,rw / 直接掛載根目錄

passwd root修改root密碼。
如過系統啟動了selinux,必須執行以下命令,否則將無法正常啟動系統:touch /.autorelabel
exec /sbin/init啟動,或者用指令exec /sbin/reboot重啟

grup2加密,防止破密碼

獲取加密密碼

grub2-mkpasswd-pbkdf2  #輸入密碼

編輯00_header檔案
vim /etc/grub.d/00_header
此檔案配置初始的顯示專案,如預設選項,時間限制等,加入密碼驗證專案,在最後一行新增:

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

更新grub配置後並重啟

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

initramfs檔案

存放kernel 可以rw fs的驅動,當kernel載入到記憶體後要以ro的方式載入根分割槽(xfs),但是因為系統驅動存放在根分割槽中。所以額外將讓kernel可以讀取根分割槽的驅動全放入到initranfs中,在kernel還沒有讀取根分割槽時,initramfs檔案將所有的驅動解壓到記憶體中供kernel使用。