前天聚餐的時候一航和啟飛學長講到RUCTF中更改root密碼要進入單用戶模式,我插了一句“有的系統顯示的是救援模式”,說完后心里一直很虛。。。(技術上的事還是想好再說)今天查了一下文檔,大致弄明白了救援模式(Rescue Mode)、單用戶模式(Single-User Mode)、緊急模式(Emergency Mode)的區別了,分享一下;)
-----------------------------------------------------------------
1.runlevel:
一句話:運行級別指的是Linux等類Unix操作系統下不同的運行模式。
運行級別通常分為7等,分別是從0到6,但如果必要的話也可以更多。運行級別決定了計算機啟動后的運行環境,根據Linux Standard Base,標准的運行環境可以分為7個:
0 Halt Shuts down the system.
1 Single-user mode Mode for administrative tasks.(注意這里,說明系統返回的shell有root權限)
2 Multi-user mode Does not configure network interfaces and does not export networks services.
3 Multi-user mode with networking Starts the system normally.
4 Not used/user-definable For special purposes.
5 Start the system normally with appropriate display manager (with GUI) Same as runlevel 3 + display manager.
6 Reboot Reboots the system.
2.什么情況下要進入Rescue/Single-User/Emergency Mode?
一句話:無法正常由磁盤進入normal user mode(runlevel 3或5)
例如:
GRUB被(微軟)摧毀了;)
某些硬件驅動文件損壞(比如nouveau)
密碼忘了
3.三者的區別(這里參照的是RedHat系列的文檔)
一句話:單用戶模式是一個runlevel,我們可以在這里用具有root權限的shell更改root密碼。至於怎么進入單用戶模式有很多種,例如在磁盤boot文件損害時從其他介質啟動(救援模式)。至於緊急模式,則是在init文件都損壞的情況下使用(也具有root權限),此時獲得的環境最簡單(重啟都得靠拔電源)。
單用戶模式:
在單用戶模式,電腦為開機進入runlevel 1,本機檔案系統已經被掛載,不過您的網路尚未啟動,您可以使用一個系統維護的 shell。單機使用者模式與救援模式不同,它會試着自動掛載檔案系統,如果您的檔案系統無法被成功掛載,請勿使用單機使用者模式。而且如果系統上的執行層級 1 的設定已經毀損,您也無法使用單機使用者模式。
救援模式:
救援模式能讓使用者由光碟(或其它開機方法)啟動基本的 Red Hat Enterprise Linux 環境;而不是藉由系統硬盤來啟動。在正常操作中,Red Hat Enterprise Linux 系統會使用硬盤里的檔案來進行所有工作 — 執行程式、儲存檔案等等。然而,在某些情況下,Red Hat Enterprise Linux 會無法完整存取系統的硬盤。透過使用救援模式,即使您無法由某個硬盤執行 Red Hat Enterprise Linux,您依然能夠存取儲存在該硬盤上的檔案。總之,救援模式就是從其他介質啟動(能夠自己選擇掛載的分區),從而獲得一個runlevel(如果按照流程,會進入level1的單用戶模式)。
緊急模式:
在緊急模式中,您是開機進入盡可能最小的環境中。根目錄檔案系統將會被掛載為僅能讀取,而且將不會做任何的設定。比起單機使用者模式,緊急模式最主要的優點是並不載入 init 檔案。因此當 init 檔案毀損或無法使用時,您仍然可以掛載檔案系統以回復重新安裝階段中遺失的資料。
注:現在的centos7取消了使用多年的 SystemV 的服務管理方式,也就是說,從這一版開始,已經沒有所謂的“執行等級 (run level) ”的概念了。新的管理方法使用的是 systemd 的模式(systemctl而非init),這個模式將很多的服務進行相依性管理。
-----------------------------------------------------------------
回到更改密碼的問題上來,顯然,如果用rescue mode獲取環境,需要使用mount和chroot掛載根目錄並更換當前根目錄后然后使用passwd命令更改密碼。如果能直接用單用戶模式的環境,則可以直接更改密碼。至於緊急模式,不推薦使用(網上有人說的,不清楚),因為很多基礎服務未加載,強制重啟后可能會有問題。
所以說,下次有人問忘記了root密碼該怎么辦,最准確的回答是“找一個能獲得root權限shell的mode並將根目錄切換到磁盤的根目錄下執行passwd命令並注意SElinux上下文的保存”(好吧這有點繞。。),最正確/簡單是回答是“單用戶模式”。
參考:
Runlevel --> https://en.wikipedia.org/wiki/Runlevel
Linux Standard Base --> https://en.wikipedia.org/wiki/Linux_Standard_Base
Basic System Recovery --> https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/ap-rescuemode.html#s1-rescuemode-booting-single