inux系統啓動流程之(2)grub

Linux系統啓動流程之(2)grub

Linux啓動流程中在引導bootloader時會檢查出磁盤的前446字節,從而找出/boot/grub下的相應的配置,來去掛載假根文件系統來解壓內核來完成根切換。

 

回顧啓動流程:

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別--> 系統初始化腳本rc.sysinit--> 關閉或啓動對應級別的服務--> 啓動終端

vgrub: GRandUnified Bootloader

grub 0.x: grub legacy

grub 1.x: grub2

grub legacy:

stage1: mbr

stage1_5: mbr之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統

stage2:磁盤分區(/boot/grub/)

 

grub legacy說明:

配置文件:/boot/grub/grub.conf  <---- /etc/grub.conf

stage2及內核等通常放置於一個基本磁盤分區

grub的功能:

(1)提供啓動菜單、並提供交互式接口

a:內核參數

e:編輯模式,用於編輯菜單

c:命令模式,交互式接口

(2)加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏啓動菜單

(3)爲菜單提供了保護機制

爲編輯啓動菜單進行認證

爲啓動內核或操作系統進行認證

 

文件例子展示CentOS下:

wKioL1ffWtmSP57xAAAt3HjuibQ850.png

 

grub主配置文件案例格式解析:

default=0                             #設定默認啓動的title編號,從0開始
timeout=5                             #等待用戶選擇的超時時長,單位是秒
splashimage=(hd0,0)/grub/splash.xpm.gz  #grub菜單的背景圖片文件路徑
hiddenmenu                              #隱藏菜單
password redhat                      #定義grub明文密碼,編輯grub時需要輸入密碼
password --md5 $1$6u/1v$4Jd.5YSDf9.5v1AnfJFRe0  #定義加密密碼
title Mylinux                #內核菜單標題,一般爲操作系統名稱、字符串,可自由修改
root (hd0,0)                 #grub查找stage2及kernel文件所在的設備分區;爲/boot
kernel /vmlinuz-2.6.18-308.el5       #內核文件路徑,及傳遞給內核的參數
    initrd /initrd-2.6.18-308.el5.img    #內核匹配的ramfs文件
password --md5 $1$6u/1v$4Jd.5YSDf9.5v1AnfJFRe0  #給內核加密碼

注意:這裏的(hd0,0)表示第1塊磁盤的第一個分區,一般找內核所在分區會以此格式來指定。

 

識別硬盤設備:

