歡迎您光臨本站 註冊首頁

徹底解決UNIX管理員口令丟失問題方案

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  引言
----對於廣大的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命令設置新的超級用戶口令了。
結束語
----在本文行將結束時,我們再來作一個小小的總結。
----傳統方案有操作平台、操作工具和操作對象局限性。新方案則突破了這三大局限性。
----一、新方案突破了操作平台局限性。傳統方案的操作平台必須是unix,而新方案則是dos。dos比unix普及得多,中國的絕大部分計算機用戶對unix陌生,但對dos卻相當熟悉,使用起來也有親切感。

----二、新方案突破了操作工具局限性。傳統方案的操作工具必須是兩張緊急啟動軟盤,而新方案僅使用一張dos系統盤,其上只需拷貝一個debug.exe文件。緊急啟動軟盤只能專盤專用,dos系統盤卻不存在這個問題--用任何一台機器上的dos製作出的系統盤,可以用來解決任何一台機器上的unix超級用戶口令被忘記的問題。至於用來訪問物理硬碟的軟體,當然更不是非debug不可,任何軟體--只要支持訪問物理盤均可。作者推薦使用norton8.0軟體包里的diskedit程序,對不懂彙編語言編程的人來說該程序無疑是一個最好的選擇。

----三、新方案突破了操作對象局限性。傳統方案的操作對象是文件系統管理下的文件,而新方案撇開了文件系統,直接在底層修改數據。

----最後需要說明的是,對於scoopenserverrelease5,因條件所限,作者還沒有使用過,所以關於新方案在該版本上執行時步驟是否需要修改以及如何修改的問題,如果有機會,作者會加以適當的補充。


[火星人 ] 徹底解決UNIX管理員口令丟失問題方案已經有250次圍觀

http://coctec.com/docs/unix/show-post-73950.html