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

gal*_*arm 3 windows windows-7 services permissions

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

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

Har*_*ton 6

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

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

NT SERVICE\SERVICENAME
Run Code Online (Sandbox Code Playgroud)

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

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

C:\working>sc showsid wjkjk

NAME: wjkjk
SERVICE SID: S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649
Run Code Online (Sandbox Code Playgroud)

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

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

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

SERVICE_NAME: wuauserv
SERVICE_SID_TYPE:  UNRESTRICTED
Run Code Online (Sandbox Code Playgroud)

如果服务类型为“none”,您可以使用以下sc sidtype命令将其更改为“unrestricted” :

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
Run Code Online (Sandbox Code Playgroud)

这在服务重新启动之前不会生效。

注意:您应该从“无”到“限制”的服务的SID类型而改变。这样做几乎肯定会导致服务出现故障。将类型从“none”更改为“unrestricted”不太可能导致任何问题。如果服务 SID 类型已经是“restricted”或“unrestricted”,则不应更改它。