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