RedHat Linux口令恢復任我行

一隻小螞蟻吆發表於2020-04-06

有許多原因可能導致使用者口令的遺失,這對系統管理員而言,可能不是一個問題,只要以Root賬號登入,再用Passwd命令更改使用者口令就可以了。可是,如果丟失的是Root口令,這又怎麼辦?難道就束手無策、重灌系統?這樣不僅費時費力,而且還可能造成重要資料的丟失和應用程式的破壞。顯然這種做法並不可取。


  
  其實,恢復Linux口令並不是一件很難的事情。Linux口令的恢復有2個方面: 一是給使用者產生一個新的口令,使使用者能夠重新登入系統; 二是找出使用者原來的口令,而不是以新口令代替舊口令。一般情況下,使用者只希望能夠再次登入進入系統即可,而不是獲得原口令,也就是這裡所說的第一個方面,相對而言,這方面要容易實現得多。

  Linux口令的恢復是系統維護的一種典型情況,本文中提到的一些方法從系統維護的角度出發,不僅適用於Linux口令的恢復,也適用於因為某些原因不能正常登入進系統時的維護工作,對Linux系統的管理維護有參考作用。

  本文中所有提到的恢復Linux口令的方法均在實踐中測試通過,所用的Linux系統主要是RedHat Linux For x86,在實際口令恢復中,可能因Linux發行商、發行版本、處理器和硬碟等的不同而略有不同,但相差不會很大。其中一些方法也適用於其他Unix系統口令的恢復,甚至Windows等作業系統口令的恢復。

  一、口令恢復途徑

  下面恢復Linux口令的途徑適用於不同的情況,難易度各有不同。

  1. 緊急修復模式
  在無法啟動Linux時,常常需要通過磁碟、光碟或其他方法啟動Linux基本環境,進入Linux緊急修復模式。在緊急修復模式下,能夠訪問硬碟上的Linux系統檔案,恢復系統正常,包括恢復口令等。

  2. 單使用者模式
  Linux有多個執行級別,如單使用者模式、無網路服務多使用者模式、完全多使用者模式和X11圖形多使用者模式等執行級別。單使用者模式是指系統執行在惟一使用者——Root使用者模式下,進入此模式時,系統只是載入了可執行的最低軟硬體配置,以Root直接進入,沒有口令驗證。

在單使用者模式下,可以用passwd命令來更改使用者口令,也可以直接對/etc/passwd等賬戶口令檔案進行讀寫,達到口令恢復的目的。

  3. 修改口令檔案
  Linux口令檔案有2種儲存形式: 一種是把賬戶資訊和經加密後的口令密文都儲存在/etc/passwd檔案中,此形式不夠安全,在早期Unix中採用;另一種是把賬戶資訊和口令密文分開存放,/etc/passwd檔案用於儲存賬戶資訊,/etc/shadow檔案用於儲存口令密文。至於採用何種儲存形式和加密演算法,可以用/usr/sbin/authconfig程式來設定。

  對於沒有shadow的passwd檔案,只要把相應賬戶的口令欄位刪除,即可不經口令驗證直接登入系統,例如某passwd檔案的root賬戶如下:
  root:$1$dPTzzYkE$Zd3Vs6yCu
  VH8RC1gwKXX01:0:0:root:/root:/bin/bash

  將其修改為:
  root::0:0:root:/root:/bin/bash
 
  如果是有shadow的passwd檔案,其口令欄位以“x”字母代替,口令密文儲存在Shadow檔案中。可以刪除passwd檔案中的“x”字母,或者刪除shadow檔案中的口令密文,都可以使相應使用者不經口令驗證直接登入系統,達到口令恢復的目的。

  4. 口令還原
  有些情況下,想找出被丟失的原始口令,而不是登入系統去產生一個新的口令。但是,Linux使用的是DES(加密函式式是Crypt)或MD5(函式式是Md)加密演算法,由於計算量之大,它們幾乎都沒有可能被逆向破解。DES口令密文是有13個ASCII字元的字串,而MD5口令密文的啟始字元總是“$1$”。

  雖然很難逆向破解,但要通過口令密文找出原始口令也不是不可能的,從一個字典或一些字元的排列組合中提取字串,提取出來的字串用同樣的加密演算法加密,將產生的密文與口令密文比較,如果一致則表明該字串即為原始口令,從而達到口令還原的目的。如果口令很複雜,使用此種方法也是很難找出原始口令的,但使用者對自己口令的長度、採用的字元等會有大致的印象,這使得成功的可能性會更大。

  破解Linux口令的工具有很多,如John the Ripper、Crack by Alex Muffett和Cracker Jack等等,其中John the Ripper的功能最為強大,速度也最快。

