目标
简介
Windows 上的 ASPNET 体系结构
Windows Server 上的 ASPNET 体系结构
用标识隔离应用程序
用应用程序池隔离应用程序
用代码访问安全隔离应用程序
窗体身份验证的问题
UNC 共享寄宿
小结
简介
在共享宿主场景中确保应用程序不会对其他应用程序的操作和安全产生负面影响是非常重要的
获得应用程序独立有许多方式可用的选择因 Web 服务器上运行的 NET Framework 的版本和操作系统的版本的不同而不同
如果运行的是 NET Framework 的 版本可以使用代码访问安全提供的资源约束模型提供一层应用程序独立这种应用程序独立是通过限制应用程序访问不同类型的资源(如文件系统注册表事件日志Active Directory数据库网络资源等等)而实现的
Windows Server 通过 Internet 信息服务 (IIS ) 应用程序池提供了进程独立可以使多个应用程序运行在不同的 IIS 辅助进程实例中进程独立在 Windows 上是不可能的因为所有 Web 应用程序都运行在单独的 ASPNET 辅助进程实例中而应用程序域提供了独立性
表 总结了 Windows 和 Windows Server 上应用程序独立的各种选择
运行着 NET Framework 版的 Windows Server 是寄宿多个 ASPNET 应用程序的推荐平台因为它支持进程独立并为应用程序独立提供了最大范围的选择
Windows 上的 ASPNET 体系结构
在 Windows 上多个 Web 应用程序运行在一个 ASPNET 辅助进程 (Aspnet_wpexe) 实例中每个应用程序都驻留在自己的应用程序域中为托管代码提供了一定程度的独立性Windows /IIS 体系结构如图 所示
图 带有 IIS 的 Windows 上的 ASPNET 体系结构
表 总结了图 中所描述的体系结构的组成部分
Windows Server 上的 ASPNET 体系结构
在 Windows Server 上体系结构有所改变因为 IIS 允许多个进程用于寄宿不同的 Web 应用程序此体系结构如图 所示
注 IIS 支持向后兼容模式从而能够支持 IIS ASPNET 辅助进程模型
图 带有 IIS 的 Windows Server 上的 ASPNET 体系结构
与 Windows 下的 ASPNET 体系结构相比Windows Server 中的主要区别在于可以用不同的 IIS 辅助进程实例 (Wwpexe) 寄宿 Web 应用程序默认时这些应用程序是使用 NT Authority\NetworkService 帐户运行的这是一个最低特权本地帐户它用作跨网络的计算机帐户运行在网络服务帐户环境下的 Web 应用程序需要给远程服务器提供计算机的凭据以进行身份验证
为网络服务配置 ACL
为网络服务帐户配置访问控制列表 (ACL) 的过程对于本地和远程机器而言是不同的如果要授予本地机器上的网络服务帐户访问权限需要将网络服务帐户添加到 ACL 中如果要授予远程机器上的网络服务帐户访问权限需要将 DomainName\MachineName$ 帐户添加到 ACL 中
注 不要把网络服务帐户与内置的网络组搞混淆了后者包括的是跨网络进行身份验证的用户
表 总结了图 中所描述的体系结构的主要组成部分
用标识隔离应用程序
从操作系统标识的观点来看可以通过控制用来运行每个应用程序的帐户标识隔离 ASPNET Web应用程序如果每个应用程序使用不同的固定帐户标识就可以分别授权和审核每个应用程序
注 如果要寄宿使用 NET Framework 版构建的 ASPNET Web应用程序进程帐户需要适当的对当前文件系统驱动器根的访问权限有关更多信息请参阅 Microsoft 知识库文章 FIX:Failed to Start Monitoring Directory Changes Error Message When You Browse to an ASPNET Page
如果共享 Web 服务器上每个应用程序要想都使用不同的固定标识可以采用两种方式
匿名帐户模拟
固定标识模拟
匿名帐户模拟
通过匿名帐户模拟应用程序可以模拟 IIS 指定并为应用程序的虚拟目录配置的匿名帐户如果您的应用程序要独立于 IIS 对用户进行身份验证(如通过使用窗体或者 Microsoft Passport 身份验证)就可以使用此方式在这些情况下可以通过使用固定的匿名帐户隔离应用程序一旦调用方通过了身份验证角色也经过了检查就可以将可信服务器模型用于下游的资源访问其中已配置的匿名帐户提供了可信的标识
为了支持这一方式IIS 中的应用程序虚拟目录必须支持匿名访问必须为每个应用程序配置不同的匿名帐户应用程序然后必须配置为模拟这种方式如图 所示本地和远程资源访问假设使用模拟的匿名帐户的安全上下文
图 用于每个应用程序的多个匿名帐户
为了使用多个匿名帐户进行资源访问
此过程叙fsecmodgif述了如何使用多个匿名帐户(每个 Web 应用程序一个)进行资源访问以支持单独的应用程序授权和审核
创建新的匿名用户帐户每个应用程序一个
有关创建匿名用户帐户的更多信息请参阅保护 Web 服务器的安全单元中的帐户部分
如果需要使用匿名帐户访问远程资源要么使用一个最低特权域帐户要么使用本地帐户在远程服务器上使用匹配的用户名和密码创建一个重复的本地帐户
使用 标记在 nfig 中配置每个 Web 应用程序为模拟
allowOverride=false 设置防止了单个的应用程序改写 nfig 文件中的这一设置有关 元素的更多信息请参阅保护 ASPNET 应用程序的安全单元中的nfig 和 nfig 详解部分 使用 Internet 服务管理器配置每个应用程序的虚拟目录以使用不同的匿名用户帐户
从管理工具程序组启动 Internet 服务管理器
选择应用程序的应用程序目录鼠标右键单击然后单击 Properties
单击 Security 选项卡然后单击 Edit 按钮
确保选择了 Anonymous access然后单击 Edit
输入已创建的匿名帐户的用户名或者单击 Browse从列表中选择用户名
如果想使用帐户访问远程资源请清除匿名帐户的 Allow IIS to Control Password 复选框
如果选择了 Allow IIS to Control Password使用指定匿名帐户创建的登录会话的网络凭据将为 NULL而且不能用于访问必需进行身份验证的网络资源如果清除了这一复选框登录会话将是一个需要网络凭据的交互式登录会话但是如果帐户是机器本地帐户则网络上其他机器都无法对此帐户进行身份验证在此情况下应该在目标远程服务器上创建一个重复帐户
注 所创建的登录会话的类型是由 LogonMethod IIS 元数据库设置控制的默认时是交互式登录会话需要具有Allow Log on Locally用户特权的帐户
IIS 上没有 Allow IIS to Control Password 选项IIS 将默认的 LogonMethod 设置为 Network Cleartext这要求帐户有Access this computer from the network用户特权这使帐户由网络服务器进行身份验证
为每个帐户配置 NTFS 权限以确保每个帐户都有只访问适当的文件系统文件和文件夹的权限而不能访问关键的资源(如操作系统工具)
有关为匿名帐户配置 NTFS 权限的更多信息请参阅单元保护 Web 服务器的安全
注 如果运行 IISLockdown 向导它将创建一个 Web 匿名用户组该组的成员将被拒绝访问系统目录和工具
固定标识模拟
如果需要 IIS 为应用程序对用户进行身份验证(例如通过使用集成 Windows 身份验证或者证书身份验证)可以使用一个固定模拟标识来执行 ASPNET 应用程序此场景如图 所示
图 应用程序模拟一个固定帐户并使用它访问资源
可以配置单独的 ASPNET 应用程序模拟一个固定帐户这种配置的好处在于它可以用于任何 IIS 身份验证方法而且无需 IIS 匿名身份验证