您的位置:首页 > 编程语言 > ASP

如何创建一个自定义帐户来运行 ASP.NET

2006-02-21 15:34 615 查看

如何创建一个自定义帐户来运行 ASP.NET

发布日期: 10/28/2004 | 更新日期: 10/28/2004



浏览全部“安全性指南”主题

Microsoft Corporation

目标

本模块用于:

创建一个具有足够权限正确运行 ASP.NET 应用程序的最小特权帐户。

配置 ASP.NET,使其使用自定义的最小权限帐户来运行。

适用于:

本模块适用于下列产品和技术:

Microsoft_ Windows_ XP 或 Windows 2000 Server(带 Service Pack 3)以及更高版本的操作系统

Microsoft .NET Framework 版本 1.0(带 Service Pack 2)以及更高版本

Internet 信息服务 (IIS) 5.0 或 6.0(仅当使用 IIS 5.0 隔离模式时)

本模块的使用方法

要最大程度的利用本模块:

必须有开发 ASP.NET Web 应用程序的经验并熟悉 machine.config 文件的用途和结构。

必须有使用 Windows 管理工具创建和管理独立或基于域的 Windows 用户帐户的经验。

阅读模块“ASP.NET Security”。本模块将向您提供下列各项的详细信息:ASP.NET 安全性是如何工作的,ASP.NET 辅助进程标识对一个正在执行的应用程序的权限有哪些影响,以及如何使用模拟来轻松地向 Web 应用程序的用户授予适当的权限级别。



本页内容


摘要


预备知识


创建一个新的本地帐户


分配最小特权


分配 NTFS 权限


配置 ASP.NET,从而使用新帐户来运行

摘要

默认情况下,每个 ASP.NET 辅助进程在名为 ASPNET 的最小特权帐户的上下文中运行。如果 ASP.NET 应用程序部署在基于域的服务器上,或需要访问远程服务器上的资源,则可以通过配置 ASP.NET 以运行在不同帐户的上下文中来简化管理。

本模块描述了如何将 ASP.NET 配置为在自定义本地帐户或域帐户的上下文中运行,并描述了分配此帐户以使其正常工作的权限。



返回页首

预备知识

在开始使用本模块之前,应了解以下内容:

ASP.NET 辅助进程标识

用于运行 ASP.NET 的默认帐户(在安装时创建)是一个最小特权的本地帐户,并在 machine.config 中以如下方式指定:

<processModel enable="true" userName="machine" password="AutoGenerate" />

此帐户在本地用户和组下标识为 ASPNET ,并有一个在 Local System Authority (LSA) 中受到安全保护的强密码。

当您需要使用 ASP.NET 进程标识访问网络资源(如数据库)时,可以执行下列任一操作:

使用域帐户。

使用“镜像”本地帐户(即在两台计算机上用户名和密码匹配的帐户)。在计算机位于没有信任关系的不同域中时,或计算机由防火墙隔开而无法打开 NTLM 或 Kerberos 身份验证所需的端口时,需要使用此方法。

最简单的方法是在 Web 服务器上将 ASPNET 帐户的密码改为一个已知的值,然后在目标计算机上用相同的密码创建一个名为 ASPNET 的帐户。在 Web 服务器上,必须首先更改本地用户和组中的 ASPNET 帐户密码,然后替换 machine.config 中 <processModel> 元素上的凭据。不应将纯文本密码存储在 machine.config 中,而应改用 aspnet_setreg.exe 将加密密码存储在注册表中。有关详细信息,请参阅模块 8“ASP.NET 安全性”。

<processModel enable="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
ASPNET_SETREG,password" . . ./>

可以使用本模块中提供的步骤创建一个最小特权的本地帐户。

模拟固定标识

通过在 web.config 中采用下列设置,您可以为特定的虚拟目录设置固定标识。使用 aspnet_setreg.exe 将加密凭据存储在注册表中。

<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,password" />

如果在同一个 Web 服务器上有多个 Web 站点,而这些 Web 站点需要以不同的身份运行,则通常使用此方法;例如,在应用程序宿主方案中就需要采用这种方法。

本模块了描述如何创建最小特权的本地帐户。如果您主要进行管理工作,则可以使用一个具有强密码的最小特权受限域帐户。

当考虑用于运行 ASP.NET 的帐户时,则请记住下列几点:

默认情况下,ASP.NET 不进行模拟。因此,Web 应用程序所执行的任何资源访问都使用 ASP.NET 进程身份。在此情况下,Windows 资源必须有一个向 ASP.NET 进程帐户授予访问权的访问控制列表 (ACL)。

如果启用了模拟,则应用程序使用原始调用方的安全上下文来访问资源,或如果配置了 IIS 进行匿名身份验证,则使用匿名 Internet 用户帐户(默认情况下为 IUSR_MACHINE)。在此情况下,资源必须有基于原始调用方身份(或 IUSR_MACHINE)的 ACL。

在创建自定义帐户时,应始终遵循最小特权原则 — 只提供最小限度的所需特权和权限。

避免使用 SYSTEM 帐户运行 ASP.NET。

避免向此帐户授予“作为部分操作系统”的特权。



返回页首

创建一个新的本地帐户

此过程创建一个新的本地帐户。默认情况下,这个新帐户将被添加到本地 Users 组中。

要创建一个新的本地帐户,请执行下列操作:

1.