5. 系統攻擊破解
  如果能夠關閉電源重新啟動系統,那麼很容易恢復口令,但有時Linux系統上執行著非常重要的服務,不能直接關閉電源,否則會對系統和資料產生破壞。

  像這種在系統執行的情況下獲得系統口令,往往是比較困難的,但由於系統管理員對作業系統和應用程式的版本、配置等情況有著全面的瞭解,加上沒有防火牆和入侵檢測系統等的防護,那麼發現和利用系統漏洞的機會還是不少的,口令恢復的成功機會還是有的。
 
  這方面涉及的內容太複雜,在此就不多做介紹了。如果確有這方面的需求,最好由專業人士來幫忙,以免破壞系統和資料。

  二、如何進入緊急修復模式

  由於軟硬體故障、錯誤配置等多種原因無法啟動Linux時,需要進入緊急修復模式,有可能解決問題,至少也能拷出重要檔案。

  進入緊急修復模式的方法並不複雜,在boot提示符下輸入如下引數:
  boot: linux rescue

  通過如下方法可以得到Boot提示符。

  用Linux隨盤發行的或由boot.img檔案寫成的安裝引導軟盤引導系統,通常這需要緊急修復盤或安裝光碟或者硬碟上的ISO檔案配合使用才能引導進入緊急修復模式。緊急修復盤可由rescue.img檔案寫成或隨盤發行。在RedHat Linux 6.1以後,RedHat不再提供緊急修復盤(安裝光碟image目錄下也沒有rescue.img檔案用來寫),而是把它直接做在安裝光碟上。

  用安裝光碟引導系統。

  用bootnet.img檔案寫成的網路引導盤或pcmcia.img檔案寫成的PCMCIA引導盤引導系統,此方法先要確保網路連線正常,並且需要確定網路主機和傳輸型別。
  
  RedHat Linux 7.2及其以後的版本,可以選擇是否要把安裝在硬碟上的Linux自動嘗試載入到目錄/mnt/sysimage下,否則,要用mount命令手工載入。

簡單幾步,就進入了緊急修復模式。提示符呈現在虛擬控制檯VC 1和VC 2上,以便執行命令維護系統。用Ctrl+Alt+F1鍵切換到VC1,用Ctrl+Alt+F2鍵切換到VC 2。

  如果選擇了自動載入,用chroot命令,使當前操作環境變為欲修復的Linux,之後可用passwd命令直接更改使用者口令:
  bash#chroot /mnt/sysimage

  如果沒有自動載入,就需執行mount命令載入Linux分割槽,並輸入如下命令:
  bash#mount -t ext3 /dev/hda5 /foo

  目錄/foo是由使用者自己建立的,/dev/hda5是我們欲載入的Linux分割槽,如果分割槽型別是ext2,那上面命令列中就以ext2代替ext3。

  至此,就可以用chmod、vi、fsck等命令讀寫檔案、維護系統,包括修復口令。

  三、如何進入單使用者模式

  與緊急修復模式只能載入本機Linux上的檔案系統不同,單使用者模式是在本機Linux核心引導啟動後進入的一個執行級別(執行級別是1),可以做核心升級、裝置安裝等維護工作。在系統維護時,系統管理員往往要進入單使用者模式來維護系統,進入緊急修復模式是在Linux不能啟動時不得已而採用的系統維護方法。

  Linux核心自行啟動之後,通過啟動程式init來完成自己的引導過程,所以,init程式始終是第一個程式,程式編號始終為1。Init程式有著許多重要的職責,如啟動Getty、實施執行級別和呼叫子程式等,是Linux系統中必不可少的程式之一。

  下面提到的進入單使用者模式的方法,實質都是向init程式請求執行級別1,達到進入單使用者模式的目的。

  1.Init程式
  系統正在執行時,在命令列上用程式Init可以更改執行級別(/sbin/telinit只是程式Init的符號連結,同樣可以使用),進入單使用者模式用如下命令:
  #init 1

  因為是在一個正在執行的系統上,且只有Root使用者才有許可權執行Init命令,所以此種方式雖然在系統維護時經常用到,但對口令恢復的意義不大。

     操作方法:在進入grub引導介面時,請輸入e,再選中第2行輸入e,在最後輸入1
    使用單使用者級別。回車 按b,進入單使用者模式,然後再改配置檔案

