O Windows 7 agenda um início de processo com privilégios de administrador para um usuário padrão

1

Na minha máquina Win7 pessoal, minha conta de usuário é uma conta padrão, e há também uma conta de administrador que eu obviamente controlei. Um aplicativo que eu inicie com o Windows precisa de privilégios de administrador para funcionar corretamente. É a barra lateral do AIDA64, caso alguém esteja curioso.

Eu pesquisei neste site, na Web e nos fóruns de suporte do AIDA64 para obter ideias sobre como fazê-lo funcionar, sem bons resultados. Eu agendei tarefas para que ele fosse iniciado sob a conta admin, mas, nesse caso, ele nunca é exibido para o usuário padrão (embora, se o usuário padrão o iniciar manualmente "como admin", ele funcionará bem). Como alternativa, posso agendar para o usuário padrão com "privilégios mais altos", que eu já recomendei dezenas de vezes, mas isso não funciona, pois ele usa apenas os privilégios acessíveis mais altos do usuário, e não os do administrador, mesmo se o administrador for aquele agendando a tarefa!

O mais parecido com uma solução real que vi é usar runas /savedcred na tarefa agendada, mas isso é uma enorme falha de segurança que ninguém recomenda. Se essa é a única maneira de fazer isso, prefiro apenas tornar minha conta de usuário um administrador e acabar com isso.

Eu sei que há muitas opções de segurança que eu desconheço ou nunca usei. Eu espero que haja alguma maneira de conseguir isso que eu ainda não considerei.

    
por Dave Johnson 05.01.2015 / 07:59

2 respostas

1

Existem várias maneiras de executar o aplicativo

  1. Abra o CMD como administrador e vá para o diretório onde o aplicativo está armazenado e tente iniciar o aplicativo Via cmd shell

  2. Abra novamente o cmd shell como Administrador e use o PsExec para iniciar o aplicativo usando uma conta de administrador diferente e examine o processador se o aplicativo for iniciado em uma sessão diferente (suponho que você criará outro usuário administrador em sua máquina)

  3. Tente iniciar o aplicativo com token Elevado usando a opção PsExec -h do shell cmd admin, se funcionar, o aplicativo também será iniciado a partir da conta do Administrador padrão da sua máquina, se estiver ativado em compmgmt.msc

  4. usando o mesmo shell cmd elevado tente iniciar o aplicativo na sessão 0 veja se ele funciona usando Psexec -s -i 0 app e examine o processo explorador se ele for realmente lançado

  5. você também pode tentar iniciar o aplicativo em sua sessão atual na conta do sistema e ver se funciona

  6. você também pode usar o psexec para iniciar o aplicativo com privilégios de usuário do shell do administrador usando a opção psexec -u user -p password e veja se ele é iniciado

Tente também na opção de tarefas para iniciar seu aplicativo e, finalmente, você pode usar o processador explorer > opções > selecione coloums > ver linha de comando para ver exatamente qual comando o aplicativo usa para iniciar quando é iniciado sob o administrador como você disse, então você pode usar o mesmo comando para iniciar o aplicativo, com isso você também pode depurar por que o aplicativo não está sendo iniciado usando tarefas agendadas e aprendendo do processador explorador

    
por 05.01.2015 / 15:51
1

O método at /interactive parece ser ideal, mas só permite agendar uma tarefa em um horário específico. Se você quiser alguns critérios de inicialização sofisticados ou executar uma tarefa em um logon de usuário, isso não ocorrerá. A melhor solução que consegui alcançar foi a seguinte:

  • faça o download do PsTools: link , descompacte e adicione o diretório ao% PATH%
  • crie um arquivo em lotes:

    @echo off
    for /f "tokens=3 delims= " %%a in ('qwinsta ^| find /i "active"') do ( set SID=%%a )
    PsExec.exe -i %SID% -h %*
    

    Você pode ter que substituir 'ativo' por seu termo localizado, se você tiver a versão localizada do Windows (por exemplo, no Windows polonês é 'aktywna'). Basta verificar com qwinsta . Esse arquivo em lotes determina o ID da sessão da sessão ativa e executa um comando com as credenciais do usuário atual, mas na sessão da ID da sessão detectada.

  • execute o agendador de tarefas como administrador e crie uma tarefa. Configure-o para ser executado como administrador com privilégios elevados, independente do usuário estar logado. Defina os critérios desejados para executar a tarefa. Configure a ação para executar seu arquivo em lote e configure a string de parâmetros para:

    -d -u admin_user -p password yourApp.exe
    

    Se o seu aplicativo for um CLI, omita o -d . O usuário e a senha da conta que é usada para a tarefa precisam ser fornecidos, caso contrário, os aplicativos da GUI não funcionarão corretamente (não sei por que; talvez os aplicativos da CLI funcionem bem, eu não verifiquei). Em vez de fornecer usuário e senha, você pode fornecer a opção -s , mas seu aplicativo será executado com a conta do sistema local.

O efeito da execução da tarefa é semelhante ao clicar com o botão direito do mouse em um executável e selecionar "executar como administrador", mas sem que o UAC seja exibido. Dessa forma, depois de criar o arquivo de lote, você poderá criar facilmente as próximas tarefas e o lote fará com que sejam executadas na sessão ativa. A segurança provavelmente não é perfeita assim, a menos que seus usuários sejam confiáveis, mas pelo menos sua senha de administrador não é armazenada em texto não criptografado dentro do arquivo de lote, e também a tarefa em si não é visível para usuários comuns. Para tornar a segurança um pouco melhor, você pode tornar o arquivo em lote e o executável de destino indisponíveis para os usuários que não sejam admin. E você precisa ter certeza de que ninguém tem um login contendo 'ativo' ou qualquer palavra usada em sua versão local do Windoze - ou você terá que reforjar o lote e adicionar outro for , tornando-o complicado (ou use o PowerShell ou UnxUtils).

    
por 14.03.2016 / 14:53

Tags