一種完全解決UNIX系統管理員口令被忘記問題的新方案 引言 ----對於廣大的SCOUNIX操做系統管理員來講,最不可原諒的過失之一就是忘記了管理員口令(即超級用戶口令)。這個過失會致使極其嚴重的後果,對此凡是具有UNIX操做系統常識的人都應該知道。然而使人遺憾的是,時至今日鑄錯者依然大有人在。看來,對他們當然要責備,但既然問題客觀存在,咱們就總還須面對現實,想辦法去解決纔是。 ----長期以來,許多人就超級用戶口令被忘記的問題發表了各類見解。一部分人認爲,一旦忘記了超級用戶口令,只能重裝操做系統,此外別無它法。另外一部分人則堅定反對這種"重裝論",他們提出了一些通過成功實踐的解決方案,使得"重裝論"者敗下陣來。如今咱們能夠確定地說,忘記超級用戶口令是有辦法解決的。 ----但同時咱們也不得不認可,現行的解決方案有很大的侷限性,這些侷限性決定了現有方案不管怎樣變化和發展也不可能成爲一種有着強大生命力的最完全的解決方案。 傳統解決方案的侷限性 ----上面已經談到,目前有多種針對超級用戶口令被忘記問題的解決方案。爲了敘述上的方便,本文將這些方案統稱爲傳統解決方案。傳統方案乍看起來彷佛各不相同,但通過認真分析和概括後就會發現,它們實際上大同小異,都有如下共同點: 必須有一套(兩張)EmergencyBootFloppy(緊急啓動軟盤)。這套軟盤均爲文件系統格式,必須在SCOUNIX上製做,而且在不一樣類型機器上製做的緊急啓動軟盤相互不能通用。 用緊急啓動軟盤啓動後,將硬盤根文件系統mount到某個目錄下(通常爲/mnt目錄),而後進入該目錄(即進入硬盤根文件系統的根目錄),修改相關目錄下與超級用戶口令有關的信息(各類方案的不一樣之處主要體現於此)。最後回到軟盤根目錄,拆卸/dev/hd0root,重啓機器。 ----這些共同點實際上反映了傳統方案的侷限性: ----1、操做平臺侷限性:要求自始至終必須在SCOUNIX操做系統平臺上實施。 ----2、操做工具侷限性:對緊急啓動軟盤的依賴性太大。萬一軟盤發生損毀,必須找一臺類型相同的機器再製做一套,這就是前面所說的"專盤專用"的限制。 ----3、操做對象侷限性:必須依靠硬盤根文件系統的支持。即操做者與修改對象(指與超級用戶口令有關的信息)被文件系統隔開,操做者不能直接修改對象,只能調用文件系統提供的服務修改。這種方式本是信息科學中倡導的層次化思想的一種體現,在正常狀況下應予稱道;但任何事物都是有兩面性的,在很是狀況下--諸如解決忘記超級用戶口令這一類問題時--該方式反而有可能帶來麻煩。 ----三大侷限性說明了傳統解決方案可行性的脆弱和狹窄,也決定了它們做爲凌駕於文件系統之上的高層方案所必然具備的弊端。因而,打破這些侷限性,探索出一種全新的解決方案,就成爲了擺在一切UNIX研究者面前的新課題。 新課題 ----所謂新課題,就是找到一種可以突破傳統方案侷限性的新方案。究竟從何處下手呢?讓咱們再來看一看三大侷限性。 ----操做平臺侷限性彷佛很差突破,由於其它操做系統識別不了UNIX的文件系統格式。 ----操做工具侷限性好象就更難了,由於緊急啓動軟盤既要在UNIX上製做,又要在UNIX上使用,因此若是操做平臺侷限性突破不了,它就更突破不了。 ----最後看看操做對象侷限性。操做對象徹底由文件系統管理,操做者必須經過文件系統訪問它們。萬一文件系統崩潰,那麼即便它下面的文件無缺無損,操做者也只能認爲這些文件已所有丟失--由於文件系統沒法訪問(例如mount不上來)。其實這個時候仍是有辦法找到那些文件的,方法就是直接訪問物理硬盤。道理很簡單:就本質而言,文件系統只不過是一個構築於物理硬盤之上的邏輯組織,平時咱們是經過它來訪問物理硬盤的;如今這個組織壽終正寢,不能再爲咱們服務了,因而咱們只好"本身動手,豐衣足食"。直接訪問物理硬盤不但可使文件"失"而復得,並且還有另一個重要意義--突破了操做對象侷限性。 ----操做對象侷限性一旦突破,咱們就會驚奇地發現突破另外兩大侷限性簡直能夠說是瓜熟蒂落了。由於雖然其它操做系統識別不了UNIX的文件系統格式,但在任何操做系統上,咱們均可以訪問物理硬盤;而只要是帶有訪問物理硬盤功能的軟件,均可以成爲咱們的操做工具。 ----如今咱們要作的僅僅是:找一個你們最熟悉的操做系統和一個最易尋覓的能夠訪問物理硬盤的軟件。 ----你們最熟悉的操做系統無疑是DOS。能夠訪問物理硬盤的軟件不少,但最易尋覓的莫過DEBUG.EXE。所謂最易尋覓,是由於DEBUG是DOS自己的一條外部命令,能夠說只要是在安裝了DOS的機器上均可以找到它。對DEBUG略知一二的人可能會指出該命令並無提供訪問物理硬盤的選項,但請不要忘記DEBUG是DOS提供給用戶的一個彙編語言調試程序,咱們徹底能夠利用它編寫、調試和執行一個彙編小程序去訪問物理硬盤。應該說,這對一個可以取得系統管理員身份的人並不困難。 ----綜上所述,在DOS上運行DEBUG來破除UNIX管理員口令,這就是本文提出的解決SCOUNIX超級用戶口令被忘記問題的新方案。 新方案的應用 ----新方案已經提出,下面咱們來看看它是如何應用於實踐的。 ----首先須要指出,因爲文章篇幅和性質的限制,本文不可能將新方案實施過程當中涉及到的全部知識以"入門講座"的方式加以介紹。所以,在閱讀本小節前,讀者應具有下列基礎:熟悉硬盤主引導扇區和UNIX分區及UNIX文件系統的構造(這對UNIX系統管理員來講不成問題)、瞭解中斷13H入口參數含義、使用過DEBUG命令。 ----一臺COMPAQDESKPROXL/466服務器,主板內含PCISCSI-2控制器一個,上接富士通硬盤一隻,該硬盤主要參數爲:1041柱面,64頭,32扇。硬盤上裝有SCOUNIXSystemV/386Release3.2operatingsystemVersion4.2。如今假設其超級用戶口令被忘記。 ----首先,隨便找一臺安裝了DOS的計算機,製做一張DOS系統盤,並在系統盤上拷貝一個DEBUG.EXE文件。 C:\DOS>format/sa: C:\DOS>copydebug.exea: ----而後將該盤插入COMPAQ服務器A驅,開機啓動DOS操做系統,執行DEBUG命令。 A:\>debug ----如今咱們就編寫一段彙編語言程序(如下簡稱app),來讀出硬盤0柱0頭1扇區的內容。該扇區存放的是主引導記錄,讀出它是爲了肯定SCOUNIX分區的起始位置。app是調用中斷13H實現的,之後咱們還要反覆用到它,固然入口參數將隨所讀內容物理地址的變化而變化。 -a 2039:0100MOVAX,0201 2039:0103MOVBX,1000 2039:0106MOVCX,0001 2039:0109MOVDX,0080 2039:010CINT13 2039:010EINT20 2039:0110 -g Programterminatednormally ----如今咱們能夠用"dump"命令查看被讀到內存裏的扇區內容。從偏移11BEH處開始是分區表,其中類型標誌字節爲63H的分區是SCOUNIX分區。該分區起始於1柱面0磁頭1扇。 ----下面,讀出UNIX根文件系統i-node表的第一個扇區,以肯定根目錄的物理位置。 ----根據UNIX分區起始位置可知根文件系統始於2柱0頭1扇。而且,因爲2柱0頭1扇是引導塊,2扇是超級塊,三、4扇爲間隔,因此i-node表一定始於第5扇。 ----咱們用app讀出它(CX的賦值應改成"0205")。 ----讀出後用"dump"命令查看偏移1040H至107FH的64個字節,這就是2號i-node,即 根目錄的i-node。 ----下面咱們就根據i-node計算根目錄在硬盤上的物理地址。 ----咱們從偏移1040H看起: ----ED41H表示文件類型與存取權限爲"drwxr-xr-x"; ----1000H表示文件連結數爲16; ----0000H表示文件屬主ID爲0; ----0200H表示文件組ID爲2; ----80020000H表示文件字節數爲640個; ----DA0500H表示第一個數據塊地址。因爲其它12個數據塊地址均爲0,因此可判定根目錄在硬盤上只佔了一個數據塊。如今咱們必須依據DA0500H計算出這個數據塊存放在硬盤的第幾柱面、第幾磁頭、第幾扇區。計算公式以下: C=TRUNC(P/(H*S)) C1=C0+C H1=TRUNC((P-C*H*S)/S) S1=P-C*H*S-H1*S+1 ----其中: ----C一、H一、S1分別爲數據塊物理地址柱面號、磁頭號、扇區----P等於數據塊地址翻譯成十進制數後再乘以2 ----H爲硬盤磁頭數 ----S爲每磁頭扇區數 ----C0爲根文件系統起始柱面 ----C只是一箇中間量 ----將DA0500H代入上述公式,並根據H=64,S=32,C0=2,可算出C1=3,H1=29,S1=21。 所以根目錄在硬盤上的物理地址爲:3柱面29頭21扇。 ----用app把它讀出來(CX和DX的賦值應分別改成"0315"和"1D80")。 ----讀出後用"dump"命令查看,能夠發現偏移1050H至105FH是/etc目錄的i-node號和文件名,其中i-node號爲22H,即34D。由於每一個扇區有8個i-node,因此34號i-node一定在2柱面0頭9扇。 ----用app讀出它(CX和DX的賦值分別改成"0209"和"0080")。 ----用"dump"命令可看出偏移1040H至107FH正是/etc目錄的i-node。咱們把它的數據塊也讀出來。先計算第一個數據塊的物理地址。將2D0700H代入公式,算出/etc第一個數據塊物理地址是3柱面50頭27扇。 ----用app讀出它(CX和DX的賦值分別改成"031B"和"3280")。 ----用"dump"命令可看出偏移11A0H至11AFH是/etc目錄下的passwd文件名。咱們用"enter"命令把它改爲zls,而後再運行app(AX的賦值應改成0301)。 ----如今退出DEBUG命令。 ----取出軟盤,重啓機器,引導UNIX操做系統。 ----按照引導順序,UNIX顯示出硬件配置信息後就該提問超級用戶口令了,但就在此時它卻忽然發現/etc/passwd文件失蹤了!(其實只是被更名爲zls,但UNIX對此一無所知。)沒有了這個文件,UNIX沒法提問超級用戶口令,因而它只好在屏幕上顯示以下信息並容許用戶以系統管理員身份直接進入系統維護態: su:Unknownid:root /etc/tcbck:file/etc/passwd ismissingorzerolength /etc/tcbck:eitherslash(/)ismissingfrom /etc/auth/system/filesortherearemalformedentries in/etc/passwdor/etc/group /etc/smmck:restoremissingfiles frombackupordistribution. INIT:SINGLEUSERMODE ****PASSWORDFILEMISSING!**** EnteringSystemMaintenanceMode # ----進入維護態後,固然就能夠"隨心所欲"了。但最好先設置一個新的超級用戶口令。要想這樣作,首先必須恢復passwd文件名。 #mv/etc/zls/etc/passwd ----而後,就能夠用/bin/passwd命令設置新的超級用戶口令了。 結束語 ----在本文行將結束時,咱們再來做一個小小的總結。 ----傳統方案有操做平臺、操做工具和操做對象侷限性。新方案則突破了這三大侷限 性。 ----1、新方案突破了操做平臺侷限性。傳統方案的操做平臺必須是UNIX,而新方案則是DOS。DOS比UNIX普及得多,中國的絕大部分計算機用戶對UNIX陌生,但對DOS卻至關熟悉,使用起來也有親切感。 ----2、新方案突破了操做工具侷限性。傳統方案的操做工具必須是兩張緊急啓動軟盤,而新方案僅使用一張DOS系統盤,其上只需拷貝一個DEBUG.EXE文件。緊急啓動軟盤只能專盤專用,DOS系統盤卻不存在這個問題--用任何一臺機器上的DOS製做出的系統盤,能夠用來解決任何一臺機器上的UNIX超級用戶口令被忘記的問題。至於用來訪問物理硬盤的軟件,固然更不是非DEBUG不可,任何軟件--只要支持訪問物理盤--均 可。做者推薦使用Norton8.0軟件包裏的diskedit程序,對不懂彙編語言編程的人來講該程序無疑是一個最好的選擇。 ----3、新方案突破了操做對象侷限性。傳統方案的操做對象是文件系統管理下的文件,而新方案撇開了文件系統,直接在底層修改數據。 ----最後須要說明的是,對於SCOOpenServerRelease5,因條件所限,做者尚未使用過,因此關於新方案在該版本上執行時步驟是否須要修改以及如何修改的問題, 若是有機會,做者會加以適當的補充。