2. 修改預設執行級別
  /etc/inittab檔案是系統執行級別的配置檔案,每當啟動init程式時,init程式都會讀取/etc/inittab檔案中的相應配置並執行。

  在Linux系統啟動時,/etc/inittab檔案中有如下一行指定了預設的執行級別,通常的執行級別是3或5。
  id:3:initdefault:

  要使系統啟動後進入單使用者模式,只要把上面一行中的3改為1就可以了。
  id:1:initdefault:

  3. 啟動盤引導
  在Linux系統啟動時,Init讀取/etc/inittab配置進入預設執行級別,但也可以為核心指定一個啟動引數,核心將依此引數設定特定裝置和環境變數等,對於不能接受解釋的引數將傳遞給核心啟動後的第一個程式,即Init程式,Init程式據此引數啟動進入非預設執行級別,如指定引數為1或single進入執行級別1,即單使用者模式。核心啟動引數的指定可通過在系統啟動軟盤、多重啟動管理器或程式Loadlin等的執行過程中指定。

  在系統維護或核心更新時,常用到當前Linux系統的啟動盤,在系統安裝時會提示使用者製作一張啟動盤,在系統安裝完成後也可以製作,下面是一個簡單示例。

  在軟碟機中放入軟盤,用uname命令檢視系統核心版本號,然後用Mkbootdisk命令建立引導盤,輸入的命令如下:
  #uname –r
  2.4.7-10
  #mkbootdisk –device /dev/fd0 2.4.7-10

  以啟動盤引導,在boot提示符下以“linux ”的語法形式輸入如下引數之一,即可引導進入單使用者模式如下:
  boot: linux 1
  boot: linux single

  4. 多重啟動管理器
  多重啟動管理器是一個能在系統啟動時用來選擇載入某個作業系統的載入程式,它可以載入作業系統的核心和初始化作業系統(如Linux或FreeBSD),或者把引導權交給作業系統(如DOS或Windows)來完成引導。Intel相容PC機上的多重啟動管理器有LILO和GRUB等,Alpha PC機上使用MILO,Sparc相容的工作站是用SILO。

在多重啟動管理器中為Linux核心指定啟動引數引導進入單使用者模式。以Intel相容PC機上的Linux為例,如果安裝的是LILO,在LILO引導畫面,按Ctrl+X鍵切換入命令列,在LILO提示符下輸入與啟動盤引導Boot提示符下相同的引數之一,即可引導進入單使用者模式:

  在RedHat Linux 7.2以後,多重啟動管理器開始用GRUB代替LILO,它比LILO具有更多的優勢,是LILO的替代品。下面是GRUB引導進入單使用者模式的過程。

  在出現GRUB引導畫面時,按字母e鍵,進入GRUB編輯狀態。
  按↑鍵或↓鍵選擇相應的引導項,並再接字母e鍵進入命令列編輯。
  在出現的命令列上新增“1”或single,並按鍵,返回GRUB編輯狀態。
  按字母b鍵,引導進入單使用者模式。

  從上可以看出多重啟動管理器對Linux系統啟動和維護的重要性,所以建議在安裝Linux時也安裝好多重啟動管理器,便於將來系統的維護,哪怕是主機上只安裝了Linux一個作業系統。

  5. loadlin引導
  loadlin是一個能在DOS下啟動Linux核心的裝載程式,可從DOS引導進入Linux或安裝Linux系統等。如果沒有安裝多重啟動管理器或者配置有誤不能進入Linux的話,常常會用到這個程式。

  在loadlin的啟動命令中新增single引數就可以進入單使用者模式。如果主機上安裝有Windows 9x系統,在系統啟動時按F8進入MS-DOS,執行loadlin程式引導進入單使用者模式。下面是一次啟動例項,該主機上沒有安裝Windows 9x,也沒有安裝DOS。

  以Windows 98安裝光碟引導啟動,在“Microsoft Windows 98 Startup Menu”上選擇第2項:“start computer with CD-ROM support.”。

  進入MS-DOS後,在光碟機中換入RedHat Linux安裝光碟。

  在命令列上分別輸入如下命令引導Linux單使用者模式,假設Linux根檔案系統在分割槽/dev/hda5上:
  A:>d:
  D:>cd dosutils
  D:DOSUTILS>loadlin autobootvmlinuz root=/dev/hda5 ro single

在啟動盤引導的boot提示符下,在LILO和GRUB等啟動管理器的命令列下,以及在Loadlin程式上都可以配置很多引數引導進入系統,對系統維護很重要,可以參考BootPrompt-HowTo。

  上面提到的方法,都需要對/etc/passwd、/etc/inittab等Linux檔案進行讀寫,但在正常情況,只有root使用者登入進去才可以讀寫。那麼在不能正常登入進系統時,又如何能對這些檔案進行讀寫呢?

  除了可以在緊急修復模式、單使用者模式下讀寫Linux檔案外,採用下面的方法也不失為良策:

  通過Linux系統軟盤引導啟動,就能進入Linux系統;

  通過Linux系統光碟進入,如DemoLinux;

  在DOS/Windows下讀寫Linux檔案,幾乎所有版本的DOS/Windows都不提供對Linux檔案系統的支援,但藉助不少軟體可以實現,如FSDext2、Ext2fsnt、Ext2ifs、Ext2 tools、Ltools和Explore2fs等,還有Microsoft IFS Kit; 通過第二硬碟。

  上面提到的種種Linux口令恢復方法,讀者可以結合自己的實際情況,選擇一種最簡單易行的方法來恢復自己的Linux口令。從中可以看出,他人通過在本地重啟系統很容易獲取Linux口令,所以為了加強系統安全,有必要在啟動管理器(如LILO和GRUB)及BIOS中設定口令,使他人不能輕易得逞,更重要的是加強安全管理工作。

相關文章