Linux_22_系統初始化流程


@

系統初始化

啟動流程

1)讀取BIOS,根據BIOS加載硬件信息和硬件系統自檢;

2)根據BIOS讀取第一個可啟動設備中MBR的啟動引導程序(Boot Loader);

3)根據啟動引導程序,將指定內核(Kernel)文件加載至內存中解壓和執行;

4)待內核檢測硬件和加載驅動程序完畢,系統即可運行。

//內核文件一般為壓縮文件,使用前需解壓縮,才能加載到內存中


在驅動程序加載完成后,Kernel會主動調用Systemd程序進行default.target流程:

1)Systemd執行sysinit.target初始化系統;

2)Systemd執行basic.target設計運行環境;

3)Systemd啟動multi-user.target下的本機/服務器的服務;

4)Systemd執行multi-user.target的/etc/rc.d/rc.local、getty.target和登錄服務

//若是圖形界面,Systemd還需執行graphical.target所需的服務


BIOS(基礎輸入輸出系統):提供系統最底層和最直接的硬件設置和控制

1)不論BIOS還是UEFI BIOS都統稱為BIOS(固化在主板上)


MBR(主引導記錄):磁盤中的Boot Loader區塊

1)系統的MBR一般指的是第一個啟動設備中的MBR

2)只要BIOS可檢測到磁盤(不論任何格式),都可通過硬件的INT 13中斷功讀取磁盤內的第一個扇區內的MBR

Boot Loader

Boot Loader(啟動引導程序):識別內核文件格式並加載至內核中執行

1)Boot Loader程序安裝在MBR中(磁盤的第一個扇區)

//不同的操作系統的Boot Loader不同,且內核需對應的Boot Loader才可加載,所以每個文件系統都會保留一塊啟動扇區(Boot Loader)用於安裝Boot Loader


如:系統中有多個文件系統時的boot loader
在這里插入圖片描述

//Windows安裝時,默認將在MBR和boot sector上都裝上boot loader

//Linux可選擇是否安裝選擇在MBR,若不選擇在MBR上安裝boot loader,則boot loader僅在boot sector上安裝(反之亦然)


boot loader功能:

1)提供多重引導啟動功能(加載指定的內核文件);

//實現一台電腦安裝多個操作系統

2)直接加載內核文件;

//默認會加載至boot sector內的啟動引導程序(如:grub2)

3)將啟動管理功能轉交至其他boot loader

//Windows的boot loader默認不具有控制權轉交功能,所以不能實現在啟動Windows后的boot loader后再加載Linux的boot loader(這也是系統安裝多重引導時,需先裝Windows再裝Linux)


如:Windows、Linux和直接加載內核
在這里插入圖片描述
1)MBR(grub2)Linux Kernelbooting

2)MBR(grub2)boot sectore(Windows Loader)Windows Kernelbooting

3)MBR(grub2)boot sectore(grub2)Linux Kernelbooting


內核文件存儲在:/boot/vmlinuz-版本號

//不同版本系統的內核版本和版本號不同,所以沒有具體路徑

如:查看/boot目錄下的文件
在這里插入圖片描述


Linux內核是通過動態加載內核模塊實現多個功能加載

1)Linux發行版都將非必要且可編譯的內核功能編譯成模塊
//如:USB、SATA和SCSI等磁盤設備的驅動程序都是以模塊方式加載內核模塊都存儲在:/lib/modules

//因為動態加載,所以“/”和“/lib”必須放在同一個硬盤分區

如:查看/lib/module目錄下存放的內核模塊
在這里插入圖片描述

//若含有多個內核,則以內核版本號命名的目錄存儲其內核模塊

//雖然設備的驅動程序在/lib/modules目錄下,但內核並不能掛載該目錄(也讀取不到該目錄下的驅動程序),且內核不能識別具體設備,只能通過加載具體設備的驅動程序將其掛載至根目錄

初始化文件系統

初始化文件系統(Initial Ram Filesystem):內存中模擬文件系統以提供執行程序

1)虛擬文件系統通過boot loader加載至內存中,並被解壓縮(壓縮文件)在內存中模擬成一個根目錄使用;

2)通過虛擬文件系統提供的程序加載啟動程序中需要的內核模塊,模塊通常為文件系統設備的驅動程序;

