Windows的使用者管理中的使用者模擬

2021-09-30 03:18:04 字數 3546 閱讀 1540

使用者模擬(

impersonation

)是自從

windows 2000

時引入的強大的功能。

windows

系統甚至允許使用者模擬(

impersonation

)被用在客戶端

/服務端的程式設計模型裡面。

在傳統模式下,比如乙個遠端伺服器可以提供檔案、印表機或者資料庫服務,希望使用這些資源的客戶端可以傳送乙個請求給遠端伺服器,這時候,遠端伺服器必須要確保客戶端有許可權來訪問它請求的資源,於是遠端伺服器查詢使用者的帳號和組資訊,然後查詢資源的安全描述符來判斷資源訪問是否被允許。這個過程需要大量的編碼,並且非常容易出錯,而且也不能自動整合後續版本作業系統帶來的新的安全特性。因此

windows 2000

起,我們可以使用使用者模擬(

impersonation

)來簡化這個問題—比如

iis裡面就使用到了使用者模擬(

impersonation

)功能。

比如,我們在區域網裡面新建了乙個**,區域網使用者可以使用這個**上傳自己的,編輯自己的檔案,並且可以跟自己的好友共享這些和檔案。**使用

windows

驗證方式,這樣就省去了區域網使用者登入**的麻煩。就是說如果使用者開啟

ie訪問**的時候,直接就獲得了相應的訪問許可權

—這也是

sharepoint server

使用的使用者身份驗證方式。另外在設計的時候,為了得到更大的可擴充套件性,和檔案不是儲存在資料庫裡面的,而是直接儲存在檔案系統(也許是分布式檔案系統)裡面的。也即是說,當新建了乙個使用者

a的時候,

1.**就在域裡面新建乙個使用者

a,還建立了乙個使用者組

a』s friend—

用來儲存使用者

a的好友帳號;

2.並且在儲存和檔案的分布式檔案系統裡面建立了乙個資料夾

a,這個資料夾

a有讀寫許可權,而

a』s friend

只有讀的許可權,其他使用者預設沒有任何許可權。當a

在瀏覽器裡面上傳,**接受並且把儲存到資料夾

a裡面。這樣就為**的實現提出了乙個難題,即**

asp.net

程式以什麼使用者身份執行?

n如果以域管理員帳號執行的話,那麼無疑帶來了很大的安全方面的風險,因為域管理員帳號在域裡面的控制權可以說是無限大的,如果你的****沒有考慮到一些網路攻擊

—很容易就造成整個域癱瘓掉。

n而如果以其他的帳號執行,又怎麼保證**有許可權將使用者

a上傳的儲存到資料夾

a裡面去?

這種情形,你就可以使用使用者模擬(

impersonation

)功能,**只要執行在最低許可權—例如

network service

使用者下面,當需要儲存使用者

a上傳的時,**所要做的就是獲取使用者

a的登入資訊暫時模擬使用者

a,將儲存到資料夾

a中後,回滾使用者模擬(

impersonation

)操作,重新讓**執行在最低許可權下。這樣既做到系統的可擴充套件性,又做到了將安全風險降到最低的目標。這種許可權驗證方式省卻了重複實現安全子系統的努力,而將使用者許可權管理整合到

windows

域管理系統裡面,另外系統的可擴充套件性也解決了,因為據測試,

windows

的active directory

可以支援上億使用者

—好像沒有幾個區域網能有這麼多的使用者吧?

impersonation

)來模擬乙個使用者。執行緒的訪問令牌(

access token

)包含了模擬資訊(

impersonation token

),並且還包含了執行緒的真實安全憑據(

security credential

),因此在模擬完乙個使用者以後,執行緒還能重新使用自己實際的訪問令牌(

access token)。

為了避免遠端伺服器濫用使用者模擬(

impersonation

)功能,

windows

系統允許客戶端對使用者模擬(

impersonation

)進行一系列的限制:

限制型別

說明

security_anonymous

最嚴格的限制

—遠端伺服器不能模擬客戶端的使用者身份

security_identification

允許遠端伺服器獲取客戶端使用者的安全身份識別符號(

sid)和使用者的許可權資訊,但是伺服器不能模擬使用者身份。

security_impersonationn

允許遠端伺服器在訪問本機資源的時候模擬使用者身份

security_delegation

允許遠端伺服器在訪問本機和遠端機資源的時候模擬使用者身份

如果客戶端不進行限制,那麼預設遠端伺服器具有

security_impersonationn

許可權,即可以在訪問本機資源的時候模擬使用者身份。

使用者模擬的**

[dllimport("advapi32.dll", setlasterror = true)]

private

static

extern

bool logonuser(string lpszusername, string lpszdomain, string lpszpassword, int dwlogontype, int dwlogonprovider, ref intptr phtoken);

intptr tokenhandle = intptr.zero;

bool

returnvalue = logonuser(username, domainname, password.tostring(),

logon32_logon_interactive, logon32_provider_default,

ref tokenhandle);

console.writeline("before impersonation: "

+ windowsidentity.getcurrent().name);

windowsidentity identity = new windowsidentity(tokenhandle);

windowsimpersonationcontext impersonateduser = identity.impersonate();

console.writeline("after impersonation: "

+ windowsidentity.getcurrent().name);

impersonateduser.undo();

console.writeline("after undo: " + windowsidentity.getcurrent().name);

if(tokenhandle != intptr.zero)

closehandle(tokenhandle);

Windows使用者管理

使用者賬戶 使用者賬戶擁有唯一的安全識別符號 每個使用者包含乙個名稱和乙個密碼 不同的使用者身份具有不同的許可權 sid 安全識別符號 檢視使用者安全識別符號 普通使用者 從1000開始,管理員是固定的 500 administrator 例 s 1 5 21 1178262980 10218937...

Windows使用者管理

1 使用者賬戶 不同的使用者身份擁有不同的許可權 每個使用者包含乙個名稱和乙個密碼 使用者賬戶擁有唯一的安全識別符號。2 使用者劃分原則 系統許可權和資料庫分離,超級使用者許可權和普通使用者許可權分離。3 使用者管理的意義 在伺服器上,需要謹慎分配超級使用者許可權,盡量使用普通使用者,進行日常伺服器...

windows使用者管理

使用者擁有不同的操作許可權,每乙個使用者擁有唯一的sid。uid 500固定給administrator使用。普通使用者的uid從1000開始。賬戶與密碼的儲存位置 c windows system32 config sam 使用hash演算法記錄。暴力破解 社會工程學密碼破解工具 伺服器預設密碼最...