2008-12-08 87 views
7

我在ASP.NET 2.0中的模擬上下文中啓動進程時遇到問題。進程啓動和假冒

我開始在我的web服務代碼中的新進程。 IIS 5.1,.NET 2.0

[WebMethod] 
public string HelloWorld() 
{ 
    string path = @"C:\KB\GetWindowUser.exe"; 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.WorkingDirectory = Path.GetDirectoryName(path); 
    startInfo.FileName = path; 
    startInfo.UseShellExecute = false; 
    startInfo.CreateNoWindow = true; 
    startInfo.ErrorDialog = false; 
    startInfo.RedirectStandardOutput = true; 
    startInfo.RedirectStandardError = true; 
    Process docCreateProcess = Process.Start(startInfo); 

    string errors = docCreateProcess.StandardError.ReadToEnd(); 
    string output = docCreateProcess.StandardOutput.ReadToEnd(); 
} 

的 「C:\ KB \ GetWindowUser.exe」 是一個包含以下代碼的控制檯應用程序:

static void Main(string[] args) 
{ 
    Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name); 
} 

當我調用Web服務而不模仿,一切工作正常。

當我打開模擬,下面的錯誤是用「錯誤」在Web服務代碼變量:

未處理的異常信息:System.Security.SecurityException:訪問被拒絕\ r \ n \ r \ n在System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess,Boolean threadOnly)\ r \ n在System.Security.Principal.WindowsIdentity.GetCurrent()\ r \ n在ObfuscatedMdc.Program.Main(String [] args)\ r \ n \ r \ n失敗的程序集的區域是:\ r \ nMyComputer

模擬用戶是本地管理員並且可以訪問C:\ KB \ GetWindowUser.exe可執行文件。

當我明確指定窗口用戶ProcesStartInfo屬性域,用戶和密碼,我得到了以下信息: http://img201.imageshack.us/img201/5870/pstartah8.jpg

是否有可能從asp.net不同的憑據比ASPNET(IIS 5.1)啓動過程?

+1

提到了完整的源代碼示例工作任何關於它的最終解決方案包內

using (Impersonator person = new Impersonator("domainName", "userName", "password") { // do something requiring special permissions } 

你的代碼? – Kiquenet 2013-07-05 06:34:55

回答

3

您必須將特權代碼放入GAC(或以完全信任方式運行)。

GAC中的代碼必須聲明XXXPermission,其中XXX是您要求的任何權限,無論是模擬,訪問硬盤還是您有什麼。

您應該在後面立即恢復斷言。

您應該確保您放入GAC的DLL上的API沒有濫用的機會。例如,如果您正在編寫一個讓用戶通過命令行應用程序備份服務器的網站,那麼您的API應該會公開一個類似於「BackUp()」而不是「LaunchAribraryProcess(字符串路徑)」的方法。config文件也必須設置模擬,否則您將遇到NTFS權限問題以及CAS。

這裏是complete explanation

0

你究竟想要做什麼?我無法完全瞭解您的代碼在創建不同的可執行文件時的作用。它看起來很奇怪。說明你首先想要解決的業務問題可能會更有幫助。

0

它看起來像你試圖讓IIS服務模仿比服務本身更高的權限的用戶(在這種情況下是管理員)。 Windows將此視爲一個安全漏洞,因爲那時您基本上正在請求某人接管您的系統。可能有辦法解決這個限制,但不這樣做 - 這是爲了你自己的利益。

而是讓IIS模擬一個具有有限權限的用戶,他擁有您需要的權限。例如。創建一個僅擁有您希望Web服務寫入的文件夾的用戶帳戶,或者其他適當的權限組合。如果冒充一個有限的用戶,你不會看到這個錯誤代碼,但仍然可以調用你在這裏的良性可執行文件。