非管理员用户启动windows服务

微软2年前 (2021)发布 megou
612 0

如何允许非管理员用户启动/停止 Windows 服务?

默认情况下,普通(非管理员)用户无法管理 Windows 服务。这意味着用户无法停止、启动、重新启动或更改 Windows 服务的设置/权限。在某些情况下,用户需要具有重启或管理某些服务的权限。在本文中,我们将介绍几种管理 Windows 服务权限的方法。特别是,我们将向您展示如何通过授予适当的权限来允许非管理员用户启动、停止和重新启动特定的 Windows 服务。

假设,您需要授予域帐户contoso\tuser重新启动Print Spooler服务(服务名称 – spooler)的权限。当非管理员尝试重新启动服务时,会出现错误:

非管理员用户启动windows服务

Windows 中没有简单方便的内置工具来管理服务权限。我们将考虑一些方法来授予用户管理服务的权限:

 

 

使用 SC.exe(服务控制器)工具设置 Windows 服务权限

管理系统服务权限的标准内置 Windows 方法假设使用sc.exe(服务控制器)工具。使用此实用程序的主要问题是服务权限格式(SDDL格式 — 安全描述定义语言)的复杂语法。

您可以像这样以 SDDL 字符串的形式获取 Windows 服务的当前权限:

sc.exe sdshow Spooler

非管理员用户启动windows服务

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

所有这些符号是什么意思?

括号后的第一个字母表示:允许(A)或拒绝(D)。

下一组符号是可分配的权限。

最后 2 个字符是被授予权限的对象(用户、组或 SID)。有一个预定义组列表。

您可以通过 SID 显式指定用户或组,而不是预定义的组。要获取当前用户的 SID,可以使用以下命令:

whoami /user

或者,您可以使用Get-ADUser cmdlet查找任何域用户的 SID :

Get-ADUser -Identity 'sadams' | select SID

您可以使用Get-ADGroup cmdlet获取AD 安全组的 SID :

Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID

 

要为特定服务分配 SDDL 权限字符串,您可以使用sc sdset命令。例如,可以使用以下命令向用户授予权限:

sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

使用 SubInACL 允许用户启动/停止/重启服务

使用来自 Sysinternals(Mark Russinovich)的命令行工具SubInACL来管理服务权限更容易。这个工具的语法更简单、更方便。以下是使用 SubInACL 授予服务重启权限的方法:

  1. 从此网页(https://www.microsoft.com/en-us/download/details.aspx?id=23510)下载subinacl.msi并将其安装在目标系统上;非管理员用户启动windows服务
  2. 在提升的命令提示符中,转到包含该工具的目录: cd “C:\Program Files (x86)\Windows Resource Kits\Tools\"
  3. 运行命令: subinacl.exe /service Spooler /grant=contoso\tuser=PTO
    非管理员用户启动windows服务

    注意。在这种情况下,我们授予用户暂停(暂停/继续)、启动和停止(重新启动)服务的权限。可用服务权限的完整列表: 

     

    如果您需要向在远程计算机上运行的服务授予权限,请使用 subinacl 命令的以下语法:
    subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F

  4. 现在您只需使用用户帐户登录计算机并尝试使用以下命令重新启动服务:
    net stop spooler
    net start spooler

    sc stop spooler && sc start spooler
    非管理员用户启动windows服务

如果一切正常,服务应该会重新启动。

要撤销分配的服务权限,请使用/revokesubinacl.exe 工具的选项。例如: 

subinacl.exe /service Spooler /revoke=contoso\tuser

 

如何使用 Process Explorer 更改 Windows 服务权限?

您可以使用另一种 Sysinternals 实用程序 – Process Explorer更改 Windows 服务权限。以管理员身份运行进程浏览器,找到你需要的服务的进程。在我们的示例中,这是spoolsv.exe(假脱机程序可执行文件 – C:\Windows\System32\spoolsv.exe)。打开进程属性并单击服务选项卡。

非管理员用户启动windows服务

单击权限按钮并在打开的窗口中添加用户或组。之后选择您要分配的权限(完全控制/写入/读取)。

非管理员用户启动windows服务

使用 PowerShell 设置 Windows 服务权限

在 TechNet 库中,有一个单独的非官方 PowerShell 模块用于管理不同 Windows 对象的权限 – PowerShellAccessControl 模块(您可以在此处下载)。该模块还允许您管理服务权限。安装此模块并将其导入您的 PS 会话:

Import-Module PowerShellAccessControl

您可以像这样从 PowerShell获得特定 Windows 服务的有效权限:

Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser

要允许非管理员用户启动和停止假脱机服务,请运行以下命令:

Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser

使用安全模板管理服务权限

管理服务权限的可视化(但需要更多操作)图形方式是使用安全模板。打开mmc.exe控制台并添加安全模板管理单元。

非管理员用户启动windows服务

创建一个新的安全模板(New Template)。

非管理员用户启动windows服务

指定新模板的名称并转到“系统服务”部分。在服务列表中选择服务Print Spooler并打开其属性。

选择启动模式(自动)并单击编辑安全性

非管理员用户启动windows服务

使用“添加”按钮,添加要授予权限的用户帐户或组。在我们的例子中,启动、停止和暂停权限就足够了。

非管理员用户启动windows服务

保存此模板。

注意。安全模板的内容作为 INF 文件保存在 C:\Users\%username%\Documents\Security\Templates 文件夹中。

如果你打开这个文件,你可以看到关于权限的信息是以前面提到的 SDDL 格式保存的。这样得到的字符串可以作为sc.exe命令的参数。

[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"Spooler",2,"D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

非管理员用户启动windows服务
现在,您只需使用安全配置和分析管理单元创建一个新数据库(开放数据库)并从文件Spooler User Rights.inf导入您的安全模板

非管理员用户启动windows服务

通过从上下文菜单中选择立即配置计算机选项来应用此模板。

非管理员用户启动windows服务

现在您检查用户是否可以允许在非管理员帐户下管理 Print Spooler 服务。

如何授予用户使用 GPO 管理服务的权限?

如果您必须授予用户启动/停止服务多台服务器或域计算机的权限,使用组策略 (GPO) 功能会更容易:

  1. 创建一个新的 GPO 或编辑现有的 GPO,将其链接到具有计算机对象的必要 Active Directory 容器 (OU)。转到策略部分计算机配置 -> Windows 设置 -> 安全设置 -> 系统服务非管理员用户启动windows服务
  2. 找到 Spooler 服务并像上述方法一样向用户授予权限。保存更改;
    笔记。早些时候我们展示了使用相同的 GPO 可以对所有用户隐藏任何 Windows 服务
  3. 等待 GPO 应用到客户端计算机上,并确保已分配新的服务权限。
Windows 服务安全权限存储在哪里? 

您更改了默认权限的所有服务的安全设置都存储在它们自己的注册表项HKLM\System\CurrentControlSet\Services\<servicename>\Security中的 REG_BINARY 类型的Security参数中。

这意味着在其他计算机上设置服务权限的方法之一是导出/导入此注册表参数(包括通过 GPO)。非管理员用户启动windows服务

 

因此,我们研究了几种管理 Windows 服务权限的方法,这些方法允许您向非管理员用户授予系统服务的任何权限。如果用户需要远程访问服务,而不授予其本地登录或RDP 访问权限,则必须允许用户通过服务控制管理器远程连接和枚举服务

转载:http://woshub.com/set-permissions-on-windows-service/#h2_1

© 版权声明

相关文章

暂无评论

暂无评论...