------- 本地系統賬號和iis模擬
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。
正是由於服務程式執行在許可權極大的 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 - 網路
interactive - 互動
可否訪問網路資源由模擬的登入令牌型別決定,網路登入令牌是不能訪問網路資源的,因為這種型別的訪問令牌是在通過網路完成驗證後由伺服器建立的,伺服器使用這種令牌來訪問網路上的其他計算機是乙個安全隱患。
互動登入就和本地登入一樣,是可以訪問網路資源的。
iis 支援的第三種型別的訪問令牌是批處理令牌,它是設計用來在安全的環境裡進行批處理工作的,批處理令牌也可以訪問網路資源。
iis 明文驗證的概念來自於iis是以明文的方式獲得使用者名稱和密碼的事實。管理員可以控制明文登入建立互動令牌、批處理令牌還是網路令牌,這由 metabase的 logonmethod 屬性決定。預設這種登入建立互動令牌。
一般管理員在配置 iis 時會允許密碼自動同步(這樣就不用關心 iusr_computer 使用者的密碼的更改),還有就是整合 nt 的 ntlm 驗證也是比較常見的,不過這兩者驗證都將建立網路訪問令牌,因此我們就不能訪問網路資源了。
access tokens
client's security context
localsystem account
impersonating clients
impersonateloggedonuser
createprocessasuser
reverttoself
logonuser
以上所有資料均來自msdn
注:關於msdn資料裡系統賬號特殊之處這段:
本來2000/5的資料是這樣的:
後來獲得最新資料,微軟的說法有變,意思自然也不同了。
解析程序為何不能訪問網路資源 作者Bingle
本地系統賬號和iis模擬 system許可權的程序使用net use訪問網路共享時產生 系統發生 1312 錯誤,指定的登入會話不存在,可能已被終止。本文試圖對此進行一下解釋。再有就是使用iis建立的程序通常也不能使用網路資源,產生的錯誤是一樣的,原因也在這篇文章裡闡述了。當使用者登入系統時,win...
虛擬主機為何不能直接用IP訪問
虛擬主機,顧名思義,是虛擬的主機,也就是說在一台伺服器可以虛擬多個主機,每個主機對應乙個 可以有多個網域名稱訪問 而ip位址,對於網際網路上的主機來說,全世界每台主機都只有乙個唯一的ip位址,這就好比全中國只有您乙個唯一的身份證號碼一樣。而當多個虛擬主機對應到乙個ip位址上時,就會出現問題了,怎麼訪...
虛擬主機為何不能直接用IP訪問
虛擬主機,顧名思義,是虛擬的主機,也就是說在一台伺服器可以虛擬多個主機,每個主機對應乙個 可以有多個網域名稱訪問 而ip位址,對於網際網路上的主機來說,全世界每台主機都只有乙個唯一的ip位址,這就好比全中國只有您乙個唯一的身份證號碼一樣。而當多個虛擬主機對應到乙個ip位址上時,就會出現問題了 無法對...