windows - 没有网络访问权限的虚拟服务帐户,如 NT AUTHORITY\LocalService

标签 windows windows-services windows-security least-privilege

背景:我正在编写一项服务,并希望尽可能少地授予它必要的权限。

虚拟帐户(有时称为“虚拟服务帐户”)是 sparsely documented Windows 7/2008R2 的新功能是自动管理的服务帐户,这些服务需要最少的权限,但可以在域环境中使用计算机身份访问网络。

我的服务不需要网络访问权限,所以我使用的是 LocalService,但我不喜欢这样的事实:如果我授予对文件/等的访问权限,我就会授予对以该帐户运行的所有服务的访问权限。

是否有我可以使用的最低权限帐户?

最佳答案

您无需更改运行服务的帐户; LocalService 没问题。

相反,将服务配置为具有 non-zero SID type ,即指定 SERVICE_SID_TYPE_UNRESTRICTEDSERVICE_SID_TYPE_RESTRICTED。您可以使用 ChangeServiceConfig2() 执行此操作函数和 SERVICE_CONFIG_SERVICE_SID_INFO 选项。

然后您可以使用名称为 NT SERVICE\myservice 而不是 LocalService 的服务 SID 授予对文件和其他 protected 资源的访问权限。这将仅授予对您的服务的访问权限。 (好吧,任何其他服务共享相同的进程,但大多数第三方服务在自己的进程中运行。)

对于最低权限,请使用 SERVICE_SID_TYPE_RESTRICTED。这意味着该服务只能访问明确授予对 Everyone、服务 SID、登录 session SID 或 WRITE_RESTRICTED 访问权限的 protected 对象。您还应该使用 SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 选项来减少授予服务的权限;许多服务根本不需要任何特权。 (在这种情况下,您可能会发现需要指定 SE_CHANGE_NOTIFY_NAME 而不是空列表,尽管我可能记错了。)

关于windows - 没有网络访问权限的虚拟服务帐户,如 NT AUTHORITY\LocalService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611765/

相关文章:

windows - Windows 用户的 Git CRLF

windows - 无法使用 www.google.com NET::ERR_CERT_COMMON_NAME_INVALID SSL 证书无效

windows-services - 如何使用 WiX 安装和启动 Windows 服务

c# - 如何更改 Windows 服务的名称?

windows - 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

powershell - 如何以编程方式取消阻止(IE 功能)文件?

c# - 如何使用 .NET 应用 Windows 组策略?

node.js - 无法使用任何环境变量

在主对象中全屏显示的 Python 代码(tkinter 和 PIL)

java - 如何将守护进程设置为 Windows 服务