문제

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 : KB getWindowUser.exe"는 다음 코드를 포함하는 콘솔 응용 프로그램입니다.

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

가장없이 웹 서비스를 호출하면 모든 것이 잘 작동합니다.

사망자를 켜면 웹 서비스 코드의 "오류"변수로 다음 오류가 작성됩니다.

처리되지 않은 예외 : System.Security.SecurityException : 액세스가 거부됩니다. .getCurrent () r n at obfuscatedmdc.program.main (String [] args) r n 실패한 어셈블리의 영역은 다음과 같습니다. r nmycomputer

가장 한 사용자는 로컬 관리자이며 C : KB getWindowUser.exe 실행 파일에 액세스 할 수 있습니다.

ProcessTartInfo 속성 도메인, 사용자 및 비밀번호에 Window 사용자를 명시 적으로 지정하면 다음 메시지를 받았습니다.http://img201.imageshack.us/img201/5870/pstartah8.jpg

ASP.NET (IIS 5.1)의 ASPNET와 다른 자격 증명으로 프로세스를 시작할 수 있습니까?

도움이 되었습니까?

해결책

특권 코드를 GAC에 넣거나 전체 신뢰로 실행해야합니다.

GAC의 코드는 xxxpermission을 주장해야합니다. 여기서 xxx는 당신이 요청하는 권한, 사칭, 하드 드라이브에 대한 액세스 또는 당신이 가진 것에 대한 권한입니다.

당신은 즉시 어설 션을 뒤집어 야합니다.

GAC에 넣은 DLL의 API에 학대 기회가 없도록해야합니다. 예를 들어, 사용자가 명령 줄 애플리케이션을 통해 서버를 백업 할 수 있도록 웹 사이트를 작성하는 경우 API는 "Backup ()"과 같은 메소드를 노출시켜야합니다.

web.config 파일에는 도약이 설정되어 있어야합니다. 그렇지 않으면 CAS뿐만 아니라 NTFS 권한 문제가 발생합니다.

여기에 있습니다 완전한 설명.

다른 팁

코드를 내부로 포장 해보려고 할 수도 있습니다

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

언급했듯이http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic62740.aspx

정확히 무엇을하려고합니까? 다른 실행 파일을 생성하는 데있어 코드의 요점이 무엇인지 알 수 없습니다. 다소 이상해 보입니다. 아마도 먼저 해결하려는 비즈니스 문제를 언급하는 것이 더 도움이 될 것입니다.

IIS 서비스가 서비스 자체 (이 경우 관리자)보다 높은 권한을 가진 사용자를 가장하려고하는 것 같습니다. Windows는 이것을 보안 구멍으로 차단합니다. 그 시점에서 기본적으로 누군가에게 시스템을 인수하도록 간청하기 때문입니다. 이 한계를 해결하는 방법이있을 수 있지만 그렇게하지는 않습니다. 그것은 자신의 이익을위한 것입니다.

대신, IIS가 제한된 권한을 가진 사용자를 가장 한 권리를 가진 사용자를 가장하십시오. 예 : 웹 서비스가 작성하려는 폴더 만 소유하거나 다른 권한 조합이 적절한 사용자 계정을 만듭니다. 제한된 사용자를 가장하는 경우이 오류 코드가 표시되지 않지만 여기에있는 양성 실행 파일을 호출 할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top