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

17

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

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

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

O UAC funciona assim?

sudo su
./run_app

Em vez de:

./do_work1
sudo su
./du_work2

Obrigado pela ótima resposta de todos!

    
por Howard 22.09.2012 / 23:53

4 respostas

12

When logging into Windows as a standard user, a logon session is created and a token containing only the most basic privileges is assigned. In this way, the new logon session is incapable of making changes that would affect the entire system. When logging in as a user in the Administrators group, two separate tokens are assigned. The first token contains all privileges typically awarded to an administrator, and the second is a restricted token similar to what a standard user would receive. User applications, including the Windows Shell, are then started with the restricted token, resulting in a reduced privilege environment even under an Administrator account. When an application requests higher privileges or "Run as administrator" is clicked, UAC will prompt for confirmation and, if consent is given, start the process using the unrestricted token.

Pelo que entendi, o que essa última sentença significa é que o diálogo do UAC é exibido antes do carregamento do aplicativo, para que seja iniciado com o token irrestrito ou, caso seja iniciado com privilégios de usuário padrão e precise de privilégios elevados. Entre para algum trabalho, é necessário obter o consentimento do usuário e, em seguida, gerar um novo processo que, em seguida, é executado com direitos elevados . O token atribuído quando um processo é iniciado é o que determina seus direitos. Este token não pode ser alterado mais tarde, portanto, se mais direitos forem necessários, um novo processo precisará ser gerado.

Desta forma, o UAC não é exatamente o mesmo que sudo .

    
por 23.09.2012 / 00:19
19

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

    
por 23.09.2012 / 00:18
4

É porque são diferentes, simples 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ê conceda ou não. Você pode dizer sim e o programa abrirá o soquete, ou você pode dizer não e ele vai reclamar sobre a falta de conexão e fazer o que for possível 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 a maldade em potencial e pergunta se você deseja executá-la (ou não). É uma operação de tudo ou nada; você não pode 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ê tem que lembrar que, ao contrário do Linux, que é voltado mais para usuários e aplicativos avançados, o Windows foi projetado para ser fácil de usar para uma ampla variedade de usuários, simplificando a segurança. Além disso, devido à sua grande superfície de exposição, é um alvo frequente para malware, por isso, faz mais sentido confiar completamente em um programa ou não.

    
por 23.09.2012 / 00:09
4

Eu não conheço bem 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 sentido ...

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 ele não tiver permissão para executar essa ação - falhará nessa ação, mas continuará. No exemplo acima - ao executar o script de cópia no Linux como um usuário comum, ele copiará o arquivo regular, emitirá um problema de permissão e copiará o segundo arquivo - se executado com o sudo, ele fará todas as três cópias.

O Windows é exatamente o mesmo em relação a isso - executar o script como um usuário não administrativo simplesmente copia um, a permissão emite o segundo e copia o próximo. Com o UAC, ele executará os três.

A diferença é que muitos aplicativos do Windows simplesmente têm um conjunto de configurações para que eles peçam a elevação do UAC por padrão e parem / falhem se eles não o tiverem ... mas isso está se tornando muito menor.

    
por 23.09.2012 / 00:10

Tags