Centos7.4 修改Root密碼
1.修改思路
systemd 的管理機制中,rescure 模式和 emeryency 模式是無法直接取得 root 權限的,需要使用 root 密碼才能進入 rescure 和 emeryency 環境。所以我們需要通過其他方式來設置 root 密碼。我們可以為內核的啟動指定 "rd.break" 參數,從而讓系統在啟動的早期停下來,此時我們可以通過使用 root 權限並結合 chroot 命令完成設置 root 密碼的操作。
下面我們一起來看具體的操作過程。
在系統啟動過程中進入開機菜單時按下字母鍵 e 進程開機菜單的編輯模式:
這就是系統的開機菜單,按下 e 後進入編輯界面:
找到以 "linux16 /vmlinuz-" 開頭的行。如果默認沒有看到該行,需要按向下鍵把它滾動出來。
然後定位到該行結尾處,輸入一個空格和字符串 "rd.break",如下圖所示:
接著按下 ctrl + x 以該設置繼續啟動,啟動過程中操作系統會停下來,這是系統啟動過程中的一個非常早的時間點:
所以系統的根目錄還掛載在 RAM disk 上(就是內存中的一個文件系統),我們可以通過 mount 命令檢查系統當前掛載的文件系統,下面是我們比較關心的兩條:
上圖中 mount 命令輸出的第一行說明此時的根目錄在一個 RAM disk 中, 即 rootfs。
/dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr2,inode64,noquota)
而在我們正常登陸系統的情況下,系統根目錄的掛載情況如下:
/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
重新進入登陸界面時就可以使用剛才設置的密碼以 root 登陸了!
Centos7.4 修改Root密碼