作爲本地系統或本地服務運行的C#Windows服務是否可能假冒其他用戶而不需要該用戶的密碼?Windows服務可能在沒有密碼的情況下冒充用戶嗎?
這將如何完成?
注意:我的動機是能夠在服務中運行用戶特定的WMI查詢。我所做的WMI調用(對於OfflineFiles WMI API)是用戶敏感的,並且只有當我將我的服務作爲其數據要查詢的用戶運行時才能工作。我不希望用戶在安裝服務時輸入他們的用戶名和密碼,所以我想僅以本地系統或其他方式運行該服務,並模擬我關心的用戶。
作爲本地系統或本地服務運行的C#Windows服務是否可能假冒其他用戶而不需要該用戶的密碼?Windows服務可能在沒有密碼的情況下冒充用戶嗎?
這將如何完成?
注意:我的動機是能夠在服務中運行用戶特定的WMI查詢。我所做的WMI調用(對於OfflineFiles WMI API)是用戶敏感的,並且只有當我將我的服務作爲其數據要查詢的用戶運行時才能工作。我不希望用戶在安裝服務時輸入他們的用戶名和密碼,所以我想僅以本地系統或其他方式運行該服務,並模擬我關心的用戶。
假設你而相關用戶登錄時只需要啓動模擬,你可以:
一旦令牌被複制,用戶是否登錄 - 服務中的模擬仍然存在並不重要。
顯然,API無證ZwCreateToken WINAPI功能雖然也能達到這一點,但我從來沒有使用它,並在任何時候在將來可能會斷裂。
for#1,也可以使用'Process.GetProcesses()' –
事實上,有一種使用S4U(服務用戶)的技術: https://blogs.msdn.microsoft.com/winsdk/2015/08/28 /以用戶身份登錄不需要密碼/ https://msdn.microsoft.com/en-us/library/windows/desktop/aa378128(v=vs.85).aspx –
據我所知,由於明顯的安全原因無法完成。您必須擁有密碼才能調用LogonUser,然後調用WindowsIdentity.Impersonate。
有一個例外:如果您有通過遠程調用傳遞給服務的現有WindowsIdentity,那麼您可以模擬該服務中的WindowsIdentity,但不能以這種方式運行應用程序。
安全原因並不明顯 - 如果您是使用本地系統帳戶運行的服務,那麼您確實無法做到這一點。 – EFraim
我懷疑你將有更好的運氣,如果你要解釋你的服務做一旦它模擬的用戶是什麼。據我所知,你問的也不是沒有可能積攢憑證(這意味着在某些時候輸入密碼的用戶) –
@ChrisShain,如你所說我已經更新的問題。 – Eric
檢查出這個問題的答案:http://stackoverflow.com/questions/559719/windows-impersonation-from-c-sharp –