No Windows, se eu recusar a solicitação de UAC de um aplicativo, por que ele não deve continuar em execução?

17

Vindo de um background Linux / Unix, não consigo entender como o UAC funciona no Windows.

Ouvi dizer que o UAC funciona assim sudo. Meu aplicativo Linux pode fazer algum outro trabalho antes de ligar sudo.

Mas no Windows, parece que todos os aplicativos que exigem confirmação do UAC devem ter o UAC concedido antes de realizar qualquer trabalho real! Eu executo um aplicativo, ele solicita a confirmação do UAC e eu o recuso - o aplicativo simplesmente não será executado.

Então, o UAC funciona assim?

sudo su
./run_app

Ao invés de:

./do_work1
sudo su
./du_work2

Obrigado pela ótima resposta de todos!

Howard
fonte

Respostas:

12

Ao fazer logon no Windows como usuário padrão, uma sessão de logon é criada e um token contendo apenas os privilégios mais básicos é atribuído. Dessa forma, a nova sessão de logon é incapaz de fazer alterações que afetariam todo o sistema. Ao fazer login como usuário no grupo Administradores, dois tokens separados são atribuídos. O primeiro token contém todos os privilégios normalmente concedidos a um administrador e o segundo é um token restrito semelhante ao que um usuário padrão receberia. Os aplicativos do usuário, incluindo o Shell do Windows, são iniciados com o token restrito, resultando em um ambiente de privilégios reduzido, mesmo sob uma conta de Administrador. Quando um aplicativo solicita privilégios mais altos ou "Executar como administrador" é clicado, o UAC solicitará confirmação e, se houver consentimento,

Pelo que entendi, o que essa última frase significa é que a caixa de diálogo do UAC é exibida antes do carregamento do aplicativo, para que seja iniciada com o token irrestrito ou se é iniciada com privilégios de usuário padrão e precisa de privilégios elevados para alguns. trabalho, ele precisa obter o consentimento do usuário e gerar um novo processo que é executado com direitos elevados . O token atribuído quando um processo é iniciado é o que determina seus direitos. Esse token não pode ser alterado posteriormente; portanto, se forem necessários mais direitos, será necessário gerar um novo processo.

Dessa maneira, o UAC não é exatamente o mesmo que sudo .

Karan
fonte
4
Na verdade, é o mesmo que sudo. A execução de "sudo su" não adiciona privilégios de root ao seu shell atual, ele inicia um novo shell em um processo separado. Se você sair desse shell, estará de volta ao primeiro.
wyzard --stop Prejudicar Monica--
1
A diferença entre o Windows e o Unix é que os programadores do Unix estão acostumados a fazer coisas em subprocessos, por isso é razoavelmente natural iniciar um subprocesso mais privilegiado para a parte específica da tarefa que precisa dos privilégios. No Windows, é mais comum fazer tudo em um único processo, e separar o trabalho em partes privilegiadas e não privilegiadas (executando em processos separados) parece muito com trabalho árduo. (É claro que, em muitos casos, é melhor para descobrir que você não tem o privilégio necessário de imediato, em vez da meio o trabalho!)
Harry Johnston
19

No Windows, o prompt do UAC é acionado quando você tenta executar um executável que está marcado como requerendo elevação em um manifesto incorporado no arquivo e você ainda não está executando elevado. O comportamento é mais parecido com setuid do que su, pois é o arquivo, não o comando que informa ao sistema operacional que o executável deve ser executado com credenciais diferentes.

Nicole Hamilton
fonte
4

É porque eles são diferentes, claros e simples. O UAC poderia ter sido implementado como sudo, mas não foi.

Você pode pensar nisso como uma analogia com a proteção de rede.

sudoé como quando um programa solicita acesso à rede e seu firewall solicita que você o conceda ou não. Você pode dizer sim e o programa abrirá o soquete, ou você pode dizer não e reclamará da falta de conexão e fará o que puder sem acesso à rede (alguns programas mal projetados realmente travam). Por exemplo:

function1();
input();
function2();
secure_operation(); //requests access
function3();        //may depend on results of previous operation; error-checking important

O UAC é mais parecido com o aviso que você recebe ao tentar abrir um arquivo que foi baixado para um volume NTFS. O Windows avisa sobre possíveis danos e pergunta se você deseja executá-lo (de todo) ou não. É uma operação de tudo ou nada; você não pode optar por confiar apenas em parte do programa e não em outros. Por exemplo:

if (requires_high_priv(program)) {
  if (request_priv(program))
    program();
}
else {
  program();
}

Você deve se lembrar de que, diferentemente do Linux, voltado para usuários e aplicativos avançados, o Windows foi projetado para ser amigável ao maior número de usuários possível, simplificando a segurança. Além disso, devido à sua grande superfície de exposição, é um alvo frequente de malware, por isso faz mais sentido confiar totalmente em um programa ou não.

Synetech
fonte
4

Eu não conheço completamente a arquitetura linux, então me perdoe se eu cometer um erro, mas meu entendimento é que Linux e Windows não são tão diferentes nesse aspecto ...

Um exemplo ... Um script de cópia que faz uma cópia de um arquivo normal para um local não protegido e um arquivo que tenta copiar para um local protegido e, em seguida, uma cópia regular novamente.

Meu entendimento é que, no Linux, um aplicativo simplesmente executa e tenta executar uma ação - se não tiver permissão para executar essa ação - ele falhará, mas continuará. No exemplo acima - ao executar o script de cópia no Linux como usuário comum, ele copiará o arquivo regular, dará um problema de permissão e copiará o segundo arquivo - se for executado com o sudo, ele fará as três cópias.

O Windows é exatamente o mesmo a esse respeito - a execução do script como um usuário não administrativo simplesmente copiará um, emitirá uma permissão no segundo e copiará o próximo. Com o UAC, ele executará todos os três.

A diferença é que muitos aplicativos do Windows simplesmente têm um conjunto de configurações para solicitar a elevação do UAC por padrão e encerrar / falhar se não o tiverem ... mas isso está se tornando muito menos.

William Hilsum
fonte
1
... e devo dizer que, depois de reler minha resposta e sua pergunta - não tenho 100% de certeza do que você está perguntando ... Espero que ajude, mas não tenho muita certeza: /
William Hilsum