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