简介
通过 ASP.NET,管理员可在部分信任模式下(例如 中等信任)托管应用程序。还可以通过自定义策略文件配置自定义部分信任级别。有关如何在 ASP.NET 2.0 中使用中等信任的详细信息,请访问以下 Microsoft Developer Network (MSDN) 网站:
如何:在 ASP.NET 2.0 中使用中等信任如上文所述,ASP.NET 部分信任是在同一网络服务器上托管了多个不同信任级别的应用程序的共享宿主环境中,强制隔离应用程序的机制。我们将更新此相关指南,以显示在部分信任中运行 ASP.NET 网页框架应用程序不保证完全隔离在相同进程或同一台计算机上运行的其他应用程序。
推荐过程是将 ASP.NET 网页框架应用程序配置为在单独的低权限进程中运行(使用各个应用程序池),从而确保隔离同一网络服务器上的其他 ASP.NET 网页框架应用程序。以下部分详细介绍了配置应用程序进行隔离的方法。我们将更新其他文档以显示本文中概括的策略更改。
更多信息
服务器管理员应当使用本文内的指南以确保共享宿主环境中的应用程序已隔离。这些指南适用于在 Windows Server 2003 SP2 和更高版本内托管 ASP.NET。这些指南也适用于 Internet Information Services (IIS) 6.0 到 7.5。
此处概括的许多任务都可使用 IIS 7 和 7.5 中的 AppCmd.exe IIS 命令行工具和 IIS 6.0 中的 IIS 管理脚本来自动运行。
如何将应用程序放入单独的 IIS 网站
在共享宿主环境中,应用程序应放入单独的 IIS 网站。当应用程序在单独网站托管时,彼此间最好进行隔离配置。除此以外,.NET Framework CLR 托管将独立进行,从而为该级别提供其他隔离。
要将各个应用程序放入单独的网站,请执行以下步骤:
Internet Information Services 6.0 (Windows Server 2003 SP2)
-
打开 Internet Information Services (IIS) 管理器。
-
在左侧窗格内展开当前服务器节点。
-
右键单击“网站”节点,单击“新建”,然后单击“网站”。
-
单击“下一步”。
-
输入新网站的唯一名称,然后单击“下一步”。
-
配置宿主环境的网站绑定内容。
-
输入存储应用程序文件的文件夹物理路径。
-
单击选中“运行脚本”(例如 ASP)复选框,然后单击“下一步”。
-
单击“完成”。新网站会在“网站”节点下出现。
Internet Information Services 7(Windows Vista SP2 和 Windows Server 2008 SP1)和 Internet Information Services 7.5(Windows 7 和 Windows Server 2008 R2)
-
打开 Internet Information Services (IIS) 管理器。
-
在“连接”窗格内展开当前服务器节点。
-
选择网站节点,然后单击“操作”窗格内的“添加网站”链接。
-
在“添加网站”对话框内,输入新网站的唯一名称,然后输入存储应用程序文件的文件夹物理路径。在默认情况下,系统会创建与网站名称相同的新应用程序池,且网站会配置为使用此应用程序池。(此为推荐配置。)
-
配置宿主环境的网站绑定内容。
-
单击清除“立即打开网站”复选框,确保网站在完成本文概括的指南之前无法使用。
-
单击“确定”。配置后的网站会在“连接”窗格内的“网站”节点下出现。
如何将网站放入单独的应用程序池
在共享宿主环境中,应用程序应放入单独的应用程序池。通过此步骤,应用程序将以唯一标识隔离至单独的操作系统进程中,从而在网站间提供某一级别的隔离。(以下部分介绍了如何配置应用程序池隔离标识。)
Internet Information Services 6.0 (Windows Server 2003 SP2)
-
打开 Internet Information Services (IIS) 管理器。
-
在左侧窗格内展开当前服务器节点。
-
右键单击“应用程序池”,单击“新建”,然后单击“应用程序池”。
-
输入新应用程序池的唯一名称,然后单击“确定”。
-
展开“网站”节点。
-
右键单击目标网站,然后单击“属性”。
-
单击“主目录”选项卡。
-
在对话框底部的“应用程序池”字段内选择新的应用程序池。
-
单击“确定”。
Internet Information Services 7(Windows Vista SP2 和 Windows Server 2008 SP1)和 Internet Information Services 7.5(Windows 7 和 Windows Server 2008 R2)
执行“如何将应用程序放入单独的 IIS 网站”部分内的步骤之后,新网站会自动放入单独的新应用程序池。然而,如果您必须配置现有网站以使用单独的新应用程序池,则请执行以下步骤:
-
打开 Internet Information Services (IIS) 管理器。
-
在“连接”窗格内展开当前服务器节点。
-
选择“应用程序池”节点。
-
在“操作”窗格内,单击“添加应用程序池”链接。
-
输入新应用程序池的唯一名称,然后选择目标 .NET Framework 版本和管道模式。
-
单击“确定”。新应用程序池显示在列表中。
-
在“连接”窗格内,展开“网站”节点。
-
选择要移至您之前在此过程中创建的应用程序池内的网站。
-
在“操作”窗格内,单击“基本设置”链接。
-
在“编辑网站”对话框内,单击“选择”。
-
在“应用程序池”列表内,选择您之前创建的应用程序池。
-
单击“确定”。
在“编辑网站”对话框中,单击“确定”。
如何配置应用程序池以进行隔离(进程标识)
应用程序池将应用程序和网站托管在 Windows 进程中。用于运行进程的标识可以配置。在共享宿主环境内,各个应用程序都应有单独的标识。这样就能确保各个应用程序都能在唯一帐户环境下运行,从而可使用文件系统的随机访问控制列表 (DACL) 和基础操作系统的内置进程隔离功能来进行正确的隔离。要创建用户帐户并分配某应用程序池使用该账户,请执行以下步骤。
Internet Information Services 6.0 (Windows Server 2003 SP2)
创建本地用户账户用作应用程序池标识
-
打开 Internet Information Services (IIS) 管理器。
-
在左侧窗格内,展开“本地用户和组”。
-
右键单击“用户”节点,然后单击“新建用户”。
-
输入新用户账户的唯一名称和强密码。
-
单击清除“用户必须在下次登录时更改密码”复选狂。
-
单击选中“用户无法更改密码”复选框。
-
单击“创建”,然后单击“关闭”。
-
在左侧窗格内,选择“用户”节点。新帐户会显示在列表中。
对应用程序池进行配置以使用新的本地用户帐户。
-
打开 Internet Information Services (IIS) 管理器。
-
在左侧窗格内展开当前服务器节点。
-
展开“应用程序池”节点。
-
右键单击目标应用程序池,然后单击“属性”。
-
单击“标识”选项卡。
-
选择“配置”选项按钮。
-
输入新帐户的用户名和密码。
-
单击“确定”。
-
在“确认密码”对话框中再次输入密码,然后单击“确定”。
Internet Information Services 7 和 7.5(Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2)
-
打开 Internet Information Services (IIS) 管理器。
-
在“连接”窗格内展开当前服务器节点。
-
选择“应用程序池”节点。
-
选择目标应用程序池。
-
在“操作”窗格内,单击“高级设置”链接。
-
在“进程模式”部分,将“标识”属性设置为“ApplicationPoolIdentity”。此部分为此应用程序池自动创建了唯一标识。在以下部分中,您可以使用该唯一标识在应用程序要访问的文件位置上设置随机访问控制列表 (DACL)。
-
单击“确定”。
如何在应用程序内容位置上配置 DACL
随机访问控制列表 (DACL) 是关联到某对象关联、可用于控制对该对象的访问的权限列表。使用 DACL 限制对应用程序内容的访问有助于增强在相同网络服务器上托管的网站之间的隔离。有关 ACL 和 IIS 标识的详细信息,请参阅 文件系统 ACL 内的 IIS 安全内容
所有 IIS 版本
-
在命令提示符处或 Windows Explorer 中打开根文件夹查看网站内容。
-
使用以下任一方法删除对该位置的非管理员访问项。(其中包括用户组。)
-
在 Windows Explorer 内,右键单击文件夹,选择“属性”,单击“安全”选项卡,然后更改访问控制列表。
-
在命令提示符处使用 icacls.exe 实用工具(对于旧版本 Windows 操作系统上的 cacls.exe 而言)以更改访问控制列表。
-
-
为针对网站所选的进程标识添加新项。
-
为该新标识赋予对文件夹的“读取”和“执行”访问权限。
如果应用程序对某些特定文件夹要求写入权限(例如,“上传”文件夹),则请执行以下步骤:
Internet Information Services 6.0 (Windows Server 2003 SP2)
-
在 Windows Explorer 内,右键单击文件夹,选择“属性”,单击“安全”选项卡,然后为进程标识添加“修改”访问权限。
-
对于将包含静态内容(图片、文本文件,等)的文件夹,请执行以下步骤:
-
打开 Internet Information Services (IIS) 管理器。
-
在左侧窗格内,右键单击相应的文件夹名称,然后单击“属性”。
-
单击“目录”选项卡。
-
在“执行权限”列表内,选择“无”。
-
Internet Information Services 7 和 7.5(Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2)
-
在 Windows Explorer 内,右键单击文件夹,选择“属性”,单击“安全”选项卡,然后为进程标识添加“修改”访问权限。
-
对于将包含静态内容(图片、文本文件,等)的文件夹,请在 accessPolicy 设置内向禁止脚本权限的位置添加“web.config”文件项:<system.webServer> <handlers accessPolicy="Read,Write" /> </system.webServer>
如何配置 Temporary ASP.NET Files 文件夹位置及如何设置各个网站的 DACL
ASP.NET 在服务器上需要一个位置来存储临时数据,例如已编译文件。通常这就是 Temporary ASP.NET Files 文件夹。在默认情况下,该文件夹位于 .NET Framework 安装文件夹下。为各个网站指定另一临时位置,并相应地逐个保护文件夹,有助于增强在相同网络服务器上托管的网站之间的隔离。有关 Temporary ASP.NET Files 文件夹的详细信息,请参阅 了解 ASP.NET 动态编译。
如何为各个网站配置另一 Temporary ASP.NET Files 文件夹位置
-
为各个网站创建新文件夹,以存储该网站的临时 ASP.NET 文件。最好使用非系统驱动以存储临时文件。
-
在服务器的根 web.config 或 applicationHost.config 文件内,使用 <位置> 以添加指向该特定网站的新文件夹位置的设置。<configuration> <location path="path"> <system.web> <compilation tempDirectory="temp-files-path" /> </system.web> </location> <!-- and so on --> </configuration>
如何在 Temporary ASP.NET Files 文件夹位置上设置相应的 DACL
-
使用命令提示符或 Windows Explorer 删除任何非管理员对此位置的访问权限。(其中包括用户组。)
-
为您之前选用于此网站的进程标识添加新项,然后为该标识赋予对文件夹的“修改”访问权限。
如何从根配置文件中删除敏感配置数据
应用程序 web.config 文件位于所提供的应用程序的内容文件夹内。虽然 ASP.NET 不提供应用程序 web.config 文件,但在实际使用时,最好将安全敏感信息(例如机器键设置和连接字符串)放入应用程序位置以外的配置文件内。此举可以防止信息泄漏。
Internet Information Services 6.0 (Windows Server 2003 SP2)
在根 web.config 文件内存储安全敏感配置信息对于隔离不同网站的数据而言并非明智之举,因为所有网站对该文件都有读取访问权限。因此,在 IIS 6 上,您应该将敏感配置存储在应用程序 web.config 文件内。这样可以隔离各个网站的敏感配置。在这种情况下,您的应用程序将利用 ASP.NET 防御来阻止对外提供应用程序 web.config 文件,并确保敏感信息免遭泄漏。
Internet Information Services 7 和 7.5(Windows Vista SP2、Windows Server 2008 SP1、Windows 7 和 Windows Server 2008 R2)
对于 IIS 7 和更高版本,将 IIS applicationHost.config 文件内的敏感配置移入某 <位置> 元素,该元素使配置范围锁定于其适用于的网站。有关详细信息,请参阅 如何在 IIS 7.0 配置中使用锁定。Microsoft 对以下人士在客户保护方面提供的合作与帮助表示由衷的感谢: