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

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

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

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

给：

- 应用二进制/静态文件读/执行；
- 需要时只给一个 upload/cache 目录 modify；
- 应用必须读的配置/密钥读；
- 不要给 `C:\`、`C:\Windows` 或别的应用目录。

## IIS 应用池

```powershell
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"
```

上传：

```powershell
icacls C:\sites\app\uploads /grant "IIS AppPool\apppool:(OI)(CI)M"
```

`RX` 读/执行；`M` 修改。不要因为厂商安装器说要 `F`（完全）就给。

## Windows 服务

应用作为服务（Node/Go/Python）时，用专用本地/域账户或 gMSA：

- 有“作为服务登录”权限；
- 应用目录读/执行；
- 日志/上传/临时目录写；
- 不允许交互登录；
- 不是本地管理员。

## gMSA

```powershell
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 根密钥；单机没有。

## 验证有效权限

```powershell
icacls C:\sites\app
Get-IISAppPool apppool | Select-Object Name,State,ProcessModel
whoami /priv
```

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

> **警告: LocalSystem 不是捷径**
>
> LocalSystem 能读写整台主机、能模拟。Web 应用需要它，通常是文件/注册表/网络设计问题，应该修问题而不是提权。

## 常见过度授权

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

## 实验室边界

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

## 来源

- [Microsoft Learn — 应用程序池身份](https://learn.microsoft.com/zh-cn/iis/manage/configuring-security/application-pool-identities)
- [Microsoft Learn — 组托管服务账户](https://learn.microsoft.com/zh-cn/windows-server/security/group-managed-service-accounts/group-managed-service-accounts-overview)
- [Microsoft Learn — icacls](https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/icacls)

---

来源页面: https://winbook.fyi/zh/server/security/least-privilege/
