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

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

Vindo de experiência 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 o arquivo 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 me pede a confirmação do UAC e eu recuso - o aplicativo simplesmente não será executado.

Então o UAC funciona assim?

sudo su
./run_app

Em vez de:

./do_work1
sudo su
./du_work2

Obrigado pela ótima resposta de todos!

Responder1

Ao fazer login 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 fica 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 então iniciados com o token restrito, resultando em um ambiente de privilégios reduzidos, mesmo sob uma conta de Administrador. Quando um aplicativo solicita privilégios mais altos ou clica em “Executar como administrador”, o UAC solicitará confirmação e, se o consentimento for dado, iniciará o processo usando o token irrestrito.

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

Desta forma, o UAC não é exatamente o mesmo quesudo.

Responder2

No Windows, o prompt do UAC é acionado quando você tenta executar um executável que émarcado como exigindo elevação em um manifestoincorporado 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.

Responder3

É porque eles são diferentes, puros e simples. UACpoderiaforam implementados 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 ele reclamará da falta de conexão e fará tudo o que puder sem acesso à rede (alguns programas mal projetados 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 em 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 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 lembrar que, diferentemente do Linux, que é mais voltado para usuários e aplicativos avançados, o Windows foi projetado para ser amigável ao maior número possível de usuários, portanto, simplificar a segurança é fundamental. Além disso, devido à sua grande superfície de exposição, é um alvo frequente de malware, por isso faz mais sentido confiar completamente num programa ou não confiar de todo.

Responder4

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 tentando copiar para um local protegido e, em seguida, uma cópia normal novamente.

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

O Windows é exatamente o mesmo nesse aspecto - executar o script como um usuário não administrativo simplesmente copiará um, emitirá 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 uma configuração definida para solicitar a elevação do UAC por padrão e encerrar/falhar se não a tiverem... mas isso está se tornando muito menos.

informação relacionada