找回Ubuntu系統密碼的若干嘗試

如何在不知原密碼的情況下修改Ubuntu的密碼,網上有很多方法,這裏我用Ubuntu 14.04進行了一些嘗試,對有可能可行的方法進行總結。

注意:本文涉及的密碼有兩種,一是root密碼,二是能使用sudo命令的用戶密碼,二者是有區別的。在安裝Ubuntu時程序會讓你新建一個用戶,這個系統的第一個用戶便是能使用sudo命令來獲得root權限,此時root是沒有密碼的,因而不能執行su命令。打開/etc/shadow文件便能清楚看到第一行root項表示密碼的第二個字段是!,沒有密碼,而在該文件末尾能找到你安裝系統時所建用戶,該行的第二個字段是較長的已被加密過的密碼,如下圖所示。

一般Ubuntu是不會提示你給root設密碼的,而下文會看到,沒有root密碼的話在存在某種程度的安全隱患。要給root設密碼也很簡單,先用

sudo -i

輸入用戶密碼後能獲得root權限,再用

passwd

就設置root密碼了,設置完成後打開/etc/shadow文件查看首行就能看到表示密碼的第二字段已經是一串已加密的密碼了。下面開始進入正題。

找回密碼的基本原理是:通過各種方法獲得root權限,或把儲存密碼的/etc/shadow文件中root或者能使用sudo命令的用戶(在原先沒有設置root密碼的情況下)表示密碼的第二字段刪除,再用passwd設置新密碼。有如下幾種方法:

1.由Recovery mode 進入修改

啓動電腦進入grub選擇菜單後,對於Ubuntu系統會出現多個啓動項,選擇

Ubuntu Kylin GNU/Linux 高級選項

進入,再選擇

Ubuntu Kylin GNU/Linux, with Linux 3.13.0-36-generic(recovery mode)

進入會給出如下的Recovery Menu:

選擇帶“root”一項進入。此時,會出現兩種情況:

(1)對於原先沒有root密碼的系統會直接獲取root權限,便可以直接進行設置新密碼的操作。由於在此模式下根目錄文件系統掛載爲只讀,所以需要用下面的命令來重新掛載成可讀寫的:

mount -o remount rw -t ext3 /

之後便可直接用passwd設置root密碼或用“passwd 用戶名”修改該用戶密碼。或者編輯shadow文件,刪除相應用戶的密碼,即第一個圖中最後一行(jayson用戶)的第一個分號(:)和第二個分號之間的字段。然後保存重啓即可不輸入用戶密碼直接進入系統,再用passwd設置新密碼。

(2)對於原先已設置了root密碼的系統,此時系統會要求你輸入root密碼已獲得root權限,這裏便可看出root密碼和能使用sudo命令的用戶密碼之間的區別。明顯,這種情況下就幹不掉root密碼了。

2.進入單用戶維護模式修改

進入grub選擇菜單後,在ubuntu的正常啓動項上點“e”進入編輯啓動項模式,得到如下的界面

在倒數第二行有“linux /boot/vmlinuz-...”字樣,把光標移動到“ro”處,把“ro”改爲“rw”(即將只讀掛載直接改成可讀寫,故在進入單用戶模式後就不用再重新掛載根文件系統了),在其後輸入“single”,並將該行剩下部分刪除,即這一行改成:

linux /boot/vmlinuz-3.13.0-36-generic root=...(略寫) rw single

然後按Ctrl-x或F10進行引導,便能進入單系統維護模式,此時也會出現跟上一種方法相同的情況,即原先沒設root密碼的能直接獲得root權限,對密碼進行修改;而對有root密碼的系統仍會要求輸入密碼,仍舊幹不掉原root密碼。

3.略過init進程直接調用bash來修改

這一方法跟上一方法一樣需要進入編輯啓動項,將倒數第二行改爲:

linux /boot/vmlinuz-3.13.0-36-generic root=...(略寫) rw init=/bin/bash

然後按Ctrl-x或F10進行引導,就能直接獲得root權限!無論系統原先是否有設root密碼,即root密碼能直接幹掉了。之後的步驟就跟第一個方法一樣了,直接用passwd修改密碼或修改shadow文件。不過這一方法有個問題就是隻能通過長按關機鍵來強制關機,無法使用“reboot”、“shutdown”、“init 0”等命令重啓或關機,輸入“exit”後直接進入類似於死機的狀態。注意到終端行頭爲“root@(none):/#”,即主機名爲none,這是略過init進程所致,但不知跟無法正常關機重啓是否有關係。

4.用啓動光盤/U盤掛載根目錄修改

工具:一個Ubuntu桌面的啓動光盤或U盤

製作Ubuntu的啓動光盤/U盤的方法百度一下有很多,不細說了。用光盤/U盤啓動,進入Ubuntu桌面,打開終端,輸入命令

sudo -i

這裏不用輸入密碼就能直接獲得root權限,查看Ubuntu的根目錄在哪個分區:

fdisk -l

假設根目錄在/dev/sda4,則將其掛載到/mnt下(如果不確定哪個纔是根目錄的分區就把linux文件系統的分區一個一個試下):

mount /dev/sda4 /mnt

之後的步驟就跟上面的方法一樣了,進入/mnt/etc對shadow文件進行修改,重啓系統用passwd設新密碼。注意:這一方法使用的是啓動光盤/U盤上的試用系統的root,因而只能通過修改shadow文件刪除密碼字段這一途徑來重設密碼,直接用passwd修改密碼是沒有意義的。

總而言之,通過recovery mode和單用戶維護模式來重設密碼只能在系統原先沒設root密碼的情況下才可行(估計應該有不少人沒有設root密碼的習慣),幹不掉root密碼,而繞過init進程直接調用bash或者藉助啓動光盤/U盤上的試用系統則可以幹掉root密碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章