IIS7和IIS6配置ASP.NET虚拟主机的账户

2013 年 8 月 3 日3900

  ASP.NET 默认情况下并不是用网站的匿名帐户来运行的,而是用一个固定的帐户来运行的,比如 Windows 2000 中是 ASPNET,显然虚拟主机中大家都用同一个帐户来运行就会造成具有相同的 NTFS 权限,这是很明显的安全隐患。在 Windows 2000 中可以通过模拟来实现不同的虚拟主机使用不同的帐户运行 ASP.NET,具体有些复杂,请参见 正确配置虚拟主机中 ASP.NET 权限。而 Windows 2003(IIS 6)配置又有不同,Windows 2008(IIS 7)中配置又不同。不过 Windows 2008 中是最方便的。

  我们还是从模拟开始,模拟就是在 ASP.NET 配置文件中配置 <identity impersonate="true" />,这样运行 ASP.NET 时就不全是固定的帐户了(Windows 2000 中为 ASPNET、Windows 2003、2008 中为 Network Service),而是运行网站的匿名帐户。为了叙述方便,我们称为半模拟(官方无此名称,仅仅是为了本文叙述方便)。

  模拟也可以指定特定的帐户 <identity impersonate="true" userName="" password="" />,同样为了叙述方便,我们把这种称为全模拟(官方无此名称,仅仅是为了本文叙述方便)。

  我们经过测试,得出几个表,现列出来,为了便于表格不撑大,用了缩写,现将缩写说明如下:

  另外启用全模拟时:在 Windows 2003 中,将 demo 加入了 IIS_WPG 组;在 Windows 2008 中,将 demo 加入了 IIS_IUSRS 组。不然会无法访问 C:\WINDOWS\Microsoft.NET\Framework 这个文件夹(实际上 2008 中加不加都可以,因为没加的话,运行时会自动动态加入)。

  Windows 2003 中的情况

模拟情况

AppPool

NS 对站点

Principle

读 NS 文件

读 demo 文件

读 NSdemo 文件

SSPI

Membership

不启用

NS

需要

NS

成功

失败

成功

NS

NS

不启用

demo

需要

NS

成功

失败

成功

NS

NS

半模拟

NS

需要

demo

失败

失败

成功

demo

NS

半模拟

demo

需要

demo

失败

失败

成功

demo

NS

全模拟

NS

需要

demo

失败

失败

成功

demo

demo

全模拟

demo

需要

demo

失败

失败

成功

demo

demo

  可以看出若使用半模拟,有个问题就是 Membership 用 Windows 身份验证去连接 SQL Server 时并不是运行当前网站的帐户,而是统一的 Network Service,这点是个遗憾。使用全模拟可以解决这个遗憾,但帐户方面配置起来又很复杂。

  Windows 2008 中的情况

模拟情况

AppPool

NS 对站点

Principle

读 NS 文件

读 demo 文件

读 NSdemo 文件

SSPI

Memberhip

不启用

NS

需要

NS

成功

失败

成功

NS

NS

不启用

demo

不需要

demo

失败

成功

成功

demo

demo

半模拟

NS

需要

demo

失败

成功

成功

demo

NS

半模拟

demo

不需要

demo

失败

成功

成功

demo

demo

全模拟

NS

需要

demo

失败

成功

成功

demo

demo

全模拟

demo

不需要

demo

失败

成功

成功

demo

demo

  从表中可以看出,在 Windows 2008 中配置 ASP.NET 虚拟主机权限隔离非常方便,甚至都不需要什么模拟,只需要将应用程序池的帐户设置为网站的匿名帐户就可以了。

0 0