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