ASP.NET 中的进程和请求标识

来源:百度文库 编辑:神马文学网 时间:2024/04/29 13:13:58
察看本文应用于的产品
文章编号 : 317012
最后修改 : 2005年11月9日
修订 : 12.0
本文的发布号曾为 CHS317012
本页
概要
更多信息配置进程标识
ASPNET 帐户的默认权限
访问资源使用文件资源
启用模拟
使用数据库
使用事件日志
使用 System.DirectoryServices 和 Active Directory
使用性能计数器
启动进程外 COM 服务器
调试问题
用固定标识运行代码
在 UNC 共享上编译代码隐藏文件
在主域控制器或备份域控制器上使用 ASP.NET
参考
概要
本文概述向默认的进程帐户授予的访问权限并描述这些权限可能对于某些任务限制过严的一些情况。
在 Microsoft Windows 2000 和 Microsoft Windows XP 上的 ASP.NET 的默认安装中,ASP.NET 在辅助进程中运行 Web 应用程序代码。默认情况下,此进程的标识使用名为 ASPNET 帐户(全名是 aspnet_wp 帐户)的本地帐户。在 ASP.NET 的试用版中,该进程标识为 System,这是一个功能强大的、对计算机具有许多访问权限的管理帐户。为了提供特权较少的默认安装,ASP.NET 的发行版本使用权限较小的 ASPNET 帐户,该帐户适合于大多数 Web 应用程序。
注意:默认情况下,如果使用 Microsoft Internet 信息服务 (IIS) 6.0,则 ASP.NET Web 应用程序将运行在 NetworkService 帐户的安全上下文中。
回到顶端
更多信息
配置进程标识
您可以在安装根目录的 Config 子目录中的 Machine.config 文件的 部分配置进程标识。userName 和 password 属性可控制进程标识。这些属性的默认值如下所示: machine 和 AutoGenerate 值指示 ASP.NET 使用内置的 ASPNET 帐户并为该帐户使用保密性强的存储于本地安全机构 (LSA) 中的随机密码。
如果您要使用具有更多访问权限的进程,则可以将 userName 属性设置为 System,这将导致 ASP.NET 辅助进程使用与 Inetinfo.exe 进程相同的标识运行。Inetinfo.exe 进程默认情况下以 System 标识运行。在您配置 ASP.NET 辅助进程以使用 System 标识时,该 ASP.NET 辅助进程可以访问本地计算机上的几乎所有资源。在运行 Windows 2000 或 Windows XP 的计算机上,System 帐户还具有网络凭据并可以作为计算机帐户访问网络资源。 要配置进程使之以 System 标识运行,请按以下方式更改 部分的 userName 属性: 回到顶端
ASPNET 帐户的默认权限
在安装 ASP.NET 时,将作为本地帐户创建 ASPNET 帐户。ASPNET 帐户仅属于该计算机上的用户组。因此,ASPNET 帐户具有与用户组关联的所有权限,并且可以访问用户组对其具有访问权限的任何资源。ASPNET 帐户从用户组继承了以下用户权限: • SeChangeNotifyPrivilege
• SeUndockPrivilege
• SeInteractiveLogonRight
• SeNetworkLogonRight
除这些权限之外,默认情况下,还授予 ASPNET 帐户以下权限: • SeServiceLogonRight
• SeBatchLogonRight
• SeDenyInteractiveLogonRight
ASP.NET 向 ASPNET 帐户授予对以下文件夹的特定的完全访问权限: • 临时 ASP.NET 文件
• %windir%\temp
另外,ASP.NET 将授予对 Microsoft .NET Framework 安装目录的读取权限。
下表列出了 ASPNET 帐户所需的“访问控制列表”(ACL)。Windows 2000 和 Microsoft .NET Framework 的默认安装包含这些访问控制列表。 • 位置:%installroot%\ASP.NET Temporary Files
访问类型:对该文件夹的读/写权限和对驱动器根文件夹的“列出文件夹内容”权限
帐户:进程帐户和配置的模拟帐户
说明:这是用于 ASP.NET 动态编译的位置。在此位置下,为每一应用程序在独立的目录中生成应用程序代码。您可以使用 部分中的 tempDir 属性来配置根位置。
注意:如果您更改 machine.config 以在另一位置保存 ASP.NET 临时文件,那么 ASPNET 帐户必须具有对驱动器根级别的“列出文件夹内容”访问类型。
• 位置:%windir%\temp
访问类型:读/写
帐户:进程帐户
说明:这是可扩展标记语言 (XML) Web 服务用来生成序列化代理的位置。
• 位置:应用程序目录
访问类型:读取
帐户:进程帐户和配置的模拟帐户
说明:这是应用程序内容的位置(只需要“读取”权限)。
有关更多信息,请访问下面的 Microsoft 网站:http://msdn.microsoft.com/library/en-us/dnnetsec/html/SecNetHT01.asp (http://msdn.microsoft.com/library/en-us/dnnetsec/html/SecNetHT01.asp)
• 位置:网站根目录(%systemdrive%\inetpub\wwwroot 或默认网站指向的路径)
访问类型:读取
帐户:进程帐户和配置的模拟帐户
说明:ASP.NET 尝试在 drive:\inetpub\wwwroot\web.config 位置读取配置文件并监视更改。
• 位置:%installroot% 层次结构
访问类型:读取
帐户:进程帐户和配置的模拟帐户
说明:ASP.NET 必须能够访问 Machine.config 文件(在 %installroot% 下的 \Config 子目录中)上的 .NET Framework 程序集。
• 位置:%windir%\assembly
访问类型:读取
帐户:进程帐户或配置的模拟帐户
说明:这是包含共享程序集的全局程序集缓存。
有关基于 Windows 2000 的计算机的默认 ACL 的更多信息,请参见参考 一节中的“Windows 2000 中的默认访问控制设置”参考。
注意:默认情况下,ASPNET 帐户通常不具有用来执行在本文中描述的某些任务的正确访问权限。
回到顶端
访问资源
以下几节介绍如何使用各种资源。如果您启用模拟并且向模拟的帐户授予对资源的访问权限,则可以本地访问其中的许多资源。但是,在您尝试访问远程资源时,模拟通常不起作用,除非应用程序使用可委派的身份验证机制,例如 Kerberos 或基本身份验证。您还可以使用 COM+ 服务访问资源,这在用固定标识运行代码 一节中作了概述。
使用文件资源
要使通过 ASPNET 帐户运行的应用程序能够向文件写入,您可以在向文件写入之前,在代码中模拟特定的用户。或者您可以授予 ASPNET 帐户写权限。您可以授予对单个文件或目录层次结构的写权限。
重要说明:当您将单个文件或目录层次结构的写权限授予 ASPNET 帐户时,所有在服务器上使用 ASPNET 帐户运行的 ASP.NET Web 应用程序也可以向此文件或目录层次结构写入。 有关在代码中模拟特定用户的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:306158 (http://support.microsoft.com/kb/306158/) 如何在 ASP.NET 应用程序中实现模拟
要更改文件的访问控制列表,请按照下列步骤操作: 1. 打开 Windows 资源管理器。
2. 选择您要更改权限的文件或文件夹。
3. 在文件菜单上,单击属性。
4. 单击安全选项卡。单击以选中 ACL 权限对应的复选框。
您也可以使用脚本或 Cacls.exe 命令行工具(包括在 Windows 中)更改文件的 ACL。
ASP.NET 1.1 使用 \Documents and Settings\\ASPNET 文件夹来存储进程文件(其中 是计算机上安装 ASP.NET 的驱动器, 是计算机的名称)。
启用模拟
使用模拟,可在请求实体的安全上下文中运行,既可以作为经过身份验证的用户也可以作为匿名用户运行。在 ASP.NET 中,模拟是可选的,默认情况下不启用。要在计算机或应用程序级别启用模拟,请在 Machine.config 或 Web.config 文件的 部分添加以下配置指令: 使用数据库
使用 SQL 身份验证连接到数据库的应用程序通常不受切换到 ASPNET 帐户的影响。使用集成身份验证和模拟的应用程序也是如此。但是,如果应用程序没有模拟并且正使用 Windows 身份验证,则您必须为 ASPNET 帐户授予对数据库的访问权限。
在尝试通过命名管道使用集成的 Windows 身份验证向 Microsoft SQL Server 验证身份时,您不能使用 ASPNET 帐户。但是,您可以通过传输控制协议 (TCP) 传输成功地让 ASPNET 帐户使用集成的 Windows 身份验证。
如果应用程序必须使用 Microsoft Access 数据库,则 ASPNET 帐户必须能够写入数据库文件。管理员必须相应地调整文件权限。
使用事件日志
必须向应用程序事件日志中写入事件的应用程序,在其使用 ASPNET 帐户运行时能够向事件日志中写入。如果应用程序必须创建新的事件日志类别,则该应用程序必须在 HKEY_LOCAL_MACHINE 注册表配置单元下创建一个注册表项,而 ASPNET 帐户无法做到这一点。
要在运行时创建类别,您必须启用模拟,然后模拟一个具有更多访问权限的帐户。或者,可以让管理员创建该类别,这样应用程序就可以在运行时写入该类别。
如果应用程序必须创建新事件日志类别,请在安装时创建这些类别。在创建该类别后,ASPNET 帐户就可以写入应用程序事件日志了。
使用 System.DirectoryServices 和 Active Directory
如果 Web 应用程序必须访问 Active Directory,那么该应用程序可以在支持委派的环境中使用模拟。或者,该应用程序可向 System.DirectoryServices 命名空间中的 DirectoryEntry 构造函数提供显式凭据以访问 Active Directory。如果应用程序使用显式凭据,则应用程序应该相应地使用诸如 COM+ 构造字符串或 Windows 数据保护应用程序编程接口 (API) 一类的技术存储凭据。
使用性能计数器
ASPNET 帐户具有足够的权限向性能计数器数据中写入(但没有读取权限)。如果应用程序必须读取性能计数器数据或创建性能计数器类别,则管理员或高级用户权限是必需的。
如果应用程序必须创建新的性能计数器类别,则在安装时创建这些类别。在创建这些类别后,ASPNET 帐户可以向计数器中写入。
您在使用 ASPNET 帐户时仍可以使用性能监视器工具 (Perfmon.exe) 监视 ASP.NET 性能计数器。
在 Windows 2000 中,请按照下列步骤操作: 1. 运行注册表编辑器。
2. 找到以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASP.NET_1.1.4322\Names
3. 单击“安全”选项卡。
4. 使用以下权限添加辅助进程标识: • 查询数值
• 设置数值
• 创建子项
• 枚举子项
• 通知读取控制
在 Windows Server 2003 中,将此标识添加到 IIS_WPG 组。
启动进程外 COM 服务器
在作为 ASPNET 帐户运行时必须启动进程外 COM 服务器的应用程序可以使用 Dcomcnfg.exe 工具专门向该帐户授予启动权限。
调试问题
默认情况下,您不能从客户端应用程序逐句执行 XML Web 服务调用。要逐句执行 XML Web 服务,您必须将 ASPNET 帐户添加到正运行 XML Web 服务的计算机上的“调试器用户”组。
用固定标识运行代码
在 COM+ 服务中,您可以用固定标识运行代码。您可以使用 System.EnterpriseServices 命名空间的 ServicedComponent 类来编写利用 COM+ 服务的托管代码组件。您可以在从 ServicedComponent 派生出的一个类中包含特权功能,然后作为一个具有配置的标识的 COM+ 服务器应用程序运行此类。
在 UNC 共享上编译代码隐藏文件
在 ASP.NET 中,您可以使用几种方法开发应用程序文件: • 您可以在 .aspx 文件中使用超文本标记语言 (HTML),然后可以在 Bin 目录的预编译的程序集中存储该页的代码。这是 Microsoft Visual Studio .NET 模型。
• 您可以将所有代码和 HTML 内容打包在单个即需编译的源文件中。
• 您可以将 HTML 表示放入一个 ASP.NET 文件中,然后通过在 <%@ Assembly %> 指令中使用 src 属性来动态编译该文件的任何相关的源代码。
注意:如果应用程序内容位于网络共享中,则编译器以 ASPNET 帐户启动并且不具有访问该文件的网络凭据。如果您使用网络共享区,则不能使用 src 属性指向某个文件。您必须改用其他方法之一。
在主域控制器或备份域控制器上使用 ASP.NET
默认情况下,如果在域控制器上使用 ASP.NET 1.1,则 ASP.NET Web 应用程序将运行在 IWAM_ 帐户的安全上下文中(其中 是计算机的名称)。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行
返回页首读取 IIS 元数据库
ASPNET 帐户无法读取 Microsoft Internet 信息服务 (IIS) 元数据库。如果应用程序必须访问元数据库设置,则可以通过使用 Metaacl.exe 实用工具,有选择地向元数据库节点授予读访问权限。
如果应用程序必须使用 .disco 文件(.disco 文件必须能够读取 IIS 元数据库才可以提供发现服务),则必须为 ASPNET 帐户授予对该元数据库的读访问权限。
使用 System.Management 和 WMI
Windows Management Instrumentation (WMI) 具有强大的管理功能,您可以用它来管理和监视基于 Windows 的计算机。但是,当 ASP.NET 应用程序以 ASPNET 帐户运行时,此帐户只具有与“所有人”相同的默认访问权限。这些权限包括为本地计算机上的提供程序读取 WMI 数据、写入提供程序数据和执行方法。有关 WMI 安全机制的更多信息,请参见 WMI Platform SDK 文档或 MSDN。
注意:在没有安装 Service Pack 3 (SP3) 或更高版本的 Windows 2000 上,或者在没有安装 Service Pack 1 (SP1) 或更高版本的 Windows XP 上,在 ASPNET 帐户下运行的 ASP.NET Web 应用程序可能无法运行,并且您可能会收到“Access Denied (0x80041003)”(访问被拒绝 (0x80041003))错误信息。发生此错误的原因是该帐户不具有足够的权限来访问某些 WMI 命名空间。要解决此问题,请安装 Windows XP SP1 或更高版本,或者安装 Windows 2000 SP3 或更高版本。要变通解决此问题,请按照下列步骤操作: 1. 打开“计算机管理”Microsoft 管理控制台 (MMC) 管理单元。
2. 展开服务和应用程序,然后选择 WMI 控制。
3. 右键单击 WMI 控制,然后单击属性。
4. 在 WMI 控制属性对话框中,单击安全选项卡。
5. 展开根目录,选择 CIMV2,然后单击安全。
6. 在安全对话框中,单击高级。
7. 在访问控制设置对话框中,单击添加。选择 localMachineName\ASPNET,然后单击确定。
8. 在权限项目对话框中,确保应用到设置为这个名称空间和子名称空间。
9. 确保选中允许“启用帐户”和允许“远程启用”复选框。
10. 单击每个对话框中的确定直到出现 WMI 控制属性对话框。
11. 为您的应用程序将访问的其他 WMI 命名空间重复步骤 5 到 10。
12. 重新启动 IIS。为此,请从命令行运行 IISRESET。
默认情况下,ASP.NET 为 ASPNET 帐户生成保密性强的密码。因此,只要该 ASPNET 帐户密码在计算机之间不是共享的或重置为非默认值的其他值,此替代方法就是安全的。
与桌面交互
当将 IIS 服务配置成允许与桌面交互时,ASPNET 帐户会因为默认窗口站和桌面上的“自由选择的访问控制列表”(DACL) 而没有访问桌面的适当权限。可以让管理员更改这些 DACL,或者您可以使用有权访问这些对象的帐户运行此进程。
删除 ASP.NET
当您删除 ASP.NET 时,ASPNET 帐户被禁用并继续留在系统上。如果您不打算重新安装 ASP.NET,则可以删除 ASPNET 帐户。
如果在显式删除 ASPNET 帐户之后重新安装 ASP.NET,就会创建一个具有新的安全标识 (SID) 的新 ASPNET 帐户。因此,任何指向以前 ASPNET 帐户的 ACL 将都不再适用于这个新的 ASPNET 帐户。
回到顶端
参考
有关 Windows 2000 中默认的访问控制列表的更多信息,请参见下面的 Microsoft 白皮书:http://www.microsoft.com/windows2000/docs/SecDefs.doc (http://www.microsoft.com/windows2000/docs/secdefs.doc)
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:329290 (http://support.microsoft.com/kb/329290/) 如何使用 ASP.NET 工具加密凭据和会话状态连接字符串
315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默认 ASPNET 帐户不能正常运行