(hd#,#)

hd#:磁盤編號,用數字表示;從0開始編號

#:分區編號,用數字表示;從0開始編號

解析:那麼上面的gurb樣板格式裏的(hd0,0)表示第一塊硬盤,第一個分區

 

安裝grub的兩種方式:

第一種:交互式設置

前提:需要事先判斷grub在哪個磁盤

#輸入grub命令進入交互式

[root@mzf ~]# grub
grub> root (hd0,0)    #使用 root (hd0,0)檢查磁盤0的第一個分區是否有文件系統
root (hd0,0)          #顯示出文件系統類型,可以使用find命令查看此目錄文件是否對應 
grub> setup (hd0,0)   #確定安裝在此分區
..............
grub>quit             #在系統裏操作完成後退出,在救援模式使用boot啓動


 

第二種方式:

grub-install --root-directory=/path/to/boot’s+parent_dir  /PATH/TO/DEVICE

如:

[root@mzf ~]# grub-install --root-directory=/ /dev/sda
Installation finished. No error reported.
This is the contents of the device map //boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
 
# this device map was generated by anaconda
(hd0)     /dev/sda

解析:這裏的--root-directory=指明的是boot目錄的父目錄,第二個參數表示在哪個磁盤的前446字節安裝grub及(bootloader)。

 

案例1:修改grub中的信息自定義菜單:

1、修改文件配置

#查看源文件信息:

[root@mzf ~]# vim /boot/grub/grub.conf

wKioL1ffXaGTUoNxAAAtKqEP1Z4682.png

#添加對應條目,設置標題等信息

wKioL1ffXMKRFDPgAAAyk826PSY682.png 

解析:這裏標題裏沒有設置root    (hd#,#),及指定root分區在哪個磁盤的分區上,所有可以直接使用(hd#,#)來表示root文件系統的路徑然後後面跟boot目錄下的對應文件路徑。

#保存後重啓啓動機器

[root@mzf ~]# reboot

#進入系統讀秒時按任意鍵,進入grub菜單

 wKioL1ffXeyQSjUJAAAYFF4iCRY158.png

解析:進入grub菜單發現新增了一個剛剛在grub.conf配置文件中定義的title(MengTianba Linux),同時在菜單的下發顯示了一些grub的相關操作介紹:

按上↑或下↓鍵可以來調整選擇哪個grub引導入口,選擇後按回車表示從該條目引導。

按 e 鍵表示對選擇的條目進行編輯

按 a 鍵表示修改選擇條目的內核參數

按 c 鍵進入命令行交互界面

 

#此時可以選擇按enter回車鍵直接進入剛纔添加的入口,這裏按e鍵來進行編輯

 wKiom1ffXijzIIkEAAAmROSYU2M914.png

解析:這裏又進入了一個子菜單,而這個菜單是顯示剛纔選擇grub 條目中的信息,也就是grub.conf文件中定義的那行信息。同時這裏可以也提示了一些關鍵鍵:

按e編譯內核參數

按c進入對應的子項交互編輯界面

按o表示追加一個新行,按O便是插入一個新行

按d刪除指定行

按b表示自己啓動引導

 

#這裏同樣可以使用對kernel項按e或者按c,於是按e鍵

wKiom1ffXkTDlV2gAAARxuxDmR0855.png 

說明:這時可以對此行進行編輯了,於是在root=/dev/sda2(指定系統所在分區)的後面加入一些參數,比如:selinux=0(關閉selinux功能)、max_loop=100(指定loop設備最大映射值)。於是添加如下:

wKiom1ffXoLTFQP7AAAQkz4NQEM207.png

解析:在後面添加自己想添加的內核參數後,發現上面提示有按ESC鍵可以取消此次編輯不保存而回到上個子菜單,而按回車鍵會臨時保存內核參數,於是按回車回到子菜單。

wKiom1ffXo3gk8nnAAAMLyLZBZk068.png 

解析:因爲內核參過長所所有沒有完全顯示,這裏按b鍵就可以讓gurb按照設置好的內核參數來進行加載系統。,於是按b鍵--> boot啓動。

 

2、進入系統後,可以查看剛纔設置的內核是否已經生效

#查看selinux安全上下文件功能是否已經被禁用

[root@mzf ~]# getenforce 
Disabled

#查看本地迴環設備是最大數量是否已經被修改到了100個

[root@mzf ~]# ls /dev/loop*

wKiom1ffXraiIoxLAAAvPU7UZck456.png

解析:現在可以此時本地迴環設備以及提供了100個映射點,當然這只是測驗,真實中是用不到這麼多的本地迴環設備映射的。

#那麼剛纔設置的這些參數又被臨時保存到哪個映射文件呢

[root@mzf ~]# cat /proc/cmdline 
ro root=/dev/sda2 selinux=0 max_loop=100

注:這裏的顯示的參數只是對於內核加載後生效的並設置的參數,只是臨時在內存中,重啓機器後就會失效。因此還是需要修改grub.conf文件來使其永久生效:

#再次修改grub.conf文件,加入剛纔設置的禁用selinux和調整迴環設備最大映射數:

 wKiom1ffXv2x_mwGAAAPnT73ssg211.png

 

3、加密Grub,設置密碼

(1)生成口令

當然如果不想讓人隨意來編輯此grub條目,可以設置對此設置密碼

爲了安全性,應使用加密的密碼,於是可以使用下面命令來生成加密口令:

#使用專門用於生成grub中md5加密算法的grub-md5-crypt工具:

[root@mzf ~]# grub-md5-crypt << EOF > token.txt 2> /dev/null
> 123456
> 123456
> EOF

#然後查看token.txt文件中保存的密鑰:

[root@mzf ~]# tail -n 1 token.txt 
$1$3jizv$jY.3FSjDvDkv0cpntbqvg/

 

(2)加密MengTianba單個title項

#然後進入vim界面來將剛纔的加密密鑰加入指定的 title條目中

可以使用垂直分屏顯示模式同時打開token.txt和 grub.conf文件

[root@mzf ~]# vim -O token.txt /boot/grub/grub.conf

#然後對應修改,對MengTianba條目內核設置密碼

wKiom1ffX5vzuJ6iAACfL7OIjX8809.png

注意:口令的前面必須要password  --md5參數來表示此字段爲設置此條目需要的安全口令。

 

(3)給grub引導加密

#同樣編輯grub.conf文件

[root@mzf ~]# vim /boot/grub/grub.conf

wKiom1ffX9KCHUZnAAAOzHFpOi0444.png 

說明:在第一個title菜單選項行前面插入一行。

#然後進入末行模式,輸入命令讀取加密的文本讀入到此行

 wKiom1ffX-bz_eV2AAAEC4kaHok926.png

#按回車,發現口令已經被讀入此行

wKioL1ffX_LTj0zbAAAT9ln5Ky0877.png 

#此時保存文件退出,重啓機器測試,按按任意鍵進入 grub菜單

wKiom1ffYAuCEi_YAAAQ8ZJlmgI728.png 

注意:此時發現雖然能進入grub菜單,但是下面的提示卻變了,只能按上下鍵選擇選擇後者按p鍵進入對應的grub引導,於是選擇自定義添加的那一行,按p鍵:

wKiom1ffYBvBRBYmAAAO5Hp6n0A607.png 

解析:這裏輸入的密碼爲grub菜單設置的加密口令。輸入口令後回車將再次顯示此菜單,但是下面的提示將回到正常狀態。

#這時選擇MengTianba按ENTER回車,系統從此引導入口來加載對應的系統

wKioL1ffYEbgvYQIAAACCvzJE88115.png

解析:這時輸入的密碼就是title對應的MengTianba下設置的加密口令,輸入正確後進入系統。

 

但是如果這裏我們選到MengTiana LInux按c使用交互式模式調整此引導條目信息:

wKiom1ffYE_Rqnl8AAAJ1S2Y55s049.png 

說明:編輯好指定的內核參數以及initrd調用後輸入boot回車表示以上面設置的grub信息來進入引導。

注意:這裏有一個問題,這裏如果使用能通過grub交互式界面裏提供的find命令來慢慢查找內核目錄裏的文件來判斷系統或boot所在的分區及文件路徑,那麼只要使用c來進入交互式grub直接跳過條目中的加密設置來進入指定的grub引導。當然前提是要記住grub編輯界面的密碼口令,如果不能進入編輯模式,那麼想直接跳過grub自身加密是不可行的。

 

案例2:進入單用戶模式來破解root口令

在生產環境中,很多時候因爲人員的調度或者經常更改root管理員用戶口令,導致在真正使用的時候而忘記root密碼,這時可以利用linux中提供的單用戶模式來跳過login交互式用戶驗證模塊直接進入對應的shell界面,然後進行命令操作修改root口令。

下面假設忘記了boot用戶,可以通過進入grub然後通知內核以單用戶模式進入系統

#進入可編輯模式(爲加密或者已經輸入密碼的)的grub菜單

wKiom1ffYGrDcFz4AAAEzOiaUdc598.png 

#然後按e鍵編輯MengTianba Linux引導項

wKioL1ffYHWTB_gyAAAMGvPoHNo165.png 

#然後再次按e來編輯 kernel項參數

wKiom1ffYH3xb-hTAAAEPa6nNWg237.png 

說明:在最後跟上1或者s或者single都表示爲單用戶模式及進入1級別引導系統。

#最後按b鍵進行啓動系統,系統啓動完成,會直接跳過login交互登錄提示,直接以root身份進入系統:

wKioL1ffYISh_VQGAAARIZsfg20608.png 

解析:這樣就可以直接修改root密碼了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章