解析進(jìn)程不能訪問網(wǎng)絡(luò)資源
前言?
在NT系統(tǒng)中以system權(quán)限的進(jìn)程使用net?use訪問網(wǎng)絡(luò)共享時會產(chǎn)生“系統(tǒng)發(fā)生?1312?錯誤。指定的登錄會話不存在??赡芤驯唤K止?!保疚脑噲D對此進(jìn)行一下解釋,再有就是使用IIS創(chuàng)建的進(jìn)程通常也不能使用網(wǎng)絡(luò)共享,產(chǎn)生的錯誤是一樣的,原因也在這篇文章里闡述了,希望對大家能有所幫助。
本地系統(tǒng)賬號?
????當(dāng)用戶登錄系統(tǒng)時,Windows?NT/2000?將驗證他的密碼,如果用戶驗證成功,系統(tǒng)產(chǎn)生一個訪問令牌,它包含用戶安全標(biāo)示符(SID)、組SID列表、特權(quán)列表和模擬(Impersonating)信息等安全信息。該用戶啟動的任何進(jìn)程都將附加該令牌,訪問令牌代表進(jìn)程的安全環(huán)境,它控制了進(jìn)程與可保護(hù)對象(securable?object)的交互。當(dāng)進(jìn)程訪問一個可保護(hù)對象時,系統(tǒng)將該對象的訪問控制列表(ACL)中的每個訪問控制項(ACE)和訪問令牌中的?SID?進(jìn)行比較以確定進(jìn)程是否可以訪問該對象。由于用戶啟動的任何進(jìn)程都將附加該用戶的訪問令牌,因此任何進(jìn)程都知道用戶的?SID?并且可以訪問它。?
????Local?System?賬號是內(nèi)置的系統(tǒng)賬號,所有系統(tǒng)進(jìn)程都在?Local?System?的安全環(huán)境中運行,Local?System?賬號是用于啟動服務(wù)的默認(rèn)賬號,它繼承了服務(wù)控制管理器的安全環(huán)境,在本地計算機(jī)上擁有幾乎無限的權(quán)限。在?Local?System?賬號環(huán)境運行的進(jìn)程沒有與任何已登錄的用戶賬號相聯(lián)系,沒有用于驗證的信任憑證(用戶名、域和密碼),而該信任憑證(credential)用于網(wǎng)絡(luò)上其他計算機(jī)的驗證,這樣以?Local?System?賬號運行的進(jìn)程就不能訪問網(wǎng)絡(luò)資源,如網(wǎng)絡(luò)共享。
????在?Local?System?賬號環(huán)境運行的進(jìn)程和普通進(jìn)程的不同之處在于:
1)?注冊表的?HKEY_CURRENT_USER?鍵是和缺省用戶而不是當(dāng)前用戶相聯(lián)系的,要訪問其他用戶的配置文件,需要先模擬該用戶,然后再訪問?HKEY_CURRENT_USER?。?
2)?可以打開?HKEY_LOCAL_MACHINE\\SECURITY?注冊表鍵
3)?該進(jìn)程不能訪問網(wǎng)絡(luò)資源,如共享、管道,因為它不能提供信任憑證,而只能使用空連接。?在?HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Parameters?處的?NullSessionPipes?和?NullSessionShares?的值指明了可以被空連接訪問的管道和共享。?或者也可以設(shè)置?RestrictNullSessAccess?=?0,以允許空連接的用戶訪問該計算機(jī)上的所有管道和共享。(呵呵,這個是個安全隱患呦,可不要干呀。上邊兩個值最好也全都設(shè)成空)
4)?不能和其他程序共享對象,除非在創(chuàng)建對象時設(shè)置?DACL?允許用戶訪問。
5)?如果啟動命令行提示符來運行批處理文件,用戶可以按?Ctrl+C?來終止批處理的運行,并且用戶就獲得了一個?Local?System?權(quán)限的?shell。
IIS服務(wù)的模擬
????正是由于服務(wù)程序運行在權(quán)限極大的?Local?System?賬號下,如果網(wǎng)絡(luò)客戶也使用該賬號來訪問系統(tǒng)將給系統(tǒng)帶來安全隱患,因此?NT/2000?提供了模擬功能?---?服務(wù)程序在處理客戶請求時使用一個權(quán)限較低的客戶身份運行,處理完客戶請求再恢復(fù)。IIS就是使用這個原理,雖然配置?IIS?以?Local?System?賬號運行,而一般的匿名請求就是以?IUSR_computer?身份(guests?組)和?IWAM_computer?身份(guests?組)運行的。模擬又分兩種,在進(jìn)程里使用模擬令牌來模擬某個用戶(模擬令牌里的用戶)和使用主要令牌來創(chuàng)建新的進(jìn)程。在進(jìn)程內(nèi)的某個線程可以使用?ImpersonateLoggedOnUser(同時需要提供一個代表某個登錄用戶的模擬令牌)模擬用戶時,這個線程就是該模擬令牌代表的用戶的身份,處理完成后使用?RevertToSelf?恢復(fù)自己的身份。創(chuàng)建新的進(jìn)程使用?CreateProcessAsUser(比?CreateProcess?函數(shù)多一個主要令牌的參數(shù)),這樣啟動的新進(jìn)程就不是父進(jìn)程的身份,而是主要令牌代表的登錄用戶。對于asp、asa等ISAPI擴(kuò)展,是動態(tài)連接庫的形式,是進(jìn)程內(nèi)的模擬;而CGI程序(cmd.exe,ncx99.exe)則是使用的創(chuàng)建新進(jìn)程方式進(jìn)行的模擬。
????不過即使我們通過IIS啟動了進(jìn)程,一般仍然不能使用網(wǎng)絡(luò)資源,就是不能使用?net?use,如果使用將產(chǎn)生“系統(tǒng)發(fā)生?1312?錯誤。指定的登錄會話不存在。可能已被終止?!钡腻e誤,這是因為不同的登錄類型造成的。Windows?NT支持以下5種登錄類型:
?登錄類型?含義?
LOGON32_LOGON_INTERACTIVE?交互登錄:這個是通常的本地登錄或者終端服務(wù)、telnet等??
LOGON32_LOGON_SERVICE?服務(wù)登錄:作為服務(wù)登錄系統(tǒng)??
LOGON32_LOGON_NETWORK?網(wǎng)絡(luò)登錄:用于高性能的服務(wù)來驗證明文密碼??
LOGON32_LOGON_BATCH?批處理登錄:用于批處理服務(wù)器或者同時處理多個明文驗證的高性能服務(wù)器?
LOGON32_LOGON_UNLOCK?解除鎖定登錄:設(shè)計用來為?GINA?DLL?記錄交互登錄用戶解除工作站鎖定的。這種類型允許在工作站解除鎖定時產(chǎn)生一條審核記錄??????????
????除了以上5種登錄類型外,Windows?2000?還支持以下兩種類型LOGON32_LOGON_NETWORK_CLEARTEXT,LOGON32_LOGON_NEW_CREDENTIALS(詳細(xì)詳細(xì)參見?msdn?里關(guān)于?LogonUser?函數(shù)的解釋)。
根據(jù)?IIS?驗證方式的不同,IIS支持不同的登錄類型。IIS?4支持以下5種類型的驗證方式:
?驗證類型?模擬類型?
匿名登錄(沒有驗證),允許密碼自動同步(缺?。?Network?-?網(wǎng)絡(luò)??
匿名登錄(沒有驗證),禁止密碼自動同步?IIS?Clear?Text?-?IIS明文?
基本驗證?IIS?Clear?Text?-?IIS明文?
集成NT驗證,NTLM?Network?-?網(wǎng)絡(luò)??
客戶端使用?SSL?Certificate?Mapping?Interactive?-?交互?
????可否訪問網(wǎng)絡(luò)資源由模擬的登錄令牌類型決定,網(wǎng)絡(luò)登錄令牌是不能訪問網(wǎng)絡(luò)資源的,因為這種類型的訪問令牌是在通過網(wǎng)絡(luò)完成驗證后由服務(wù)器創(chuàng)建的,服務(wù)器使用這種令牌來訪問網(wǎng)絡(luò)上的其他計算機(jī)是一個安全隱患。
????交互登錄就和本地登錄一樣,是可以訪問網(wǎng)絡(luò)資源的。
????IIS?支持的第三種類型的訪問令牌是批處理令牌,它是設(shè)計用來在安全的環(huán)境里進(jìn)行批處理工作的,批處理令牌也可以訪問網(wǎng)絡(luò)資源。
????IIS?明文驗證的概念來自于IIS是以明文的方式獲得用戶名和密碼的事實。管理員可以控制明文登錄創(chuàng)建交互令牌、批處理令牌還是網(wǎng)絡(luò)令牌,這由?metabase的?LogonMethod?屬性決定。缺省這種登錄創(chuàng)建交互令牌。
????一般管理員在配置?IIS?時會允許密碼自動同步(這樣就不用關(guān)心?IUSR_computer?用戶的密碼的更改),還有就是集成?NT?的?NTLM?驗證也是比較常見的,不過這兩者驗證都將創(chuàng)建網(wǎng)絡(luò)訪問令牌,因此我們就不能訪問網(wǎng)絡(luò)資源了。

