当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

作者:精品下载站 日期:2024-12-14 23:38:02 浏览:17 分类:玩电脑

允许或阻止非管理员用户重新启动/关闭 Windows


在本文中,我们将了解管理非管理员用户重新启动或关闭 Windows 工作站或服务器的权限的几种方法。默认情况下,非特权用户只能重新启动和关闭桌面版本的 Windows,而无法重新启动 Windows Server 主机(开始菜单中没有关闭和重新启动按钮)。是否可以允许没有本地管理员权限的用户重新启动 Windows Server?还有一个反向任务——如何阻止用户重新启动装有 Windows 10 或 11 的计算机,该计算机用作信息亭、调度控制台等。

如何通过 GPO 允许或阻止 Windows 中的关机/重新启动选项?

您可以使用 GPO 部分计算机配置 -> 策略 -> Windows 设置 -> 安全设置 -> 本地策略 -> 用户权限分配中的关闭系统参数设置重新启动或关闭 Windows 的权限。 此 GPO 选项允许您指定哪些本地登录用户可以关闭操作系统。

请注意,桌面版本Windows 10/11和Windows Server版本的默认重启/关闭权限是不同的。

打开本地组策略编辑器 (gpedit.msc) 并导航到上面指定的部分。如您所见,本地组管理员用户备份操作员的成员有权关闭/重新启动运行Windows 10 或11的计算机。

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

Windows Server 2022/2019/2016 上,只有管理员备份操作员可以关闭或重新启动服务器。这是合理的,因为在大多数情况下,非管理员用户不得拥有关闭服务器的权限(即使是意外)。想象一下,由于用户不小心单击“开始”菜单中的“关闭”按钮,RDS 场主机经常会关闭......

在 Active Directory 域控制器上,关闭 Windows 的权限被委托给:

  • 管理员

  • 备份操作员

  • 服务器运营商

  • 打印操作员

如果用户没有重新启动/关闭操作系统的权限,则运行以下命令时会出现错误:

shutdown -r -t 0
Access is denied.(5)

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

如果您想要允许特定用户(没有管理员权限)重新启动 Windows Server,您需要将其帐户添加到此策略并更新计算机上的 GPO 设置。

您可以使用 Windows Server 2003 资源工具包中的旧版 ntrights 工具手动授予在本地关闭计算机的权限:

ntrights +r SeShutdownPrivilege -u a-d\j.smith

防止用户关闭或重新启动 Windows:

ntrights -r SeShutdownPrivilege -u a-d\j.smith

或者,反之亦然,您可以阻止运行桌面 Windows 10/11 版本的工作站的用户重新启动执行某种服务器功能的计算机。在这种情况下,只需从本地策略关闭系统中删除用户组即可。