3)加載完成后,再幫助內核重新調用Systemd完成后續的啟動流程;

//初始化文件系統也可稱為虛擬文件系統

如:BIOS、boot loade和內核加載流程
在這里插入圖片描述

//boot loader加載Kernel和initramfs(Initial RAM Filesystem),在內存中將initramfs解壓縮成根目錄,由此加載所需的驅動程序,加載完成后釋放initramfs並掛載實際的根目錄文件系統

如:查看系統的虛擬文件系統(initramfs)
在這里插入圖片描述
//initramfs就是一個小型的根目錄,且由Systemd管理initramfs通過initrd.target啟動


initramfs存在原因:內核模塊都存儲在/lib/modules/$(uname-r)/kernel目錄下,則內核想讀取這些模塊就需先將其在根目錄掛載,而內核本身不具備磁盤的驅動程序,所以不能掛載到根目錄,進而不能讀取到模塊


initramfs具體操作:

1)將/lib/modules目錄下內核啟動過程所需的模塊打包成一個文件(initramfs);

2)在啟動過程中就通過INT 13硬件中斷的功能將文件解壓縮;

3)initramfs在內存中模擬成根目錄,且包含磁盤驅動程序和文件系統的模塊;

4)內核通過initramfs就可識別實際的磁盤,進而將實際的根目錄掛載;


dracut命令:建立/重置initramfs文件

指令格式1:dracut 選項 initramfs文件名

選項 含義
-f 強制編譯initramfs 若initramfs文件已存在,則覆蓋
-v 顯示dracut運行過程

//各個發行版的內核都默認提供initramfs文件


指令格式2:dracut 選項 initramfs文件名

選項 含義
--add-drivers 添加指定內核模塊到initramfs文件中 指定的內核需在/lib/modules/$(uname -r)/kernel存在
--filesystems 添加指定額外的文件系統到initramfs文件中
--gzip --bzip2 --xz 指定initramfs文件壓縮方式 默認為gzip

第一個程序

待內核加載完成、硬件檢測和驅動程序加載都完成后,內核會自動調用第一個程序“Systemd”(所以Systemd的PID是1)

1)Systemd功能:通過default.target設計軟件運行的環境

2)Systemd的默認啟動服務集合:/etc/systemd/system/default.target

//如:系統的主機名、網絡設置、文件系統格式和其他服務的啟動等


如:查看/etc/systemd/system/default.target
在這里插入圖片描述

當內核完成/etc/systemd/systemd/default.target的默認啟動服務集合后,就會鏈接到/usr/lib/systemd/system目錄下加載multi-user.target或graphical.target

//加載graphical.target相當於也加載了multi-user.target(graphical.target在multi-user.target加載完成后通過加載其他服務而完成)


如:繼續加載multi-user.target(graphical.target同理)流程
1)查看multi-user.target配置文件
在這里插入圖片描述

//multi-user.target需在basic.target加載完畢后再加載很多服務

2)查看multi-user.target加載的其他服務
在這里插入圖片描述

//其中/usr/lib/systemd/multi-user.target.wants代表系統設置加載的服務,/etc/systemd/system/multi-user.target.wants代表用戶設置加載的服務


Systemd啟動流程:

1)local-fs.target:掛載系統/etc/fstab規范的文件系統;

2)swap.target:配置內存交換分區;

3)sysinit.target:檢測硬件和加載內核所需模塊等;

4)basic.target:加載主要設備的驅動程序和防火牆等;

5)multi-user.target:加載普通系統服務和網絡服務

//若系統為圖形界面,還需執行graphical.target完成界面化服務


sysinit.target:提供系統基本的內核功能、文件系統和設備驅動等(初始化系統)

sysinit.target主要實現功能如下:

sysinit.target主要實現功能
特殊文件系統設備的掛載 如:dev-hugepages.mount和dev-mqueue.mount等掛載服務;
特殊文件系統的啟用 如:磁盤陣列(RAID)、網絡驅動器(iscsi)和文件系統對照服務等;
系統啟動過程中信息傳遞和畫面展示 如:plymouthd服務和plymouth命令來傳遞動畫和信息;
日志文件服務的啟動 如:systemd-journald服務的啟用;
加載額外的內核模塊 如:通過/etc/modules-load.d/模塊名.conf文件實現加載內核額外功能;
加載額外的內核參數設置 如:讀取/etc/sysctl.conf和/etc/sysctl.d/模塊名.conf
啟動系統的隨機數生成器 如:幫助系統進行密碼加密演算功能;
設置終端字體 如:配置終端顯示的字體形式
啟動動態設備管理器 如:通過udevd程序,動態對應實際設備讀寫和設備文件名

