System Recovery - Linux

剛好最近無聊在研究如果碰的到實體機器
但卻沒有帳密 或是忘記帳密時
有沒有什麼手段可以進去系統改掉密碼

起初是研究 windows 該怎麼辦到
後來想說連 linux 一起研究
於是就產生了這篇

直接進入主題

這次使用的測試環境如下

  • Debian 12.8
  • GNU GRUB 2.06 (其實就是系統裝起來預設自帶的)

首先開機進入 grub 畫面

按照底下敘述
e 可以進入編輯模式

接著滑到最下面有一條 linux 的欄位

根據 grub 官方文件 可以知道後面需要傳遞 linux kernel image 以及相關參數
詳細資訊可以從 kernel.org 官方文件 查詢

我們目前只需要知道 ro 代表之後啟動的系統掛載起來是唯讀
因此需要改成 rw 才可以更動系統內的檔案

接著要多一個參數 init 在最尾部
這是控制啟動系統後要載入的程式
直接設定成 /bin/bash 就好

最後按 ctrl + x 即可用這次變更的設定檔進入系統
成功後會長這樣

這邊要注意
如果維持 ro 進入系統的話
會無法進行任何修改

有正確掛載進可寫的系統應該要可以如下

我們可以看到系統內有 rootuser 兩個使用者

這邊就拿 root 忘記密碼的情境示範
嘗試修改 root 密碼為 root2 並且進入系統

最後記得打個 sync 讓更動確定寫回 file system
因為在這個狀態下的系統非常陽春
沒有太多其他的底層維護 daemon 介入
因此需要盡量保證系統穩定

最後就可以直接重開機啦
但是會發現打了 reboot 卻噴 error

原因是我們在最一開始 grub 啟動的時候
是直接用 /bin/bash 進入的
並沒有讓 systemd 啟動
因此沒辦法維護系統狀態
這邊就需要透過手工對 kernel 送重啟訊號了

首先要啟用 sysrq 的功能
可以參考 kernel.org 官方文件

1 代表啟用全部的功能

1
echo 1 > /proc/sys/kernel/sysrq

然後送 b/proc/syseq-trigger 代表立刻重啟系統

1
echo b > /proc/sysrq-trigger

開機完成正常的系統後
輸入剛剛改過的密碼 root:root2 就成功進入系統了