每当 Windows UAC 弹出窗口出现以授予程序管理员权限时,答案都只有一个是/否。
有没有办法限制程序以管理员身份运行时可以执行的操作。大多数程序不需要所有权限,但只需要一点权限,而标准用户无法执行这些权限。
在 Linux 中,我现在能想到有多种方法:
根权限:将根权限划分为更小的权限
fakeroot
:当程序检查root
但实际上不需要它时
SELinux
和类似的工具:一切都必须明确授予
另一种询问方式是:我可以在授予管理员权限的同时限制程序可能造成的损害程度吗?
示例:授予某个程序查看某个特定程序地址空间的权限,但不是全部。
答案1
UAC 提示是一个全有或全无的命题,您要么允许程序管理员访问,要么根本不运行它。
这并不意味着您不能通过其他方式实现目标。例如,如果您想让用户访问特定进程的地址空间,您可以更改该进程的权限。文件和注册表项也是如此,尽管通常不建议更改文件系统和注册表中不属于您的部分的权限。
Stack Overflow 上的这个问题讨论了使请求管理员访问权限(但实际上不需要)的应用程序运行的方法。
理论上,你可以向单个帐户授予单个权限(例如备份权限),但尽管内核仍支持此功能,但 UAC 会破坏它。几乎所有你授予某人的管理员级权限都可以被利用来获得不受限制的管理员访问权限。
如果您想让用户执行特定的管理任务,更常见的方法是编写系统服务来代表用户执行工作。这通常需要将应用程序分成两部分,一部分作为系统服务运行并具有管理员访问权限,另一部分在用户桌面上运行,不具有管理员访问权限。
附录:UAC 不再会破坏向单个帐户授予单个权限的权限。如果您在 UAC 提示符下输入您自己的(非管理员)用户名和密码,则提升的进程将获得您的帐户被授予的任何单个权限。