跳转到内容

IIS 与 Windows 服务的最小权限:应用池、gMSA 与 ACL

核验于 1 分钟阅读

选对服务身份,只给应用需要的 NTFS 权限;域服务账户必须托管时用 gMSA。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

IIS 默认用 ApplicationPoolIdentity。Windows 服务需要域身份时用 gMSA(或严格限定的服务账户),不用域管、不用 LocalSystem。

给:

  • 应用二进制/静态文件读/执行;
  • 需要时只给一个 upload/cache 目录 modify;
  • 应用必须读的配置/密钥读;
  • 不要给 C:\、C:\Windows 或别的应用目录。
终端窗口
New-WebAppPool -Name 'apppool'
Set-ItemProperty IIS:\AppPools\apppool -Name processModel.identityType -Value ApplicationPoolIdentity
icacls C:\sites\app /grant "IIS AppPool\apppool:(OI)(CI)RX"

上传:

终端窗口
icacls C:\sites\app\uploads /grant "IIS AppPool\apppool:(OI)(CI)M"

RX 读/执行;M 修改。不要因为厂商安装器说要 F(完全)就给。

应用作为服务(Node/Go/Python)时,用专用本地/域账户或 gMSA:

  • 有“作为服务登录”权限;
  • 应用目录读/执行;
  • 日志/上传/临时目录写;
  • 不允许交互登录;
  • 不是本地管理员。
终端窗口
New-ADServiceAccount -Name svc-app -DNSHostName svc-app.example.com `
-PrincipalsAllowedToRetrieveManagedPassword 'IIS-Servers'
Install-ADServiceAccount -Identity svc-app
Test-ADServiceAccount -Identity svc-app

应用池/服务设为 EXAMPLE\svc-app$,无密码。gMSA 需要 AD 和 KDS 根密钥;单机没有。

终端窗口
icacls C:\sites\app
Get-IISAppPool apppool | Select-Object Name,State,ProcessModel
whoami /priv

服务查 Get-CimInstance Win32_Service -Filter "Name='api'" | Select-Object StartName。

  • 一个子目录失败,就给整个站点加 Everyone 读。
  • 为了访问共享,把应用池加进本地管理员。
  • 只读一个目录的服务用域管。
  • 多个不相关应用共用一个服务账户。
  • 给 web.config 或 PHP/Node 二进制写权限。

E1。实验室在 Windows 11 上用 ApplicationPoolIdentity 建了 labpool,没有配 gMSA/AD。gMSA 步骤是 Server 2025 域环境待验证模式。

来源