//不論任何運行級別,sysinit.target都是必須工作的


basic.target:完善初始化后系統的其他服務(操作系統)

basic.target主要實現功
加載alsa音效驅動程序 如:alsa是音效相關的驅動程序,使系統有音效效果
加載firewalld防火牆 CentOS7后用firewalld替代iptables(依然是iptables框架),設置有差異
加載root指定的模塊 如:模塊存儲在/etc/sysconfig/modules/模塊名.modules和/etc/rc.modules
啟動/配置SELinux安全上下文 如:root可強制重新設置SELinux的安全上下文
加載CPU微指令功能
加載Systemd支持的timer功能
將啟動過程所產生的數據寫入到/var/log/dmesg

/etc/systemd/system/multi-user.target.wants:通過鏈接文件控制服務開機自啟

//系統在啟動時,會自動啟動該目錄下的所有文件,若讓一個服務開機自啟,只需將在該目錄下做個鏈接文件

如:取消cups服務的開機自啟,再設置其為開機自啟
在這里插入圖片描述

//通過systemctl建立/刪除鏈接文件實現是否開機自啟


/etc/systemd/system目錄:存儲系統啟動需執行的程序/腳本文件

//實現效果同/etc/rc.d/rc.local文件一致,兩者不同處在於:前者屬於Systemd,后者屬於System V


rc-local.service:為兼容System V的rc.local

//該服務是否啟動成功,與/etc/rc.d/rc.local是否具有可執行權限有關;若rc.local具有可執行權限,systemctl重讀配置文件后則可啟動該服務;若rc.local不具有可執行權限,則rc-local.service無法啟動


如:啟動rc-local.service服務

1)查看/etc/rc.d/rc.local權限,並啟動rc-local.service服務;
在這里插入圖片描述

2)使/etc/rc.d/rc.local具有可執行權限,並啟動rc-local.service服務
在這里插入圖片描述

/etc/modules-load.d/模塊名.conf:存儲內核需加載的模塊

1)內容格式:一行即代表一個需加載的內核模塊

2)sysinit.target加載模塊時默認調用該目錄下的文件


/etc/modprobe.d/模塊名.conf:存儲內核模塊的配置參數

1)內核模塊的參數配置文件一般與該內核模塊同名


/etc/sysconfig目錄:存儲系統服務的腳本文件

//雖然Systemd已擁有其他的配置文件處理方式,但為了兼容System V,系統啟動時還是會讀取/etc/sysconfig目錄下的文件


如:/etc/sysconfig目錄下常用的腳本文件

1)authconfig:規范用戶的身份認證功能、/etc/passwd、/etc/shadow使用權限和/etc/shadwon的密碼加密算法(Centos7默認使用SHA-512加密算法);

2)cpupower:規范Linux內核操作CPU的原則和啟動cpupower.service;

//cpupower.service可讓系統以CPU最大性能的方式來運行

3)firewalld:與防火牆相關的配置;

//與防火牆相關的還有:iptables-config、ip6tables-config和ebtables-config

4)network-scripts:網卡配置參數相關

內核模塊

內核相關配置文件
/boot/vmlinuz-內核版本號:存儲內核文件
/boot/initramfs-內核版本號:存儲內核運行時所需的RAM Disk
/usr/src/kernels:存儲內核源代碼(默認不安裝)
/proc/version:存儲內核加載至內存后,內核版本相關信息
/proc/sys/kernel:存儲內核加載至內存后,內核功能相關文件
/lib/modules/內核版本號/kernel:存儲內核模塊

如:查看/lib/modules/$(uname-r)/kernel目錄
在這里插入圖片描述

7)/lib/modules/內核版本號/modules.dep:記錄內核模塊依賴性

//內核模塊的啟動/運行類似服務一樣具有依賴性


depmod命令:分析當前內核模塊依賴性並寫入默認文件中

