systemd 的管理機制中,rescure 模式和 emeryency 模式是沒法直接取得 root 權限的,須要使用 root 密碼才能進入 rescure 和 emeryency 環境。因此咱們須要經過其餘方式來設置 root 密碼。咱們能夠爲內核的啓動指定 "rd.break" 參數,從而讓系統在啓動的早期停下來,此時咱們能夠經過使用 root 權限並結合 chroot 命令完成設置 root 密碼的操做。
下面咱們一塊兒來看具體的操做過程。node
在系統啓動過程當中進入開機菜單時按下字母鍵 e 進程開機菜單的編輯模式:linux
這就是系統的開機菜單,按下 e 後進入編輯界面:
centos
找到以 "linux16 /vmlinuz-" 開頭的行。若是默認沒有看到該行,須要按向下鍵把它滾動出來。
而後定位到該行結尾處,輸入一個空格和字符串 "rd.break",以下圖所示:app
接着按下 ctrl + x 以該設置繼續啓動,啓動過程當中操做系統會停下來,這是系統啓動過程當中的一個很是早的時間點:ide
因此係統的根目錄還掛載在 RAM disk 上(就是內存中的一個文件系統),咱們能夠經過 mount 命令檢查系統當前掛載的文件系統,下面是咱們比較關心的兩條:操作系統
上圖中 mount 命令輸出的第一行說明此時的根目錄在一個 RAM disk 中, 即 rootfs。
圖中輸出的第二行說明咱們的文件系統此時被掛載到了 /sysroot 目錄,而且是隻讀的模式:code
/dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr2,inode64,noquota)
而在咱們正常登錄系統的狀況下,系統根目錄的掛載狀況以下:blog
/dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
該時間點的最大優點是咱們具備 root 權限!因此讓咱們開始設置新的 root 密碼吧。進程
先經過下面的命令把 /sysroot 從新掛載爲可讀寫的模式:內存
switch_root:/# mount -o remount,rw /sysroot
而後用下面 chroot 命令把根目錄切換到咱們原來的環境中:
switch_root:/# chroot /sysroot
用下面的命令爲 root 用戶設置新的密碼:
sh-4.2# echo "new_root_pw" | passwd --stdin root
接下來還要處理 SELinux 相關的問題。因爲當前的環境中 SELinux 並未啓動,因此咱們對文件的修改可能形成文件的 context 不正確。爲了確保開機時從新設定 SELinux context,必須在根目錄下添加隱藏文件 .autorelabel:
sh-4.2# touch .autorelabel
最後從 chroot 中退出,並重啓系統:
sh-4.2# exit switch_root:/# reboot