创建一个本地帐户(例如“CustomASPNET”)。

确保对此帐户使用强密码。强密码应至少包含七个字符,并采用大小写字母、数字和其他字符(如 *、? 或 $)的混合方式。

2.

清除 User must change password at next logon 选项。

3.

选择 Password never expires 选项。



返回页首

分配最小特权

此过程分配运行 ASP.NET 所需的一组最小的特权。

要分配最小特权,请执行下列操作:

1.

Administrative Tools 程序组中,启动 Local Security Policy 工具。

2.

展开 Local Policies,然后选择 User Rights Assignment

右窗格中会显示出一个特权列表。

3.

向新帐户分配下列特权:

从网络访问此计算机

作为批处理作业登录

作为服务登录

拒绝本地登录

拒绝通过终端服务登录

注意 要向帐户分配特权,请双击此特权,然后单击 Add 来选择所需的帐户。

4.

关闭此工具。



返回页首

分配 NTFS 权限

此过程在本地文件系统中向自定义的 ASP.NET 帐户授予所需的 NTFS 权限。

注意 此过程中的步骤适用于 Web 服务器上的文件系统(而不适用于远程计算机上的文件系统,为了进行网络身份验证,可以在远程计算机上复制此帐户)。

要分配 NTFS 权限,请执行下列步骤:

启动 Windows 资源管理器,并向表 1 中指定的文件夹分配适当的权限。

表 1 中提到的固定模拟帐户是指可以使用 web.config 中的 <identity> 元素有选择地配置的帐户,如下所示。

<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,password" />

在本例中,aspnet_setreg.exe 已被用于以加密格式将自定义帐户凭据存储在注册表中。

表 1: 所需的 NTFS 权限
位置所需权限帐户备注
临时 ASP.NET 文件:
C:\WINNT\Microsoft.NET\Framework\<version>\
临时 ASP.NET 文件

完全控制

Process 和固定模拟帐户

这是 ASP.NET 的动态编译位置。在此文件夹下,为每个应用程序在离散目录中生成应用程序代码。
<compilation> 元素中的 tempdir 属性可以用于更改此默认位置。

临时文件夹:
C:\WINNT\temp

Read/Write/Delete

Process

Web 服务用于生成序列化代理的位置。
注意,Delete 权限使用 Windows 资源管理器文件夹属性对话框的 Security 页上的 Advanced 按钮设置。

应用程序虚拟目录:
C:\inetpub\wwwroot\webapp1

Read

Process

Web 应用程序文件的位置(即应用程序的虚拟根目录)。
默认情况下,用户组具有适当的访问权限。

安装 (%installroot) 层次结构:
(C:\WINNT\Microsoft.Net\Framework\v1.0.3705)

Read

Process和固定模拟帐户

ASP.NET 必须能够访问 .NET Framework 程序集。
默认情况下,用户组具有适当的访问权限。

全局程序集缓存:
C:\WINNT\assembly

Read

Process 和固定模拟帐户

这是全局程序集缓存。不能直接使用 Windows 资源管理器来编辑此文件夹的 ACL。应改用一个命令窗口并运行下列命令:
cacls %windir%\assembly /e /t /p domain\useraccount:R
另外,在使用 Windows 资源管理器前,用下列命令取消对 shfusion.dll 的注册:
regsvr32–u shfusion.dll
在用 Windows 资源管理器设置权限后,用下列命令重新注册 shfusion.dll:
regsvr32 shfusion.dll

Web 站点根目录:
C:\inetpub\wwwroot 或默认 Web 站点指向的路径

Read

Process

ASP.NET 读取配置文件并监视此文件夹中的文件更改。

系统根目录:
C:\WINNT\system32

Read

Process

适用于 Framework 加载的系统 DLL。

应用程序文件夹层次结构
C:\
C:\inetpub\
C:\inetpub\wwwroot\
C:\inetpub\wwwroot\mywebapp1

List Folder/Read

Process

对于文件更改通知和 C# 编译器(为使文件规范化),Procss 帐户需要应用程序文件夹层次结构的列表文件夹和读取数据权限。这是返回到根目录所经过的全部父文件夹。



返回页首

配置 ASP.NET,从而使用新帐户来运行

此过程通过编辑 machine.config 来将 ASP.NET 配置为使用新帐户来运行。

要将 ASP.NET 配置为使用新帐户来运行,请执行下列步骤:

1.

在命令提示符下,运行 aspnet_setreg.exe 以将自定义帐户的用户名和密码的加密版本添加到注册表中。有关此实用工具的详细信息及其下载,请参阅 Microsoft 知识库文章 329290“HOWTO: Use the ASP.NET Utility to Encrypt Credentials and Session State Connection Strings”,位于 : http://support.microsoft.com/default.aspx?scid=329290.

aspnet_setreg–k:SOFTWARE\YourSecureApp\processModel
–u:"CustomASPNET"–p:"YourStrongPassword"
2.

使用 Visual Studio.NET 或记事本打开 machine.config。

Machine.config 位于下列文件夹中:

C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG
3.

定位到 <processModel> 元素并将 userNamepassword 属性设置为包含下列指向加密凭据详细信息的字符串。

Default:
<processModel userName="machine" password="AutoGenerate" . . ./>
Becomes:
<processModel
userName="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\processmodel\
ASPNET_SETREG,password" . . . />
4.

将更改保存到 machine.config 中

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