//默認文件:/lib/modules/內核版本號/modules.dep

指令格式:depmod 選項

//不加選項時,默認分析當前內核模塊依賴性,並重新寫入默認文件中

選項 含義
-a 檢查所有模塊依賴性,並寫入默認文件中
-A 檢查是否有模塊比默認文件中的模塊新 若存在,則更新默認文件(反之,不更新)
-e 顯示當前已加載卻不可執行的模塊
-n 將分析結果輸出到終端(不寫入默認文件)

lsmod命令:查看當前內核加載模塊數量

指令格式:lsmod


如:查看當前內核加載了多少模塊
在這里插入圖片描述

內容格式:模塊名稱(Module) 模塊大小(Size) 模塊是否被引用(Used by)


modinfo命令:顯示指定內核模塊的信息

//modinfo不僅可查看內核模塊,還可查看具體模塊文件

指令格式:modinfo 選項 模塊名

選項 含義
-n 僅顯示指定模塊的絕對路徑
-d 僅顯示指定模塊的說明
-p 僅顯示指定模塊的參數說明
-a 僅顯示指定模塊的開發人員

如:查看ip_tables模塊的信息
在這里插入圖片描述


rmmod命令:從內核中刪除指定模塊

指令格式:rmmod 選項 模塊名

選項 含義
-f 強制刪除
-w 等待模塊能被刪除時再刪除該模塊

insmod命令:添加指定模塊到內核中

//insomd可添加模塊到內核中,但不能解決模塊依賴性問題

指令格式:insmod 選項 內核模塊的絕對路徑

選項 含義
-v 顯示執行過程
-p 測試模塊是否能添加Kernel中
-f 強制添加 不檢查當前Kernel版本和模塊編譯時的Kernel版本是否一致

modprobe命令:根據modules.dep文件添加/刪除內核中的模塊

//modprobe可添加一個/一組相依的模塊,modprobe根據modules.dep文件中的依賴關系,決定添加哪些模塊,且不需指定模塊的絕對路徑,因為modules.dep已記錄該模塊的絕對路徑,若添加過程中發生錯誤,modprobe會刪除整組模塊

指令格式:modprobe 選項 模塊名

選項 含義
-c 列出當前系統中所有的模塊
-f 強制添加模塊
-r 刪除指定模塊

Grub2

Grub2:Centos7使用的一種boot loader


grub2的優點如下:

1)識別和支持較多的文件系統,且grub2可直接在文件系統中查找內核文件;

2)系統啟動時,可自行編譯和修改啟動設置選項(類似bash命令行模式);

3)動態查找配置文件

//只需修改/boot/grub2/grub.cfg的設置參數后,下次重啟自動生效


grub2-install命令:將grub2安裝到指定設備下

指令格式:grub2-install 選項 安裝設備

選項 含義
--force 強制安裝
--recheck 若安裝設備上已存在,則刪除后再安裝
--skip-fs-probe 忽略該設備上的文件系統影響
--boot-directory=目錄路徑 安裝到指定設備的目錄上

//grub2-install默認將grub2所有的文件都安裝到/boot/grub2目錄下

//grub2-install僅能安裝grub2主程序和相關配置文件到/boot/gurb2目錄下

//若將grub2安裝到磁盤分區下時,需添加許多選項才能安裝,且不能用grub2-install將主程序寫入到啟動扇區(導致無法啟動)

配置Grub2

Linux將grub2分為兩個階段(stage)進行保存和運行:

//由於MBR是硬盤的第一個扇區的一個區塊,容量僅446B,故不能存儲下類似grub2這種復雜功能的grub2(GPT也不能)


1)Stage1:運行grub2主程序,主程序被安裝在啟動區(MBR或boot sector),並不安裝其相關的配置文件;

2)Stage2:主程序加載配置文件,通過grub2加載所有配置文件和相關的環境參數文件(文件系統定義和主要配置文件grub.cfg)


/boot/grub2目錄:存儲grub2相關配置文件

如:查看/boot/grub2
在這里插入圖片描述


grub2的磁盤命名格式:

// grub2通過對磁盤命名,識別不同磁盤和磁盤分區

1)磁盤名以小括號括起來;

2)磁盤以“hdN”表示,N代表該磁盤的被查找到的順序;

