2008-12-08 1 views
7

У меня проблема с запуском процессов в олицетворенном контексте в ASP.NET 2.0.Начало процесса и олицетворение

Я начинаю новый процесс в своем веб-сервисном коде. 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: \ КБ \ GetWindowUser.exe" консольное приложение, содержащее следующий код:

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

Когда я призываю веб-сервис без олицетворения, все работает отлично.

При включении олицетворения, следующее сообщение об ошибке записывается в «ошибки» переменной в коде веб-службы:

Необработанное исключение: System.Security.SecurityException:. Отказано в доступе \ г \ п \ г \ п в System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels wishAccess, Boolean threadOnly) \ r \ n в System.Security.Principal.WindowsIdentity.GetCurrent() \ r \ n в ObfuscatedMdc.Program.Main (String [] args) \ r \ nСоздание сбоя сборки: \ r \ nMyComputer

Олицетворенный пользователь является локальным администратором и имеет доступ к исполняемому файлу C: \ KB \ GetWindowUser.exe.

Когда я указываю пользователя окна явно в свойствах ProcesStartInfo домена, пользователя и пароль, я получил следующее сообщение: http://img201.imageshack.us/img201/5870/pstartah8.jpg

Можно ли начать процесс с различными учетными данными, чем ASPNET из ASP.NET (IIS 5.1)?

+1

любое окончательное решение с полным образец исходного кода работает по этому поводу? – Kiquenet 2013-07-05 06:34:55

ответ

3

Вы должны поместить привилегированный код в GAC (или запустить с полным доверием).

Код в GAC должен подтвердить XXXPermission, где XXX - это то, что вы запрашиваете, будь то олицетворение, доступ к жесткому диску или то, что у вас есть.

Необходимо немедленно отменить утверждение.

Вы должны убедиться, что API-адрес вашей DLL, помещаемый в GAC, не имеет возможности для жестокого обращения. Например, если вы пишете веб-сайт для того, чтобы позволить пользователям создавать резервные копии сервера через приложение командной строки, ваш API должен опубликовать метод наподобие «BackUp()», а не «LaunchAribitraryProcess (строка пути)».

Интернет.файл конфигурации также должен быть настроен на олицетворение, или вы столкнетесь с проблемами разрешения NTFS, а также с CAS.

Вот complete explanation.

0

Что именно вы пытаетесь сделать? Я не могу понять, в чем смысл вашего кода при создании другого исполняемого файла. Это выглядит довольно странно. Возможно, было бы более полезно указать проблему бизнеса, которую вы пытаетесь решить в первую очередь.

0

Похоже, вы пытаетесь заставить службу IIS олицетворять пользователя с более высокими привилегиями, чем сама служба (в данном случае - администратор). Windows блокирует это как дыру в безопасности, так как в этот момент вы в основном просите кого-то взять вашу систему. Возможно, есть способ обойти это ограничение, но не делайте этого - это для вашего же блага.

Вместо этого у меня IIS выдают себя за пользователя с ограниченными правами, у которого есть именно те права, которые вам нужны для этого. Например. создать учетную запись пользователя, которая владеет только папками, которые вы хотите, чтобы ваш веб-сервис писал, или какая-либо другая комбинация прав. Если вы выдаете себя за ограниченного пользователя, вы не увидите этот код ошибки, но все равно сможете вызвать исполняемый файл benign, который у вас есть.

 Смежные вопросы

  • Нет связанных вопросов^_^