2010-10-19 45 views
2

將用戶憑據指定給遠程計算機上的本地帳戶或域帳戶,如何檢查遠程主機上的這些憑據授予的用戶權限?win32 api - 如何檢查遠程計算機上的用戶權限

我可以查找該帳戶的SID,但是如何知道該帳戶是否是遠程主機上管理員組的成員?

我可以找到大量的例子來檢查本地管理員組(例如How do I check if a user has local admin privileges in win32),但它看起來像CreateWellKnownSid只能在本地主機上工作。

任何線索/指針/代碼示例將非常受歡迎。

編輯:更多關於我的問題的背景下面的評論。

+1

這就是Active Directory API的意圖。 – 2010-10-19 14:09:24

+0

我記得的場景與psexec類似 - 您獲得遠程計算機的憑證,您將遠程主機上的小型服務可執行文件複製到IPC $,將其配置爲遠程主機上的服務,啓動它並與您用來執行內容的服務建立通信。 這怎麼可能,所有這些都可以在不觸摸AD API的情況下完成,但爲了查詢適當的權限來執行此操作,我需要AD API? – radai 2010-10-19 14:16:26

回答

0

沒有必要執行此步驟來執行您正在描述的任務,並且由於執行此步驟的各種原因不能確保任務成功。例如,憑據可能具有遠程計算機的權限,但可能存在防止其成功的安全軟件。

解決您的問題的方法是簡單地使用給定的憑據執行任務,並且檢查所有返回值。如果你得到STATUS_ACCESS_DENIED,它意味着它說什麼。如果你沒有得到任何錯誤,那麼你的工作就完成了。

檢查憑證將是有用的,以幫助用戶選擇適當的憑證。您也可以檢查是否可以訪問\\machine\admin$分享作爲任何其他更復雜的檢查。

這就是說,這裏是如何做你問

如果憑據域憑據,你需要看看他們在Active Directory中。 ADSI對腳本很有幫助。其他API存在。獲取用戶組的列表。

然後,您需要使用NetXXX apis或ADSI WinNT提供程序連接到遠程計算機。獲取管理員組成員列表。如果用戶的任何域帳戶都是Administrators組的成員,則該用戶是成員。

這可以通過使用ADSI LDAP和WinNT提供程序的腳本完成。

誰想要運行遠程代碼

替代

似乎人人都認爲你必須寫一個服務可執行文件,安裝一個服務,然後啓動它。

如果您擁有管理員憑據,則替代方法非常簡單,那就是使用任務計劃程序服務。使用SCHTASKS.EXE可以很容易地創建一個計劃任務,該任務的運行時間爲SYSTEM,LOCAL SERVICE,NETWORK SERVICE或您擁有其憑證的任何帳戶。它可以在沒有計劃的情況下創建,然後明確啓動,或者使用「一次」計劃創建,以隨時隨地運行,例如在接下來的幾分鐘內。

如果您需要在遠程機器上運行代碼,我強烈建議SCHTASKS.EXE不是服務方法。

相關問題