仅允许特定服务对文件夹进行读/写访问

仅允许特定服务对文件夹进行读/写访问

有没有办法阻止对 Windows 中特定文件夹的读取和/或写入访问,并仅授予特定服务/进程对该文件夹的访问权限?

看来权限是基于用户的而不是基于服务的,但我想知道是否有办法实现这样的功能。

答案1

是的,在 Windows 7 中有一种方法可以做到这一点,尽管可能需要重新配置服务,但这会带来(可能相当小的)引入兼容性问题的风险。

与服务关联的安全 ID 可以引用为

NT SERVICE\SERVICENAME

其中servicename替换为服务的实际名称(在服务管理工具中显示为“服务名称”,与服务主列表中显示的显示名称不同)。如果您使用 GUI 更改安全设置,并且计算机已加入域,则需要将搜索范围更改为本地计算机。另请注意,这仅适用于当前安装的服务。

您可以使用以下命令确定与特定服务名称关联的 SID,无论是否安装了此类服务sc showsid

C:\working>sc showsid wjkjk

NAME: wjkjk
SERVICE SID: S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649

如果您使用命令设置文件或文件夹的安全性,icacls您可以通过在 SID 前加上前缀来指定它*,例如*S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649

为了使服务能够使用此安全 ID 访问文件,必须将其配置为“不受限制”或“受限制”的服务 SID 类型。如果将其配置为“无”服务 SID 类型,则服务 SID 将不起作用。您可以使用以下命令检查已安装服务的服务 SID 类型sc qsidtype

C:\working>sc qsidtype wuauserv
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: wuauserv
SERVICE_SID_TYPE:  UNRESTRICTED

如果服务类型为“无”,则可以使用以下sc sidtype命令将其更改为“不受限制”:

C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: psexesvc
SERVICE_SID_TYPE:  NONE

C:\working>sc sidtype psexesvc unrestricted
[SC] ChangeServiceConfig2 SUCCESS

C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: psexesvc
SERVICE_SID_TYPE:  UNRESTRICTED

直到重新启动服务后,此设置才会生效。

笔记:你应该不是将服务的 SID 类型从“无”更改为“受限”。这样做几乎肯定会导致服务出现故障。将类型从“无”更改为“不受限制”不太可能导致任何问题。如果服务 SID 类型已经是“受限”或“不受限制”,则不应更改它。

答案2

所有服务都会使用一个伪“用户” SERVICE,因此您可以通过仅允许此“用户”访问来简单地限制访问。

但是,这并不完全符合您的要求,因为这不是一项特定的服务,而是所有服务。虽然没有默认机制来限制单个服务,但可能可能需要花费相当多的精力才能尝试强制服务在启动时使用不同的 ID - 我不推荐这样做。

相关内容