关于 Administrator 账户的一个紧急发布
本文最后更新于:1 分钟前
前言
在之前的文章中,我们提到了如何切换为 Administrator 账户或者使当前账户具有管理员权限。但近期我发现网上似乎出现了一些抵制使用内置管理员为主账户的说法,所以到底是否可以将 Administrator 作为主账户,这期文章就来简单说明一下。
正文
我从接触电脑开始,一直使用 Administrator 账户。因为当时还依赖盗版系统,默认就是 Administrator,后来自己学会安装官方系统了,还主动切换到 Administrator 账户,因为它是真的香,懂得都懂。但相信大家在使用 Administrator 的时候,可能遇到过这样的情况:有些软件或其部分功能拒绝在管理员账户中运行。我也一直以来用过许多软件,目前为止有3款软件具有这种情况。第一款由于是好几年前的了,且不常用,已经忘记名称了,表现为:在管理员模式下直接警告无法运行。第二款就是最近遇到的,IDM,居然也不能在管理员模式下运行了,提示:您正以管理员身份运行IDM。在该模式下,IDM 无法接管浏览器的下载事件,更令人困惑的是,这在之前的版本是没有的,所以我又回退到之前用的版本。第三款,cvr (全称你们来猜),居然不能在管理员模式下设置开机启动,这在以前的版本中也是没有的。
我属实被这些软件迷惑行为给整不会了,因为它们在那之前都可以正常运行。有时我觉得这可能是开发者道听途说或者是误解 (本文结尾提出我的猜测) 一些机制故意而为的,有时我又觉得是不是内置管理员真的不能用了?但是看到目前我电脑里的其他软件都能在管理员模式下正常运行和设置开机启动,我就更无法理解这样的做法了。
我上网查找过相关说法,主要有以下几点:
- 【安全方面】最低权限原则。内置管理员权限较高,默认绕过 UAC,作为主账户的话会导致恶意软件顺利提权并对计算机造成破坏。
- 【特殊性】内置管理员是系统特殊账户,在某些方面具有一定的限制机制,将导致个别软件无法正常运行 (?)。
首先第一点,我觉得只要有一定的安全意识,足以避免大多数安全问题。但凡一点安全意识都没有,那普通账户 (无管理员权限) 也救不了你了,恶意软件仍会弹出授权提示,而说不定你也会在不明不白中点个允许。除非你禁用 UAC,所有软件都以最低权限允许,但这也并非官方推荐。总之在我看来,对于第一点,你可以使用管理员或者是普通账户,实在放心不下就安装个火绒。
第二点,说实话我不怎么相信这个说法,因为我没遇到过。说到特殊性的话,我觉得 Administrator 也没有 SYSTEM 以及相关一些服务账户那样特殊。但就算他有特殊性,那也不至于连个开机启动都不能设置吧,我也开发过程序 (PlainCEETimer),也可以在 Administrator 下设置开机启动。
此外,对于第二点,网上还有说法。若实在想使用自带管理员权限的账户,可以自己在 Administrators 组创建一个,然后关掉管理员批准模式,这都比直接使用内置管理员账户好得多。这个说法稍微看的过去,因为很多软件判断当前是否为管理员的方法,只是检测用户名是否为 Administrator,而不是去检测当前账户是否真的具有管理员权限。因此,使用自带管理员权限的非内置管理员账户,可以避开这个检测机制。
总结
- 如果你现在正在使用 Administrator 且没有遇到致命的问题,可以继续使用。
- 如果你准备重装系统,可以尝试创建一个自带管理员权限的非内置管理员账户,可以看看这篇文章。
- 你也可以保持使用普通账户,但注意需要开启 UAC。
猜测
这里对于个别软件不让在管理员模式下运行的行为进行一个猜测。我觉得开发者应当更关心会话的问题。比如用户以 UserA 账户登入系统,但是却以管理员 (Administrator) 身份运行这个软件。如果设置开机启动或进行其他针对单个账户的操作的话,就要将写入 %AppData%
文件夹或者是注册表 HKCU
,或者是用什么钩子之类的。然而此时获取到的 %AppData%
、HKCU
、装的钩子等是针对于 Administrator 的而不是 UserA 的。也就是说下次重启系统,UserA 登入后软件不会自动启动,相关钩子也钩错账户了,除非以 Administrator 账户登入。否则肯定无法达到预期。
但事实是:如果用户不执行任何提权操作来运行软件的话,是可以设置开机启动和钩子并且生效的,无论是否为管理员。
如果要避免这种 “脚踏两只船” 的情况的话,是可以进行判断的,而不应该直接禁止管理员模式下设置开机启动和启动钩子。思路就是运行外部命令获得输出 判断当前系统登入的账户与进程所有者账户的名称是否相等 (推荐先将输出转换为小写),若相等则可以设置开机启动和钩子。具体方法如下:
获取当前系统登入的账户 (注:wmic 在新版 Windows 中可能会以可选功能的形式推出,默认不安装,则下列命令将无法运行):
1 |
|
获取进程所有者:
1 |
|
当然,如果是 C# 的话,除了上述方法外,也有通过 API 获取的方法,更直接与稳定。这里就不详细展开了,详见此处。
参考
- 一招教你 100% 成功获取管理员权限或提升为管理员账户 | WangHaonie 的博客
https://wanghaonie.github.io/posts/54ae615f8ae4/ - 装系统神器!WinNTSetup 里你绝对没有用过的无人值守 | WangHaonie 的博客
https://wanghaonie.github.io/posts/0e9bf7b6bb91/