//第一個查找的磁盤為0,第二個為1,以此類推;

//由於BIOS可動態調整磁盤的啟動順序,則磁盤被查找的順序不固定,所以N是可能會變動的

3)每個磁盤的第一個分區為1,以此類推


如:系統中含有三塊磁盤,其在grub2的中命名如下

磁盤被查找到的順序 在grub2中的命名
第一塊(MBR) (hd0)、(hd0,msdos1)、(hd0,msdos2)……
第二塊(GPT) (hd1)、(hd1,gpt1)、(hd1,gpt2)……
第三塊 (hd2)、(hd2,1)、(hd2,2)……

//第一塊磁盤的第一個邏輯分區的啟動扇區命名應為:(hd0,msdos5)

//在命名格式中,msdos和gpt可省略


/boot/grub2/grub.cfg文件:grub2的主要配置文件

//由於該文件內容太過復雜,數據量過多,所以不建議修改該文件,而是通過grub2-mkconfig命令產生新的grub.cfg文件

如:查看/boot/grub2/grub.cfg內容
在這里插入圖片描述

//grub.cfg內容可分為兩部分,第一部分為:其他腳本文件的執行和基礎運行環境的設計;第二部分(menuentry)為:設計針對具體Linux內核文件運行的環境

//配置文件中有幾個menuentry配置,啟動時就有幾個選項


/boot/grub2/grub.cfg中特殊設置:

1)set root:指定在Linux文件系統中,根目錄在那個磁盤上

2)linux16 /vmlinuz-內核版本號:指定Linux內核文件和內核執行時的參數設置

//由於系統在啟動過程中,內核文件需掛載根目錄並從根目錄中讀取配置文件,所以需搭配“set root”在配置中內核文件后一定要指定根目錄所在的磁盤

3)initrd16 /initramfs-內核版本號:指定虛擬文件系統

//與linux 16同理,需搭配“set root”在配置中指定具體設備,才能讀取到正確的虛擬文件系統


/etc/default/grub文件:提供用戶修改grub2默認環境配置文件

如:查看/etc/default/grub內容
在這里插入圖片描述

設置項 含義
GRUB_TIMEOUT 指定默認倒數讀秒的秒數 若取消等待,則設置為0(直接為默認項) 若強制用戶選擇,則設置為-1
GRUB_TIMEOUT_STYLE 指定默認是否顯示啟動選項 menu:顯示(默認項) countdown:取消顯示,但顯示等待秒數 hidden:取消所有顯示(包括秒數)
GRUB_TERMINAL_OUTPUT 指定默認信息輸出終端 可設置為:console(默認項)、serial、gfxterm和vag_text
GRUB_DEFAULT 指定默認啟動選項 指定哪一個menuentry作為默認啟動項 默認第一個啟動選項為默認啟動項
GRUB_CMDLINE_LINUX 指定內核運行的額外參數 實現類似linux16后的內核參數設置

//可通過menuentry的saved、數字、title名和ID名指定默認啟動項

如:當系統含有3個menuentry時,指定默認啟動項
1)查看3menuentry的title名和ID名;
在這里插入圖片描述

2)指定編號是1的menuentry為默認啟動項;
在這里插入圖片描述

3)指定ID名是“3rd-win-system”為默認啟動項;
在這里插入圖片描述

4)指定saved為默認啟動項;
在這里插入圖片描述


僅修改/etc/default/grub並不能更改grub2的配置,配置/etc/default/grub文件后還需通過grub2-mkconfig命令使/boot/grub2/grub.cfg文件建立/更新

如:使啟動選項時等待10秒;默認選用第一個選項;且選項是顯示的;內核外帶“elevator=deadline”參數
1)配置/etc/default/grub文件;
在這里插入圖片描述

2)更新grub.cfg文件;
在這里插入圖片描述

3)檢驗是否配置成功
在這里插入圖片描述


grub2-mkconfig命令:通過多個腳本文件輔助建立/更新grub.cfg文件

指令格式:grub2-mkconfig -o /boot/grub2/grub.cfg

//grub2-mkconfig本質是分析/etc/grub.d目錄下的文件和/etc/default/grub文件,再通過執行這些文件來建立/更新grub.cfg文件


