2010-02-25 81 views
9

想象一下,我有一個現有的進程在Windows下作爲特定用戶運行。是否允許該進程將當前令牌(類似於OpenThreadToken和DuplicateTokenEx)傳遞給同一臺計算機上的另一個進程(可能通過網絡套接字或其他IPC),然後期望該進程能夠用它來調用CreateProcessAsUser?正在允許的進程之間傳遞一個Windows安全令牌

從我已閱讀的文檔(http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx),我什麼也沒有看到禁止這一點,但也許令牌只能由創建它的線程或進程使用。我想要一個web請求來到IIS,進行身份驗證,讓IIS安排模擬遠程用戶,然後將模擬令牌傳遞給另一個服務器進程(在同一臺機器上),以便服務器進程可以在遠程用戶的上下文中執行一些安全檢查)

回答

8

是的,那是可能的。您可以使用DuplicateHandle獲取對目標進程有效的句柄(將新句柄值發送給目標進程,以便知道它)。 但是,目標進程仍必須具有相應使用令牌的權限。例如。 SE_IMPERSONATE模擬用戶和由CPAU使用的SE_ASSIGN_PRIMARY。當然,您可以在MSDN中爲ImpersonateLoggedOnUser和CPAU讀取一些例外。

5

我還沒有嘗試過,但似乎這是相同的問題asked here。說明似乎有道理。通過您選擇的任何機制(例如IPC)傳遞進程ID,然後撥打OpenProcess,OpenProcessToken,最後撥打ImpersonateLoggedOnUser。結果句柄可以傳遞給CreateProcessAsUser。那麼......我知道它可以傳遞給那個函數,但它是否會得到我不知道的期望結果。有趣的問題,雖然。

+0

感謝您的鏈接 - 非常有幫助 – 2010-02-25 04:00:24

4

爲什麼不只是使用命名管道,然後調用ImpersonateNamedPipeUser() - 它是安全和可靠的!請注意,模擬必須的過程具有模擬權限。

+0

oops-使該ImpersonateNamedPipeClient():) – 2010-02-26 02:27:41

+0

有趣的想法,但我真的不知道如何安排它在我的情況(服務器是在Java中,我打算當分離需要執行一些安全檢查的子進程時,通過JNI調用CreateProcessAsUser)。不過,我會再看看它,謝謝。 – 2010-03-01 02:54:35

相關問題