簡體   English   中英

如何模擬Windows內置的WinForms C#App管理員角色?

[英]How to impersonate a Windows built-in Administrator role for a WinForms, C# App?

特權提升似乎是大多數開發人員與之抗爭的普遍現象,因為大多數時候他們根本沒有特權。 我這樣做只是為了與龐大的后台工作程序作斗爭,而且我試圖將我的代碼保持在將要使用它的類的本地。 給定代碼和引用的數量,我的后台工作人員一旦在“ RunWorkerCompleted”處理程序方法中完成操作,便很難證明這是可行的選擇:

作業1:

作業2:

作業3:

我的后台工作人員對我的MainForm類太過依賴,因此我無法考慮將整個解決方案交付給具有“ Admin”特權的單獨流程。 這涉及太多的切碎和更改。

歐米茄編碼器:

在閱讀了CAS的70-536考試后,我知道上面示例中的大多數術語,但是我看不到它如何工作以及為什么起作用? 有人可以解釋為什么將權限授予“ ManagersOnly”方法嗎? 一旦將PrincipalPolicy更改為WindowsPrincipal,接下來的兩個步驟看起來就像普通對象實例化語句一樣:

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity);

顯然,不存在這樣的重載,但是很清楚該重載的作用。

問題1: OmegaCoders示例如何實現此效果? 因為它一定可以工作,因為我的用戶屬於“ BUILTIN \\ Administrators”組。 我正在尋找基於文獻的答案,因此請按照您的感覺進行詳細介紹。

更新1:

問題2:如何將PrincipalPolicy恢復到以前的狀態...方法返回后,我不需要將PrincipalPolicy仍設置為“ WindowsPrincipal”? 因此,該應用程序可以按我的預期以較低特權用戶身份繼續運行。

問題3:一旦返回“ ManagersOnly”方法,該權限會被丟棄嗎? 它適用於方法的壽命嗎?

System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);

*更新2:*

事實證明這很困難,因為在Win7 Pro開發人員機器上我可以測試並運行任何東西,但是當我嘗試在簡單的Win7 Home筆記本電腦上測試一些代碼時,我發現權限被拒絕了。 這就引出了一個問題,即將PrincipalPolicy更改為“ WindowsPrincipal”並不適用於所有vista和Win7用戶,因為許多用戶甚至都不是admin用戶組的一部分。 因此,此選項沒有用處...坐在這台小型筆記本電腦上,它變得非常明顯,這不是我需要的解決方案。

忽略先前的問題-以我自己的研究,我做到了它們不可行。

問題4:如何以編程方式臨時偽裝管理員代碼?

最簡潔的答案是不。

似乎在我一直在進行的所有挖掘工作之后,似乎都沒有一種通俗易懂的方法來提升方法的權限,因為CAS補充了RBS,因此,如果用戶不是正確的組的一部分。 然后,甚至沒有必要訪問管理員權限,因為rbs告訴cas用戶不是該組的一部分,因此該請求被退回並且權限被拒絕。 導致異常。

如果用戶是您需要的組的一部分,即管理員,那么更改Domains PrincipalPolicy將為您提供臨時解決方案,但它不能滿足根本不屬於admin用戶組的用戶的需要。 那就是上述解決方案瓦解的地方。

長答案是將容易出現問題的代碼發送到一個小的單獨的.exe文件中,然后單獨運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM