Pergunta

I têm problema com os processos iniciando no contexto representado no ASP.NET 2.0.

Estou começando novo Processo no meu código de serviço 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();
}

O "C: \ KB \ GetWindowUser.exe" é aplicação de consola contendo seguinte código:

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

Quando invoco serviço web sem representação, tudo funciona bem.

Quando ligo a representação, seguinte erro é escrito em "erros" variável no código de serviço web:

Excepção não processada: System.Security.SecurityException: Acesso negado. \ R \ n \ r \ n no System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels DesiredAccess, Boolean threadOnly) \ r \ n no System.Security. Principal.WindowsIdentity.GetCurrent () \ r \ n na ObfuscatedMdc.Program.Main (string [] args) \ r \ nA Zona do conjunto que falhou foi: \ r \ nMyComputer

usuário representado é administrador local e tem acesso a C:. \ KB \ GetWindowUser.exe executável

Quando eu especificar usuário janela explicitamente nas propriedades ProcesStartInfo Domínio, Usuário e Senha, eu tenho seguinte mensagem: http://img201.imageshack.us/img201/5870/pstartah8.jpg

É possível iniciar o processo com credenciais diferentes do que ASPNET do asp.net (IIS 5.1)?

Foi útil?

Solução

Você tem que colocar código privilegiado para o GAC (ou executado em confiança total).

O código no GAC deve afirmar o XXXPermission, onde XXX é o que sempre permissão você está solicitando, seja a representação, o acesso ao disco rígido ou o que você tem.

Você deve reverter o assert imediatamente afterwords.

Você deve se certificar de que a API no seu DLL que você colocar no GAC não tem oportunidades para o abuso. Por exemplo, se você estivesse escrevendo um site para permitir que os usuários de backup do servidor através de um aplicativo de linha de comando, a sua API deve velho expor um método como "backup ()" e não "LaunchAribitraryProcess (string path)"

O arquivo web.config deve ter representação configurar tão bem, ou você vai correr em problemas de permissão NTFS, bem como CAS.

Aqui está a completa explicação .

Outras dicas

Você também pode tentar envolver seu código dentro

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

conforme mencionado na http://www.devnewsgroups.net/group/ microsoft.public.dotnet.framework.windowsforms / topic62740.aspx

O que exatamente você está tentando fazer? Eu não consigo ver o que o ponto de seu código é em criar um executável diferente. Parece um pouco estranho. Talvez seria mais útil para indicar o problema busines você está tentando resolver em primeiro lugar.

Parece que você está tentando ter o impersonate serviço IIS um usuário com privilégios mais elevados do que o próprio serviço (neste caso, um administrador). Windows bloqueia isso como uma falha de segurança, uma vez que nesse ponto você está implorando basicamente alguém para assumir seu sistema. Pode haver uma maneira de contornar esta limitação, mas não faça isso. - É para o seu próprio bem

Em vez disso, ter o IIS representar um usuário com permissões limitadas, que tem exatamente os direitos que você precisa ter. Por exemplo. criar uma conta de usuário que possui apenas as pastas que deseja o seu serviço web para escrever, ou qualquer outra combinação de direitos é apropriado. Se passar por um usuário limitado, você não vai ver este código de erro, mas ainda deve ser capaz de chamar o executável benigna você tem aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top