用DOS命令破除 UNIX 管理員口令(轉)
用DOS命令破除 UNIX 管理員口令(轉)[@more@] 對於廣大的SCOUNIX作業系統管理員來說,最不可原諒的過失之一就是忘記了 管理員口令(即超級使用者口令)。這個過失會導致極其嚴重的後果,對此凡是具備UNIX 作業系統常識的人都應該知道。然而令人遺憾的是,時至今日鑄錯者依然大有人在。看 來,對他們固然要責備,但既然問題客觀存在,我們就總還須面對現實,想辦法去解決才是。
長期以來,許多人就超級使用者口令被忘記的問題發表了各種看法。一部分人認 為,一旦忘記了超級使用者口令,只能重灌作業系統,此外別無它法。另一部分人則堅決 反對這種"重灌論",他們提出了一些經過成功實踐的解決方案,使得"重灌論"者敗下陣來。現在我們可以肯定地說,忘記超級使用者口令是有辦法解決的。
但同時我們也不得不承認,現行的解決方案有很大的侷限性,這些侷限性決定了現有方案無論怎樣變化和發展也不可能成為一種有著強大生命力的最徹底的解決方案。
傳統解決方案的侷限性
上面已經談到,目前有多種針對超級使用者口令被忘記問題的解決方案。為了敘述上的方便,本文將這些方案統稱為傳統解決方案。傳統方案乍看起來似乎各不相同,但必須有一套(兩張)EmergencyBootFloppy(緊急啟動軟盤)。這套軟盤均為檔案系統
格式,必須在SCOUNIX上製作,並且在不同型別機器上製作的緊急啟動軟盤相互不能通用。用緊急啟動軟盤啟動後,將硬碟根檔案系統mount到某個目錄下(一般為/mnt目錄),然後進入該目錄(即進入硬碟根檔案系統的根目錄),修改相關目錄下與超級使用者口令有關的資訊(各種方案的不同之處主要體現於此)。最後回到軟盤根目錄,拆卸/dev/hd0root,重啟機器。
這些共同點實際上反映了傳統方案的侷限性:
一、操作平臺侷限性:要求自始至終必須在SCOUNIX作業系統平臺上實施。
二、操作工具侷限性:對緊急啟動軟盤的依賴性太大。萬一軟盤發生損毀,必須找一臺型別相同的機器再製作一套,這就是前面所說的"專盤專用"的限制。
三、操作物件侷限性:必須依靠硬碟根檔案系統的支援。即操作者與修改物件(指與超級使用者口令有關的資訊)被檔案系統隔開,操作者不能直接修改物件,只能呼叫檔案系統提供的服務修改。這種方式本是資訊科學中倡導的層次化思想的一種體現,在正常情況下應予稱道;但任何事物都是有兩面性的,在非常情況下--諸如解決忘記超級使用者口令這一類問題時--該方式反而有可能帶來麻煩。
三大侷限性說明了傳統解決方案可行性的脆弱和狹窄,也決定了它們作為凌駕於檔案系統之上的高層方案所必然具有的弊端。於是,打破這些侷限性,探索出一種全新的解決方案,就成為了擺在一切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扇是超級塊,3、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
----其中:
----C1、H1、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命令設定新的超級使用者口令了。
長期以來,許多人就超級使用者口令被忘記的問題發表了各種看法。一部分人認 為,一旦忘記了超級使用者口令,只能重灌作業系統,此外別無它法。另一部分人則堅決 反對這種"重灌論",他們提出了一些經過成功實踐的解決方案,使得"重灌論"者敗下陣來。現在我們可以肯定地說,忘記超級使用者口令是有辦法解決的。
但同時我們也不得不承認,現行的解決方案有很大的侷限性,這些侷限性決定了現有方案無論怎樣變化和發展也不可能成為一種有著強大生命力的最徹底的解決方案。
傳統解決方案的侷限性
上面已經談到,目前有多種針對超級使用者口令被忘記問題的解決方案。為了敘述上的方便,本文將這些方案統稱為傳統解決方案。傳統方案乍看起來似乎各不相同,但必須有一套(兩張)EmergencyBootFloppy(緊急啟動軟盤)。這套軟盤均為檔案系統
格式,必須在SCOUNIX上製作,並且在不同型別機器上製作的緊急啟動軟盤相互不能通用。用緊急啟動軟盤啟動後,將硬碟根檔案系統mount到某個目錄下(一般為/mnt目錄),然後進入該目錄(即進入硬碟根檔案系統的根目錄),修改相關目錄下與超級使用者口令有關的資訊(各種方案的不同之處主要體現於此)。最後回到軟盤根目錄,拆卸/dev/hd0root,重啟機器。
這些共同點實際上反映了傳統方案的侷限性:
一、操作平臺侷限性:要求自始至終必須在SCOUNIX作業系統平臺上實施。
二、操作工具侷限性:對緊急啟動軟盤的依賴性太大。萬一軟盤發生損毀,必須找一臺型別相同的機器再製作一套,這就是前面所說的"專盤專用"的限制。
三、操作物件侷限性:必須依靠硬碟根檔案系統的支援。即操作者與修改物件(指與超級使用者口令有關的資訊)被檔案系統隔開,操作者不能直接修改物件,只能呼叫檔案系統提供的服務修改。這種方式本是資訊科學中倡導的層次化思想的一種體現,在正常情況下應予稱道;但任何事物都是有兩面性的,在非常情況下--諸如解決忘記超級使用者口令這一類問題時--該方式反而有可能帶來麻煩。
三大侷限性說明了傳統解決方案可行性的脆弱和狹窄,也決定了它們作為凌駕於檔案系統之上的高層方案所必然具有的弊端。於是,打破這些侷限性,探索出一種全新的解決方案,就成為了擺在一切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扇是超級塊,3、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
----其中:
----C1、H1、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命令設定新的超級使用者口令了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用DOS命令破除UNIX管理員口令 (轉)
- dos2unix, unix2dos 對應的命令(轉)
- dos2unix命令
- unix口令檔案介紹(轉)
- 我使用過的Linux命令之dos2unix - 將DOS格式文字檔案轉換成UNIX格式Linux
- UNIX系統的安全(口令篇)(轉)
- 文字轉化工具dos2unix
- 實用Unix/Linux 命令(轉)Linux
- Unix/BSD/Linux的口令機制初探(轉)Linux
- WebLogic中修改系統管理員口令Web
- 常用UNIX命令(轉)
- 15 條實用 Linux/Unix 磁帶管理命令Linux
- UNIX命令詳解(轉)
- 使用usermod命令控制口令選擇(轉)
- Dos命令
- DOS/Windows和Linux/Unix間檔案格式轉換WindowsLinux
- 從系統管理員的角度討論UNIX安全問題(轉)
- Windows XP 增強的DOS命令(轉)Windows
- [轉]UNIX find命令實踐
- UNIX系統操作命令(轉)
- 用DOS命令生成光碟檔案列表
- 如何在 Unix 和 DOS 格式之間轉換文字檔案
- dos命令大全
- dos 命令大全
- DOS命令全集
- 常用DOS命令
- 基本dos命令
- Windows口令管理的4個誤區(轉)Windows
- unix的AWK命令介紹(轉)
- Unix下打包命令的使用(轉)
- 去掉檔案中LF(dos->unix)
- Linux和DOS的FORMAT命令區別(轉)LinuxORM
- Windows常用dos命令Windows
- 常見dos命令
- 基本的Dos命令
- oracle的口令管理Oracle
- Java 生成本文檔案的時候,Dos格式轉成Unix格式Java
- unix下 nohup 命令使用方法(轉)