以同样的方式,您可以使用域 GPO 阻止(或允许)Active Directory 域的特定组织单位 (OU) 中的所有计算机上的非管理员用户执行关闭/重新启动操作。

  1. 在 AD 中创建 grpAllowRestartComputers 用户组,您要向其授予重新启动计算机的权限。您可以使用 ADUC 管理单元创建新组(

    dsa.msc

    ) 或 New-ADGroup PowerShell cmdlet。将用户添加到组中;

  2. 打开域组策略管理控制台(

    gpmc.msc

    )。选择您想要应用策略的计算机所在的 OU,然后选择在此域中创建 GPO 并将其链接到此处

    [玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

  3. 设置 GPO 名称 (gpoAllowReboot) 并进行编辑;

  4. 导航到计算机配置 -> 策略 -> Windows 设置 -> 安全设置 -> 用户权限分配;

  5. 打开关闭选项,启用策略,然后添加您的目标组 (

    grpAllowRestartComputers

    )和内置的

    Administrators

    团体;

    [玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

  6. 更新目标计算机上的 GPO 设置并使用以下命令检查生成的 GPO 设置

    rsop.msc

    管理单元。您组中的用户现在可以关闭或重新启动该主机;

  7. 关闭和重新启动操作系统的选项将出现在用户的“开始”菜单中。

    [玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您还可以向非管理员用户授予启动/停止/重新启动服务的权限。

无需管理员权限即可远程关闭/重启

您可以允许某些非管理员用户使用以下命令远程重新启动 Windows Server

shutdown

命令,而不授予他们本地管理员权限、通过远程桌面 (RDP) 登录的权限或本地登录权限(如果不允许此登录方法)

为此,请将用户帐户添加到同一 GPO 部分中的从远程系统强制关闭组策略选项(用户权限分配)。

默认情况下,只有管理员可以远程关闭/重新启动服务器。将用户帐户添加到策略中。

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您还可以使用 ntrights 命令行工具授予 SeRemoteShutdownPrivilege:

ntrights +r SeRemoteShutdownPrivilege -u a-d\j.smith

之后,用户将获得SeRemoteShutdown权限,并能够使用以下命令远程重新启动服务器:

shutdown -m \hamb-rds01 -r -f -t 0

或者使用重新启动计算机 PowerShell cmdlet:

Restart-Computer -ComputerName hamb-rds01 -Force
VERBOSE: Performing the operation "Enable the Remote shutdown access rights and restart the computer." on target ...

如果远程计算机上启用了 WinRM(Windows 远程管理),则可以使用 WSman 而不是 WMI 进行连接:

Restart-Computer -ComputerName hamb-rds01 -Protocol WSMan

如果用户没有权限连接到 WMI 命名空间,则会出现错误:

Restart-Computer : Failed to restart the computer srv-rds1 with the following error message: The WS-Management servicecannot process the request. The WMI service returned an 'access denied' error. .

此外,您可以使用 Windows PowerShell Just Enough Administration (JEA) 来允许用户仅在远程主机上运行某些命令。

禁用(隐藏)Windows 中的关机或重新启动选项?

您可以使用组策略从登录屏幕和“开始”菜单中隐藏“关机”、“重新启动”、“睡眠”和“休眠”选项。此 GPO 选项称为删除并阻止访问关机、重新启动、睡眠和休眠命令,位于用户配置 -> 管理模板 -> 开始菜单和任务栏

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

启用此策略后,用户将只能断开当前会话或使用

logoff

命令。关机、睡眠和重新启动按钮将变得不可用。

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您可以使用一些注册表调整来仅隐藏 Windows 电源/关机菜单中的特定项目。例如,您只想隐藏“开始”菜单中的“关机”选项,但保留“重新启动”。

  1. 打开注册表编辑器(

    regedit.exe

    );

  2. 转到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown

  3. 选项更改为1

    [玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

  4. 这将仅隐藏 Windows 开始菜单中的“关机”选项。

    [玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您可以从命令提示符设置此注册表选项:

REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown" /v "value" /t REG_DWORD /d 1 /f

或者使用 PowerShell:

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\Start\HideShutDown" -Name "value" -Value 1

此外,您还可以隐藏“开始”菜单和 Windows 登录屏幕中的其他选项:

  • 仅隐藏 Windows 中的重新启动选项:

    REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideRestart " /v "value" /t REG_DWORD /d 1 /f
  • 在 Windows 中的“开始”菜单中隐藏休眠选项:R

    EG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideHibernate" /v "value" /t REG_DWORD /d 1 /f
  • 从开始菜单隐藏睡眠

    REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HideSleep" /v "value" /t REG_DWORD /d 1 /f
  • 要完全禁用电源按钮并从 WinX 菜单中删除“关机或注销”选项:

    REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\default\Start\HidePowerButton" /v "value" /t REG_DWORD /d 1 /f

如果这些设置在您的计算机上不起作用,请检查 HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start\ 下的类似注册表项。

请注意,在Windows Server 2019/2022中,为用户分配重启权限后,可能会出现错误:

You don’t have permission to shutdown or restart this computer.

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

在这种情况下,您需要在 GPO 中启用 UAC 参数“用户帐户控制:以管理员批准模式运行所有管理员”:

如何找出谁重新启动/关闭了 Windows 服务器?

如果您已授予非管理员用户重新启动计算机的权限,您可能想知道是谁重新启动了 Windows Server:用户还是管理员之一。

使用事件查看器(

eventvwr.msc

)在 Windows 中搜索关机日志。转至 Windows 日志 -> 系统,然后按事件 ID 1074 筛选当前日志。

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您还可以使用事件查看器中的事件筛选器来查看 RDP 连接日志。

正如您所看到的,日志中按时间顺序显示了服务器重启事件。事件描述包括重启时间、原因以及重启主机的用户帐户。

Log Name:SystemSource: User32
EventID: 1074
The process C:\Windows\system32\shutdown.exe (BE-BAK01) has initiated the restart of computer MUN-BAK01 on behalf of user corp\jsmith for the following reason: No title for this reason could be foundReason Code: 0x800000ff
Reason Code:  0x500ff
Shutdown Type: restart
Comment:

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您可以使用相同的事件 ID 1076 获取有关最近的 Windows 关闭事件的信息:

The process C:\Program Files\VMware\VMware Tools\vmtoolsd.exe (MUN-BAK1) has initiated the shutdown of computer MUN-BAK1 on behalf of user NT AUTHORITY\SYSTEM for the following reason: Legacy API shutdown
Reason Code: 0x80070000
Shutdown Type: shutdown
Comment:

使用以下简单的 PowerShell 脚本列出最近十个计算机重新启动和关闭事件。此列表包含启动重新启动的用户和进程的名称。

Get-EventLog -LogName System |
where {$_.EventId -eq 1074} |select-object -first 10 |
ForEach-Object {
$rv = New-Object PSObject | Select-Object Date, User, Action, process, Reason, ReasonCode
if ($_.ReplacementStrings[4]) {
$rv.Date = $_.TimeGenerated
$rv.User = $_.ReplacementStrings[6]
$rv.Process = $_.ReplacementStrings[0]
$rv.Action = $_.ReplacementStrings[4]
$rv.Reason = $_.ReplacementStrings[2]
$rv
}
} | Select-Object Date, Action, Reason, User, Process |ft

[玩转系统] 允许或阻止非管理员用户重新启动/关闭 Windows

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