Shutdown命令在非管理员用户下拒绝访问,是为什么?

文章正文
发布时间:2025-07-13 17:44

假设Admin是管理员帐户,Test是普通用户帐户。

很多用户很喜欢使用shutdown命令,因为不仅可以使用该命令定时关闭本地计算机,还可以很方便地关闭或者重启远程计算机。但是非常奇怪的是,只有管理员用户才能充分享用shutdown带来的便利,而普通用户则无此福分。如果企图在普通用户权限下用shutdown关机,就会收到“客户端没有所需的特权”的错误信息。
可能是因为简化开发步骤,shutdown被设计为不管是本地、还是远程关机/重启,都必须同时激活两个特权:一个是“关闭系统”(SeShutdownPrivilege)特权,还一个是“从远端系统强制关机”(SeRemoteShutdownPrivilege)特权。问题就在这里,普通用户没有“从远端系统强制关机”特权,所以无法借助shutdown关机或者重启。

实验查看shutdown必须激活两个特权

可以借助Tokenmon工具来验证shutdown关机需要同时激活两个特权:

登录到Test帐户环境下,注意这是一个普通用户帐户。
借助runas命令以Admin身份运行Tokenmon,设置过滤器为“shutdown*”,runas的命令可以是:
runas /user:admin Tokenmon
打开cmd命令提示符窗口,运行以下命令:
shutdown -s
将会收到“客户端没有所需的特权”的错误信息,这时候查看Tokenmon窗口,将会发现shutdown命令企图激活(enable)两个特权:SeShutdownPrivilege和SeRemoteShutdownPrivilege,如附图所示:216
实验结果也能证明shutdown确实需要同时激活两个特权,尽管本地关机/重启原本不需要SeRemoteShutdownPrivilege特权,但是shutdown还是非常“固执”地拒绝执行。
解决方案
到这里,解决思路似乎已经非常明朗了,只需要给users组帐户添加SeRemoteShutdownPrivilege特权即可。这种方法确实能够达到目的,但是Aaron Margosis并不这样认为,他建议的方法是给INTERACTIVE组帐户添加SeRemoteShutdownPrivilege特权,这是为什么?
原来这是为了防止远程攻击,由于只有交互登录用户的访问令牌里才有INTERACTIVE组的SID,所以可以确保远程恶意代码被排除在外。
首先做一个小实验,看看当前登录帐户Test所属的组:
很简单,打开一个CMD命令提示符窗口,运行以下命令:
whoami/groups
命令结果类似如下显示,可见交互登录帐户的访问令牌里有INTERACTIVE组的SID:C:\>whoami/groups
[Group 1] = "TestLab\None"
[Group 2] = "Everyone"
[Group 3] = "BUILTIN\Users"
[Group 4] = "NT AUTHORITY\INTERACTIVE"
[Group 5] = "NT AUTHORITY\Authenticated Users"
[Group 6] = "LOCAL"然后介绍如何给INTERACTIVE组添加SeRemoteShutdownPrivilege特权,Aaron Margosis在他的文章里介绍可以在本地安全策略里的本地策略→用户权利指派里找到“从远端系统强制关机”特权,然后在其属性对话框里添加INTERACTIVE组,如附图所示:

217

这里补充另外一种方法,可以借助Ntrights命令达到目的,只需在命令提示符下运行以下命令即可:
Ntrights -u Interactive +r SeRemoteShutdownPrivilege
给INTERACTIVE组添加了SeRemoteShutdownPrivilege特权后,注销Test帐户并重新登录,该Test帐户的访问令牌会自动获得SeRemoteShutdownPrivilege特权,可以在命令提示符下运行以下命令进行验证:
whoami /all
运行命令的结果如附图所示:

218

现在尝试在普通用户环境里使用shutdown关闭本地或者远程计算机,应该可以顺利完成了。

工具箱

Tokenmon:
Whoami:属于Support Tools工具包,位于Windows XP安装光盘的SUPPORT\TOOLS目录下,双击其下的setup程序即可安装
Ntrights:属于Windows Server 2003 Rource Kit Tools工具包,可以到微软官方网站搜索下载。

写在最后:Windows 2000/XP等即将退休的Windows产品,未能充分照顾到LUA的需要,有小部分功能组件可能有不合理的地方,例如本例的shutdown命令,还有修改时区,也需要管理员权限。至于第三方应用程序,也有很多没有考虑到LUA的需要,例如QQ,就不能在普通用户帐户下运行(当然解决办法很多,例如给其安装目录赋予users组Full Control权限)。这种情况在Windows Vista将会得到根本的解决。