Answers:
以标准用户身份登录Windows时,将创建一个登录会话,并分配仅包含最基本特权的令牌。这样,新的登录会话将无法进行会影响整个系统的更改。在Administrators组中以用户身份登录时,将分配两个单独的令牌。第一个令牌包含通常授予管理员的所有特权,第二个令牌是类似于标准用户将收到的受限令牌。然后,使用受限令牌启动包括Windows Shell在内的用户应用程序,即使在管理员帐户下,也会导致特权降低的环境。当应用程序请求更高的特权或单击“以管理员身份运行”时,UAC将提示您进行确认;如果获得同意,
据我了解,最后一句话的意思是,要么在加载应用程序之前显示UAC对话框,以便以不受限制的令牌启动它,否则,如果它以标准用户特权启动并且在某些情况下需要提升特权,工作时,它需要征得用户的同意,然后产生一个新进程,然后以提升的权限运行。进程启动时分配的令牌决定了它的权限。此令牌无法在以后更改,因此,如果需要更多权限,则需要产生一个新进程。
这样,UAC与sudo并不完全相同。
在Windows下,当您尝试运行可执行文件时会触发UAC提示,该可执行文件在嵌入在文件中的清单中标记为需要提升,并且尚未运行提升。该行为更像setuid而不是su,因为它是文件,而不是告诉OS可执行文件将使用不同凭据运行的命令。
这是因为它们是不同的,简单而简单的。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被设计为对尽可能多的用户友好,因此简化安全性至关重要。此外,由于其暴露面很大,因此经常成为恶意软件的攻击目标,因此完全信任某个程序或完全不信任该程序更有意义。
我不完全了解linux体系结构,所以如果我犯了一个错误,请原谅我,但是我的理解是Linux和Windows在这方面根本没有什么不同...
一个示例...复制脚本,它将普通文件复制到不受保护的位置,然后将文件尝试复制到受保护的位置,然后再次将其复制到常规位置。
我的理解是,在Linux中,应用程序只是运行并尝试执行一个操作-如果它没有执行该操作的权限-它将使该操作失败,但会继续进行。在上面的示例中-以常规用户身份在Linux中运行复制脚本时,它将复制常规文件,发出权限问题并复制第二个文件-如果使用sudo运行,它将进行全部三个复制。
Windows在这方面是完全相同的-以非管理用户身份运行脚本将仅复制一个,权限发布第二个,然后复制下一个。使用UAC,它将同时运行所有三个程序。
区别在于,许多Windows应用程序仅具有配置集,因此默认情况下它们会要求UAC提升,如果没有,则会退出/失败。...但是,这种情况变得越来越少了。