/etc/grub.d目錄:存儲輔助建立/更新grub.cfg的腳本文件

如:查看/etc/grub.d
在這里插入圖片描述

文件名 作用
00_header 初始化grub2配置 (分析需加載的模塊和屏幕終端的格式等) 通過調用/etc/default/grub來建立/更新grub.cfg文件
01_users 管理gurb2在線編輯
10_linux 分析/boot目錄的所有文件,找到正確的Linux內核、讀取該內核需要的文件系統模塊和參數等; 並將以上這些設置到grub.cfg文件中
30_os-prober 分析並找到其他分區含有的操作系統, 並將這些操作系統寫入到grub.cfg中 以作為啟動選項處理
40_custom Shell文件 root通過配置該文件實現其他選項/需求

//若有其他需配置的選項,都應該通過配置40_custom文件實現,通過配置/etc/grub.d/40_custom可實現功能如下:

//在配置/etc/grub.d/40_custom后都需通過grub2-mkconfig命令使其生效

1)自定義內核:若直接啟動普通內核,可通過grub2-mkconfig獲取10_linux腳本文件而制作;但要帶自定義的內核,就需使用grub2-mkconfig獲取40_custom腳本文件而制作
制作步驟:
(1)從grub.cfg當中復制指定內核選項(menuentry)到40_custom;
(2)在40_custom中配置帶有自定義的內核

2)轉交控制權:通過chainloader實現boot loader控制權的轉交

chainloader(啟動引導程序的鏈接):將控制權轉交給其他boot loader

//所以grub2就不需要識別每個內核的文件名,只將控制權轉交給下一個boot loader或MBR中的boot loader即可

(也不需要識別下一個boot loader的文件系統)

制作步驟:
(1)加載chainloader模塊;

(2)指定轉交至的文件系統;

(3)指定轉交至的硬盤分區;

(4)設置系統去啟動扇區讀取boot loader軟件

如:設置兩個啟動選項,取得Windows 7啟動選項和回到MBR默認環境的選項
1)查看當前MBR設備分區信息
在這里插入圖片描述

2)配置/etc/grub.d/40_custom文件
在這里插入圖片描述

啟動管理

配置grub2完成各個配置文件后,其啟動效果如下:
1)系統啟動時,當進行到該界面時就是已經由grub2管理
在這里插入圖片描述

//設置默認顯示選項,所以可在5個選項中選擇其中一個內核運行

//在該界面按“e”進入對應選項內核的grub2在線編輯,按“c”進入grub提供的shell模式

2)按“e”進入grub2在線編輯后,顯示該界面;上方;grub.cfg文件的內容,可通過方向鍵查看/編輯;下方;編輯說明/幫助
在這里插入圖片描述
//取消當前操作並回到前一個畫面:ESC或Ctrl和C,直接啟動:Ctrl和X

如:在啟動過程以圖形過程顯示,且顯示中文
1)編輯/etc/default/grub文件,並grub2-mkconfig
在這里插入圖片描述
2)再在grub2配置文件的中文,啟動時可顯示如圖
在這里插入圖片描述

grub2用戶:grub2有同Linux的用戶管理架構,其用戶身份分為兩種

//grub2默認允許任何人修改和選擇的,且沒有設置任何用戶身份

//通過grub2用戶管理可實現內核使用和修改的權限配置

1)superusers(管理員用戶):在grub2下具有修改和選擇所有內核的權限

//設置superusers后,所有的命令修改都會成受限制的

2)users(普通用戶):在grub2下僅能選擇指定選項,不能修改任何內核

通過配置/etc/grub.d/40_custom文件實現grub2用戶的管理

//配置/etc/grub2/grub.cfg也可實現grub2用戶的管理(不建議)

如:當前系統配置三個操作系統,分別安裝在(hd0,1)、(hd0,2)和(hd0,3),其中
(hd0,1)是所有人都可使用的系統;
(hd0,2)是僅系統管理員可使用的系統;
(hd0,3)是僅系統管理員和指定用戶可使用的系統

1)配置/etc/grub.d/40_custom文件,並grub2-mkconfig更新grub.cfg文件;
在這里插入圖片描述
//password也可替換為password_pbkdf2(密文密碼)

//若內核配置中加入“--unrestricted”參數代表該內核啟動時不需要grub2的用戶驗證,但進入內核在線編輯時,需grub2的用戶驗證

