在Windows中,如果我拒绝应用程序的UAC请求,为什么不能继续运行它?


17

来自Linux / Unix背景,我无法理解UAC在Windows中的工作方式。

我听说UAC的工作方式类似于sudo。我的Linux应用程序可以在调用之前做一些其他工作sudo

但是在Windows中,似乎所有需要UAC确认的应用程序都必须在完成任何实际工作之前已授予UAC!我运行一个应用程序,它要求我确认UAC,但我拒绝了-该应用程序将无法运行。

那么UAC会这样工作吗?

sudo su
./run_app

而不是:

./do_work1
sudo su
./du_work2

感谢大家的精彩回答!

Answers:


12

以标准用户身份登录Windows时,将创建一个登录会话,并分配仅包含最基本特权的令牌。这样,新的登录会话将无法进行会影响整个系统的更改。在Administrators组中以用户身份登录时,将分配两个单独的令牌。第一个令牌包含通常授予管理员的所有特权,第二个令牌是类似于标准用户将收到的受限令牌。然后,使用受限令牌启动包括Windows Shell在内的用户应用程序,即使在管理员帐户下,也会导致特权降低的环境。当应用程序请求更高的特权或单击“以管理员身份运行”时,UAC将提示您进行确认;如果获得同意,

据我了解,最后一句话的意思是,要么在加载应用程序之前显示UAC对话框,以便以不受限制的令牌启动它,否则,如果它以标准用户特权启动并且在某些情况下需要提升特权,工作时,它需要征得用户的同意,然后产生一个新进程,然后以提升的权限运行。进程启动时分配的令牌决定了它的权限。此令牌无法在以后更改,因此,如果需要更多权限,则需要产生一个新进程。

这样,UAC与sudo并不完全相同。


4
实际上,它与sudo相同。运行“ sudo su”不会为您当前的shell添加root特权,它会在一个单独的进程中启动一个新的 shell。如果退出该shell,则返回第一个。
Wyzard

1
Windows和Unix之间的区别在于,Unix程序员习惯于在子进程中执行操作,因此为需要特权的任务的特定部分启动一个更具特权的子进程是很自然的。在Windows中,通常是在单个进程中完成所有操作,并且将作业分为不同的特权和非特权部分(在单独的进程中运行)看起来非常像艰苦的工作。(当然,在许多情况下,最好是立即发现自己没有必要的特权,而不是半途而废!)
Harry Johnston


4

这是因为它们是不同的,简单而简单的。UAC 可以像一样实施sudo,但事实并非如此。

您可以将其视为网络保护的类比。

sudo就像当程序请求网络访问而您的防火墙提示您是否授予它访问权限时一样。您可以说是,程序将打开套接字,或者您说不,它将抱怨缺少连接,并且在没有网络访问的情况下会做任何事情(某些设计欠佳的程序实际上会崩溃)。例如:

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

UAC更像是尝试打开已下载到NTFS卷的文件时收到的警告。Windows会警告您潜在的危害,并询问您是否要运行它(根本)。这是一个全有或全无的操作;您不能选择仅信任程序的一部分,而不能信任其他程序。例如:

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

您必须记住,与Linux更加适合高级用户和应用程序不同,Windows被设计为对尽可能多的用户友好,因此简化安全性至关重要。此外,由于其暴露面很大,因此经常成为恶意软件的攻击目标,因此完全信任某个程序或完全不信任该程序更有意义。


4

我不完全了解linux体系结构,所以如果我犯了一个错误,请原谅我,但是我的理解是Linux和Windows在这方面根本没有什么不同...

一个示例...复制脚本,它将普通文件复制到不受保护的位置,然后将文件尝试复制到受保护的位置,然后再次将其复制到常规位置。

我的理解是,在Linux中,应用程序只是运行并尝试执行一个操作-如果它没有执行该操作的权限-它将使该操作失败,但会继续进行。在上面的示例中-以常规用户身份在Linux中运行复制脚本时,它将复制常规文件,发出权限问题并复制第二个文件-如果使用sudo运行,它将进行全部三个复制。

Windows在这方面是完全相同的-以非管理用户身份运行脚本将仅复制一个,权限发布第二个,然后复制下一个。使用UAC,它将同时运行所有三个程序。

区别在于,许多Windows应用程序仅具有配置集,因此默认情况下它们会要求UAC提升,如果没有,则会退出/失败。...但是,这种情况变得越来越少了。


1
...而且,我不得不说,在重新阅读我的回答和您的问题之后-我不是100%知道您在问什么...我希望这会有所帮助,但不太确定:/
William Hilsum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.