前陣子有客戶因為接手一個燙手山芋的案子,突然要負責管理十多台伺服器,其中包括 FreeBSD, Debian, CentOS 等各式不同的作業系統,最詭異的地方是,他們交接伺服器的時候原廠商竟然不願意提供 root 密碼給他們,客戶就在一個伺服器完全被隔離的情況下完成了交接程序,拿到的就是十多台還正常運作的實體機器,但登入不了,也因此客戶特別聘請我到現場緊急救援,希望能幫他們完成重設 root 密碼,如此特殊的需求,我還真第一次遇到,在此特別公開在不同 Unix-like 作業系統之間 root 密碼重設的標準作業流程!
到機房之前,我原本想說 Linux 重設密碼非常簡單,進入 單人模式 (Single-user mode) 就能免密碼登入並進行重置,但是實際進行 root 密碼重置時卻發現不同平台有不同的特性,而且 Debian、CentOS、FreeBSD 這 3 種作業系統的密碼重置步驟都不太一樣,而且有些還用手機辛苦查了好幾篇文章才找到解決方法,也因此特別做了筆記,希望以後永遠都不要再用到。XD
如何重設 Ubuntu 的 root 密碼
標準作業流程:
- 進入 GRUB 開機選單,選擇有 (recovery mode) 的開機選項,選取後按下 Enter 即可
- 進入 Recovery Menu 之後,選取 root - Drop to root shell prompt 即可立刻免密碼以 root 身份登入
- 接著就可以重置 root 密碼了
如何重設 CentOS 的 root 密碼
標準作業流程:
- 進入 GRUB 開機選單,選擇預設的開機項目即可,直接按下 e 進入開機參數編輯視窗
- 找到 kernel 開頭的這一行(通常在第二行),並按下 e 編輯這一行
- 在此行最後面加上一個空白字元與 single 字串,並按下 Enter 鍵確定並回到 GRUB 開機選單
- 最後按下 b 開機,接著即可免密碼以 root 身份登入 shell
如何重設 Debian 的 root 密碼
雖然 Linux 重置密碼的步驟差不多,但是使用 Debian 時就算以單人模式開機,使用者還是必須要輸入 root 密碼才行,所以使用這個方式並無法進入 shell 環境重置密碼,以下才是正確的 root 密碼重置流程!
標準作業流程:
- 進入 GRUB 開機選單,選擇預設的開機項目即可,直接按下 e 進入開機參數編輯視窗
- 找到 kernel 開頭的這一行(通常在第二行),並按下 e 編輯這一行
- 在此行最後面加上一個 single init=/bin/bash 字串 (如下圖),並按下 Enter 鍵確定回到 GRUB 開機選單
- 最後按下 b 開機,接著即可免密碼以 root 身份登入 shell
- 進入 shell 之後是無法變更密碼的,因為此時檔案系統預設是「唯讀」的!
因此必須重新掛載硬碟才能開始改密碼,其指令如下:
以下是上述第 3 步的圖示:
如何重設 FreeBSD 的 root 密碼
標準作業流程:
- 進入開機選單,選擇單人模式開機
- 進入 shell 之後是無法變更密碼的,因為此時檔案系統預設是「唯讀」的!
因此必須重新掛載硬碟才能開始改密碼,但其指令跟 Debian 並不相同,其指令如下:
註:以下是我當時在機房拍下的畫面,也就是檔案系統是唯讀的情況下變更密碼失敗的畫面:
相關連結