SDB:回復 root 密碼

Jump to: navigation, search

設定 root 密碼

如果您遺失了您的 root 密碼,您可以按照以下的步驟重設它。然而,對於有些使用開機載入器 (boot loader) 密碼保護的系統而言,您還需要知道該密碼才能進行回復。若開機載入器被密碼所保護,您需要以其他開機媒體來開機,如 openSUSE CD/DVD/mini-boot。openSUSE 安裝光碟可能是最佳選擇。


CD/DVD 救援模式

若使用 CD/DVD 等開機媒體,您需要選擇救援模式,取得 root 權限後,接著手動掛載磁碟。舉例來說,一個康柏 (Compaq) 的磁碟陣列控制卡,其裝置檔案可能是 /dev/ida/c0d0;而一個 IDE 磁碟則為 /dev/hda。使用 fdisk /dev/ida/c0d0 或是 fdisk /dev/hda 來印出分割區的資訊 (輸入 "p" 並跳出程式),然後掛載您需要的分割區。

mount -o remount,rw /dev/sda2 /mnt
# cd /mnt
# chroot /mnt
# passwd

對於 10.3 的版本,您需要執行額外的步驟:

開機至救援模式,找出 root 分割區,假設為 hdxy (或是 sdxy):

mount /dev/hdxy /mnt
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt

現在您已經是 root 了,您可以執行 passwd,也可以執行 YaST。

在上述指令中,"bind" 可以使同一個檔案系統掛載到二個以上的掛載點。

如以上方式都行不通,可以考慮將該磁碟機抽出(或是安裝其他磁碟機到該台機器),然後使用其他執行 Linux 的機器來掛載它。最後再按照前述的步驟回復 root 密碼。


單人模式

您可以嘗試開機進入單人模式,然而這可能不一定行得通,主要是因為您的系統可能被設定成需要 root 密碼才能夠進入單人模式。若是如此,我們可以在開機前設定將 /bin/bash 取代 init。

首先,嘗試進入單人模式。若 LILO 或 GRUB 的開機畫面未出現,可試著鍵入 CTRL-X 來進入開機畫面。若是 LILO,只需鍵入 "linux single" 即可 (假設 "linux" 是一個 LILO 標籤)。若是 GRUB,先鍵入 "e",然後選擇 "kernel" 設定行,再鍵入 "e",在該行的最後加入 " single" (或是 " 1",請注意前面的空格)。編輯完成後按下 ENTER,然後鍵入 "b" 以使用該設定來開機。(新版本的 GRUB 使用 "a" 來新增內容至目前的設定行)

進入單人模式開機後,您應該會看到正常的開機流程,直到它停在一個 bash 的提示符號。如果您看到 "Give root password for system maintenance" 字串,這表示前述的方法行不通,請看下一節所敘述的另一個方法。

如果您可以看到命令提示符號,這時根檔案系統 (/) 可能尚未掛載為可讀寫模式 (雖然 "mount" 指令輸出可能顯示為可讀寫 )。請先輸入以下指令:

mount -o remount,rw /

若該指令行不通,輸入 "mount" 指令找出 "/" 是掛載在那裡。假設它被掛載在 /dev/sda2,您可以輸入:

mount -o remount,rw /dev/sda2

若以上指令執行成功,輸入 "passwd" 指令來修改您的密碼。或是修改 /etc/shadow 檔案來移除其中的密碼欄位。在文字編輯器中移動游標到第一個 ":",然後移除所有到下一個 ":" 之間的內容。以 vi 為例,鍵入 "/:"來移動到第一個 ":",按下空白鍵,再鍵入 "d/:" 再按下 ENTER。編輯器會警告您正在修改一個唯讀檔,這是正常的。在您移除密碼之前,/etc/shadow 可能長這個樣子:

root:$1$8NFmV6tr$rT.INHxDBWn1VvU5gjGzi/:12209:0:99999:7:-1:-1:1074970543
bin:*:12187:0:99999:7:::
daemon:*:12187:0:99999:7:::
adm:*:12187:0:99999:7:::

移除密碼後,前幾行應該如下所示:

root::12209:0:99999:7:-1:-1:1074970543
bin:*:12187:0:99999:7:::
daemon:*:12187:0:99999:7:::
adm:*:12187:0:99999:7:::

您需要將修改強制寫入,以 vi 來說,即是鍵入 ":wq!"。(如果行不通,表示根檔案系統仍在唯讀模式,您需要執行如上述的 "mount -o remount,rw" 指令)


INIT or /bin/bash mode

另外一個技巧則是加入 "init=/bin/bash" 核心參數 (對 LILO 而言則是 "linux init=/bin/bash" 或是將該內容加在 GRUB 的 "kernel" 設定行的最後)。如此您可以不需經過單人模式的開機流程就可開始輸入指令。您將需要執行 "mount -o remount,rw",且在這個時候其他檔案系統尚未掛載,是故當您需要時,您必須手動掛載它們。您可以參考 /etc/fstab 來得知要掛載的裝置名稱。

請注意如果您的 Linux 機器是放置在公開場合,若沒有適合的保護,要回復遺失的 root 密碼通常也不會太困難;但這也代表其他人可以輕鬆地更改它,或是在無法取得您個人資訊的情況下,獲得 root 的權限。