2)啟動時,多出三個選項
在這里插入圖片描述

grub2-mkpasswd-pbkdf2命令:根據輸入的密碼,生成密文密碼

指令格式:grub2-mkpasswd-pbkdf2

如:將密碼“123456789”加密成密文密碼
在這里插入圖片描述

grub2在線編輯能夠實現修改root密碼和修改系統等對系統影響巨大的功能,所以需要通過設置grub2進入在線編輯驗證登陸,提高系統安全性

//優先級:grub2管理員用戶驗證 > grub2驗證登錄,若/etc/grub.d/40_custom和/etc/grub.d/01_users同時存在驗證登錄,則以/etc/grub.d/40_custom的管理員用戶驗證登錄為准


通過配置/etc/grub.d/01_users文件實現grub2在線編譯的驗證登錄

//也可配置/etc/grub.d/00_header實現,但該文件較為重要(不建議配置)

//由於/etc/grub.d目錄下的文件都是被其他腳本所執行的文件,所以不能直接寫入用戶名和密碼,而是通過cat和echo等命令將用戶名和密碼寫入到文件中

如:配置grub2在線編輯驗證登錄用戶名為“mwl3”,密碼為“123456789”
1)配置/etc/grub.d/01_users文件;
在這里插入圖片描述
2)重啟再次進入grub2在線編輯模式時
在這里插入圖片描述

修改root密碼

通過grub2在線編輯功能實現root密碼的修改,步驟:

1)在grub2選項界面時,按“e”進入在線編輯;

//若grub2設置密碼,輸入密碼進入

2)在內核參數設置中添加“rd.break”內核參數;
在這里插入圖片描述

3)按下“Ctrl和X”,等待系統進入rd.break系統狀態(緊急救援模式);
在這里插入圖片描述

4)輸入以下指令:

掛載/sysroot目錄:mount -o remount,rw /sysroot

切換到實際系統的根目錄:chroot /sysroot

修改root密碼:echo “root密碼” | passwd --stdin root

恢復SELinux上下文:touch /.autorelabel

退出系統實際目錄:exit

重啟:reboot

在這里插入圖片描述

//由於autorelabel使系統重新寫入每個文件的SELinux類型,所以啟動時間較長


chroot命令:切換系統根目錄為指定目錄

指令格式:chroot 掛載目錄

修改root密碼的步驟原理:

1)rd.break內核參數可使系統進入RAM Disk操作系統狀態(擁有root權限);此時,所有的目錄都屬於RAM Disk(原系統根目錄掛載在/sysroot目錄下);

2)需要將/sysroot目錄掛載,並具有可讀寫權限;用chroot命令切換到/sysroot目錄下,並修改root密碼;

//切換到原系統根目錄下,就可處理原系統的文件系統和用戶管理等

3)由於在rd.break系統狀態下,系統不具有SELinux功能,而修改root密碼導致/etc/shadow文件的SELinux安全上下文被取消,就需通過/.autorelabe使系統在啟動時使用默認的SELinux類型重新配置每個文件的SELinux安全上下文

//若不恢復該文件的SELinux安全上下文會導致啟動無法正常啟動


另一種恢復SELinux安全上下文步驟:

1)在rd.break系統狀態下,修改root密碼后,修改SELinux的運行模式為“permissive;

2)重啟,以root身份登錄系統並輸入“restorecon -Rv /etc”恢復/etc目錄下所有文件的SELinux安全上下文

3)再將SELinux的運行模式改為Enforcing


另一種修改root密碼的步驟:

1)在grub2選項界面時,按“e”進入在線編輯;

2)在內核參數設置中添加“init=/bin/bash”內核參數;

//系統提供一個bash,同時不需輸入root密碼也具有root權限

由於是默認bash環境,其PATH僅有/bin(也沒有Syetemd或init),所以在執行各種命令時,需輸入絕對路徑

3)輸入以下指令:

掛載/目錄:mount -o remount,rw /

修改root密碼:echo “root密碼” | passwd --stdin root

恢復SELinux上下文:touch /.autorelabel

重啟:硬件強制重啟(斷電)

//Linux不能隨意關機,容易導致文件系統錯亂或某些服務無法啟動


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM