介绍 IIS 7.5 的应用程序池与新增的「虚拟帐户」特性

时间:2016-09-25

从 Windows 7 与 Windows Server 2008 R2 开始,新增了两种特殊的帐户类型,分别是「受管理的服务帐户(Managed service accounts)」与「虚拟帐户(virtual accounts)」,可有效隔离各种网路服务以提升安全性,我今天会集中在讲解 IIS 7.5 与虚拟帐户之间的实际运用与范例。

要学会设定 IIS 一定要熟悉应用程式集区(Application Pool)与身份识别(Identity)的关系,我们都知道 IIS6 与 IIS7 预设的应用程式集区身份识别都是 NETWORK SERVICE 这个系统帐户,不过 NETWORK SERVICE 这个帐户可不是只有 IIS 在用而已,还有许多其他系统中与网路有关的服务程序也是用 NETWORK SERVICE 这个身份在运作,例如:SQLEXPRESS 服务。

SQL Server (SQLEXPRESS) Properties

这也代表著就算 IIS 没有沦陷,只要有其他使用 NETWORK SERVICE 的网路服务沦陷的话,也会有可能连带影响 IIS 的运作。这样说你可能没感觉,我反过来说,如果 IIS 被植入木马程式,骇客可以大摇大摆的利用 NETWORK SERVICE 下载你的 SQLEXPRESS 资料库备份档、删除备份档、删除或下载你暂时卸离的资料库、甚至于偷天换日将另一组资料库上传上去,让你完全不知发生何事。

碍于时间与篇幅我没办法说太多,如果有机会我可以做很多现场的展示,包你大开眼界,资讯安全这档事真的是博大精深,不瞭解各种细节与原理的人永远是在雾裡看花。

有了「虚拟帐户」的概念,各种不同的网路服务不需要再共用同一组 NETWORK SERVICE 身份识别,甚至于同一个 IIS 下个别不同的应用程式集区也可以用完全区隔开来的「虚拟帐户」执行 Web 应用程式,除了工作处理程序 (Worker Process) (w3wp.exe) 执行的身份可以完全切开外,对于不同站台所操作的档案或目录也可以将 NTFS 权限的设定做有效区隔,让不同工作处理程序之间对系统或档案安全性的影响降至最低,非常的有意义!

首先,我们先来看看 IIS 7.5 内建的 DefaultAppPool 应用程式集区的 [进阶设定]

IIS 7.5 :: Application Pools

IIS 7.5 :: Application Pools :: Advanced Settings

在这裡你会看到 IIS 7.5 这次才新增的 ApplicationPoolIdentity 内建帐户,而这就是为 IIS 7.5 特别订製的「虚拟帐户」。

IIS 7.5 :: Application Pools :: Advanced Settings :: Application Pool Identity

当我们的 ASP.NET 程式需要上传或写入档案到 Web Server 时,就必须要设定目录的 NTFS 权限让工作处理程序能够写入档案,在以往我们要设定的是 NETWORK SERVICE 帐户,但现在要输入的却是一组特殊的「虚拟帐户」,我们在档案总管设定权限时「虚拟帐户」是无法被选取的,只能手动输入这组特殊的帐户名称,IIS 应用程式集区的虚拟帐户名称表示方式为:【IIS AppPool\应用程式集区名称】,例如内建的应用程式名称就称为: 【IIS AppPool\DefaultAppPool】,如果你新增了一个应用程式集区名为 MyAppPool 的话,虚拟帐户的表示法就是:【IIS AppPool\MyAppPool】。

如下图示,在设定 NTFS 权限选取使用者时需先手动输入虚拟帐户帐号

Select Users or Groups

当按下 [检查名称] 或 [Check Names] 时,名称若出现「底线」就代表该「虚拟帐户」是有效的:

Select Users or Groups

最后,我们看一下 [工作管理员] 中呈现的工作处理程序 (w3wp.exe) 的执行身份也是虚拟帐户DefaultAppPool 这个身份。

Windows Task Manager

我觉得虚拟帐户这个概念实在是太棒了,以后在设定多个站台时也不需要新增一堆无意义的系统帐户或人工管理这堆系统帐户的密码与到期日,对于系统的可管理性也增强了,当你不需要虚拟帐户时,也可以选择原本的 NetworkService 或自行指定帐户执行。

---

虚拟帐户虽然在 Windows 7 与 Windows Server 2008 R2 才出现,但 Windows Server 2008 在更新到 Service Pack 2 (SP2) 之后也会支援虚拟帐户的设定,只是经我实测后发现 Windows Server 2008 SP2 虽然有支援虚拟帐户,在 IIS 7 的应用程式集区 [进阶设定] 视窗中也会看到 ApplicationPoolIdentity 的选项,但在档案总管中设定 NTFS 权限时却无法透过 [检查名称] 或 [Check Names] 按钮进行名称检查,因此你将无法透过 GUI 介面设定授权给虚拟帐户,只能透过 icacls 工具设定档案或目录权限,使用范例如下:

‧设定 UploadFiles 目录授予 IIS AppPool\DefaultAppPool 虚拟帐户拥有完全控制(Full)权限

icacls C:\Inetpub\wwwroot\UploadFiles /grant "IIS AppPool\DefaultAppPool":F

icacls C:\Inetpub\wwwroot\UploadFiles /grant "IIS AppPool\DefaultAppPool":F

相关连结

  • Service Accounts Step-by-Step Guide
  • Application Pool Identities
  • IIS7 in Windows Server 2008 R2
  • Service Pack 2 for Windows Server 2008 and Windows Vista
  • IIS 7 技術文章列表
  • New in IIS 7 - App Pool Isolation
  • What account is your AppPool running as?
  • Display Virtual User Accounts in permission dialog | Microsoft Connect
上一条:IIS下PHP运行环境搭建与网页服务器故障排查方法 下一条:Nginx配置srcache_nginx模块搭配Redis建立缓存系统

相关文章

最新文章