本文概述向默認(rèn)的進(jìn)程帳戶授予的訪問權(quán)限并描述這些權(quán)限可能對(duì)于某些任務(wù)限制過(guò)嚴(yán)的一些情況。
在 Microsoft Windows 2000 和 Microsoft Windows XP 上的 ASP.NET 的默認(rèn)安裝中,ASP.NET 在輔助進(jìn)程中運(yùn)行 Web 應(yīng)用程序代碼。默認(rèn)情況下,此進(jìn)程的標(biāo)識(shí)使用名為 ASPNET 帳戶(全名是 aspnet_wp 帳戶)的本地帳戶。在 ASP.NET 的試用版中,該進(jìn)程標(biāo)識(shí)為 System,這是一個(gè)功能強(qiáng)大的、對(duì)計(jì)算機(jī)具有許多訪問權(quán)限的管理帳戶。為了提供特權(quán)較少的默認(rèn)安裝,ASP.NET 的發(fā)行版本使用權(quán)限較小的 ASPNET 帳戶,該帳戶適合于大多數(shù) Web 應(yīng)用程序。
注意:默認(rèn)情況下,如果使用 Microsoft Internet 信息服務(wù) (IIS) 6.0,則 ASP.NET Web 應(yīng)用程序?qū)⑦\(yùn)行在 NetworkService 帳戶的安全上下文中。
配置進(jìn)程標(biāo)識(shí)
您可以在安裝根目錄的 Config 子目錄中的 Machine.config 文件的
<processModel> 部分配置進(jìn)程標(biāo)識(shí)。
userName 和
password 屬性可控制進(jìn)程標(biāo)識(shí)。這些屬性的默認(rèn)值如下所示:
<processModel userName="machine" password="AutoGenerate" />
machine 和 AutoGenerate 值指示 ASP.NET 使用內(nèi)置的 ASPNET 帳戶并為該帳戶使用保密性強(qiáng)的存儲(chǔ)于本地安全機(jī)構(gòu) (LSA) 中的隨機(jī)密碼。
如果您要使用具有更多訪問權(quán)限的進(jìn)程,則可以將 userName 屬性設(shè)置為 System,這將導(dǎo)致 ASP.NET 輔助進(jìn)程使用與 Inetinfo.exe 進(jìn)程相同的標(biāo)識(shí)運(yùn)行。Inetinfo.exe 進(jìn)程默認(rèn)情況下以 System 標(biāo)識(shí)運(yùn)行。在您配置 ASP.NET 輔助進(jìn)程以使用 System 標(biāo)識(shí)時(shí),該 ASP.NET 輔助進(jìn)程可以訪問本地計(jì)算機(jī)上的幾乎所有資源。在運(yùn)行 Windows 2000 或 Windows XP 的計(jì)算機(jī)上,System 帳戶還具有網(wǎng)絡(luò)憑據(jù)并可以作為計(jì)算機(jī)帳戶訪問網(wǎng)絡(luò)資源。 要配置進(jìn)程使之以 System 標(biāo)識(shí)運(yùn)行,請(qǐng)按以下方式更改 <processModel> 部分的 userName 屬性: <processModel userName="SYSTEM" password="AutoGenerate" />
ASPNET 帳戶的默認(rèn)權(quán)限
在安裝 ASP.NET 時(shí),將作為本地帳戶創(chuàng)建 ASPNET 帳戶。ASPNET 帳戶僅屬于該計(jì)算機(jī)上的用戶組。因此,ASPNET 帳戶具有與用戶組關(guān)聯(lián)的所有權(quán)限,并且可以訪問用戶組對(duì)其具有訪問權(quán)限的任何資源。ASPNET 帳戶從用戶組繼承了以下用戶權(quán)限:
• | SeChangeNotifyPrivilege |
• | SeUndockPrivilege |
• | SeInteractiveLogonRight |
• | SeNetworkLogonRight |
除這些權(quán)限之外,默認(rèn)情況下,還授予 ASPNET 帳戶以下權(quán)限:
• | SeServiceLogonRight |
• | SeBatchLogonRight |
• | SeDenyInteractiveLogonRight |
ASP.NET 向 ASPNET 帳戶授予對(duì)以下文件夾的特定的完全訪問權(quán)限:
• | 臨時(shí) ASP.NET 文件 |
• | %windir%\temp |
另外,ASP.NET 將授予對(duì) Microsoft .NET Framework 安裝目錄的讀取權(quán)限。
下表列出了 ASPNET 帳戶所需的“訪問控制列表”(ACL)。Windows 2000 和 Microsoft .NET Framework 的默認(rèn)安裝包含這些訪問控制列表。
• | 位置:%installroot%\ASP.NET Temporary Files 訪問類型:對(duì)該文件夾的讀/寫權(quán)限和對(duì)驅(qū)動(dòng)器根文件夾的“列出文件夾內(nèi)容”權(quán)限 帳戶:進(jìn)程帳戶和配置的模擬帳戶 說(shuō)明:這是用于 ASP.NET 動(dòng)態(tài)編譯的位置。在此位置下,為每一應(yīng)用程序在獨(dú)立的目錄中生成應(yīng)用程序代碼。您可以使用 <compilation> 部分中的 tempDir 屬性來(lái)配置根位置。
注意:如果您更改 machine.config 以在另一位置保存 ASP.NET 臨時(shí)文件,那么 ASPNET 帳戶必須具有對(duì)驅(qū)動(dòng)器根級(jí)別的“列出文件夾內(nèi)容”訪問類型。 |
• | 位置:%windir%\temp 訪問類型:讀/寫 帳戶:進(jìn)程帳戶 說(shuō)明:這是可擴(kuò)展標(biāo)記語(yǔ)言 (XML) Web 服務(wù)用來(lái)生成序列化代理的位置。 |
• | 位置:應(yīng)用程序目錄 訪問類型:讀取 帳戶:進(jìn)程帳戶和配置的模擬帳戶 說(shuō)明:這是應(yīng)用程序內(nèi)容的位置(只需要“讀取”權(quán)限)。 有關(guān)更多信息,請(qǐng)?jiān)L問下面的 Microsoft 網(wǎng)站: |
• | 位置:網(wǎng)站根目錄(%systemdrive%\inetpub\wwwroot 或默認(rèn)網(wǎng)站指向的路徑) 訪問類型:讀取 帳戶:進(jìn)程帳戶和配置的模擬帳戶 說(shuō)明:ASP.NET 嘗試在 drive:\inetpub\wwwroot\web.config 位置讀取配置文件并監(jiān)視更改。 |
• | 位置:%installroot% 層次結(jié)構(gòu) 訪問類型:讀取 帳戶:進(jìn)程帳戶和配置的模擬帳戶 說(shuō)明:ASP.NET 必須能夠訪問 Machine.config 文件(在 %installroot% 下的 \Config 子目錄中)上的 .NET Framework 程序集。 |
• | 位置:%windir%\assembly 訪問類型:讀取 帳戶:進(jìn)程帳戶或配置的模擬帳戶 說(shuō)明:這是包含共享程序集的全局程序集緩存。 |
有關(guān)基于 Windows 2000 的計(jì)算機(jī)的默認(rèn) ACL 的更多信息,請(qǐng)參見
參考 一節(jié)中的“Windows 2000 中的默認(rèn)訪問控制設(shè)置”參考。
注意:默認(rèn)情況下,ASPNET 帳戶通常不具有用來(lái)執(zhí)行在本文中描述的某些任務(wù)的正確訪問權(quán)限。
訪問資源
以下幾節(jié)介紹如何使用各種資源。如果您啟用模擬并且向模擬的帳戶授予對(duì)資源的訪問權(quán)限,則可以本地訪問其中的許多資源。但是,在您嘗試訪問遠(yuǎn)程資源時(shí),模擬通常不起作用,除非應(yīng)用程序使用可委派的身份驗(yàn)證機(jī)制,例如 Kerberos 或基本身份驗(yàn)證。您還可以使用 COM+ 服務(wù)訪問資源,這在
用固定標(biāo)識(shí)運(yùn)行代碼 一節(jié)中作了概述。
使用文件資源
要使通過(guò) ASPNET 帳戶運(yùn)行的應(yīng)用程序能夠向文件寫入,您可以在向文件寫入之前,在代碼中模擬特定的用戶?;蛘吣梢允谟?ASPNET 帳戶寫權(quán)限。您可以授予對(duì)單個(gè)文件或目錄層次結(jié)構(gòu)的寫權(quán)限。
重要說(shuō)明:當(dāng)您將單個(gè)文件或目錄層次結(jié)構(gòu)的寫權(quán)限授予 ASPNET 帳戶時(shí),所有在服務(wù)器上使用 ASPNET 帳戶運(yùn)行的 ASP.NET Web 應(yīng)用程序也可以向此文件或目錄層次結(jié)構(gòu)寫入。 有關(guān)在代碼中模擬特定用戶的更多信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
306158 (http://support.microsoft.com/kb/306158/) 如何在 ASP.NET 應(yīng)用程序中實(shí)現(xiàn)模擬
要更改文件的訪問控制列表,請(qǐng)按照下列步驟操作:
1. | 打開 Windows 資源管理器。 |
2. | 選擇您要更改權(quán)限的文件或文件夾。 |
3. | 在文件菜單上,單擊屬性。 |
4. | 單擊安全選項(xiàng)卡。單擊以選中 ACL 權(quán)限對(duì)應(yīng)的復(fù)選框。 |
您也可以使用腳本或 Cacls.exe 命令行工具(包括在 Windows 中)更改文件的 ACL。
ASP.NET 1.1 使用
<DriveName>\Documents and Settings\
<MachineName>\ASPNET 文件夾來(lái)存儲(chǔ)進(jìn)程文件(其中
<DriveName> 是計(jì)算機(jī)上安裝 ASP.NET 的驅(qū)動(dòng)器,
<MachineName> 是計(jì)算機(jī)的名稱)。
啟用模擬
使用模擬,可在請(qǐng)求實(shí)體的安全上下文中運(yùn)行,既可以作為經(jīng)過(guò)身份驗(yàn)證的用戶也可以作為匿名用戶運(yùn)行。在 ASP.NET 中,模擬是可選的,默認(rèn)情況下不啟用。要在計(jì)算機(jī)或應(yīng)用程序級(jí)別啟用模擬,請(qǐng)?jiān)?Machine.config 或 Web.config 文件的
<system.web> 部分添加以下配置指令:
<identity impersonate="true"/>
使用數(shù)據(jù)庫(kù)
使用 SQL 身份驗(yàn)證連接到數(shù)據(jù)庫(kù)的應(yīng)用程序通常不受切換到 ASPNET 帳戶的影響。使用集成身份驗(yàn)證和模擬的應(yīng)用程序也是如此。但是,如果應(yīng)用程序沒有模擬并且正使用 Windows 身份驗(yàn)證,則您必須為 ASPNET 帳戶授予對(duì)數(shù)據(jù)庫(kù)的訪問權(quán)限。
在嘗試通過(guò)命名管道使用集成的 Windows 身份驗(yàn)證向 Microsoft SQL Server 驗(yàn)證身份時(shí),您不能使用 ASPNET 帳戶。但是,您可以通過(guò)傳輸控制協(xié)議 (TCP) 傳輸成功地讓 ASPNET 帳戶使用集成的 Windows 身份驗(yàn)證。
如果應(yīng)用程序必須使用 Microsoft Access 數(shù)據(jù)庫(kù),則 ASPNET 帳戶必須能夠?qū)懭霐?shù)據(jù)庫(kù)文件。管理員必須相應(yīng)地調(diào)整文件權(quán)限。
使用事件日志
必須向應(yīng)用程序事件日志中寫入事件的應(yīng)用程序,在其使用 ASPNET 帳戶運(yùn)行時(shí)能夠向事件日志中寫入。如果應(yīng)用程序必須創(chuàng)建新的事件日志類別,則該應(yīng)用程序必須在
HKEY_LOCAL_MACHINE 注冊(cè)表配置單元下創(chuàng)建一個(gè)注冊(cè)表項(xiàng),而 ASPNET 帳戶無(wú)法做到這一點(diǎn)。
要在運(yùn)行時(shí)創(chuàng)建類別,您必須啟用模擬,然后模擬一個(gè)具有更多訪問權(quán)限的帳戶。或者,可以讓管理員創(chuàng)建該類別,這樣應(yīng)用程序就可以在運(yùn)行時(shí)寫入該類別。
如果應(yīng)用程序必須創(chuàng)建新事件日志類別,請(qǐng)?jiān)诎惭b時(shí)創(chuàng)建這些類別。在創(chuàng)建該類別后,ASPNET 帳戶就可以寫入應(yīng)用程序事件日志了。
使用 System.DirectoryServices 和 Active Directory
如果 Web 應(yīng)用程序必須訪問 Active Directory,那么該應(yīng)用程序可以在支持委派的環(huán)境中使用模擬?;蛘?,該應(yīng)用程序可向
System.DirectoryServices 命名空間中的
DirectoryEntry 構(gòu)造函數(shù)提供顯式憑據(jù)以訪問 Active Directory。如果應(yīng)用程序使用顯式憑據(jù),則應(yīng)用程序應(yīng)該相應(yīng)地使用諸如 COM+ 構(gòu)造字符串或 Windows 數(shù)據(jù)保護(hù)應(yīng)用程序編程接口 (API) 一類的技術(shù)存儲(chǔ)憑據(jù)。
使用性能計(jì)數(shù)器
ASPNET 帳戶具有足夠的權(quán)限向性能計(jì)數(shù)器數(shù)據(jù)中寫入(但沒有讀取權(quán)限)。如果應(yīng)用程序必須讀取性能計(jì)數(shù)器數(shù)據(jù)或創(chuàng)建性能計(jì)數(shù)器類別,則管理員或高級(jí)用戶權(quán)限是必需的。
如果應(yīng)用程序必須創(chuàng)建新的性能計(jì)數(shù)器類別,則在安裝時(shí)創(chuàng)建這些類別。在創(chuàng)建這些類別后,ASPNET 帳戶可以向計(jì)數(shù)器中寫入。
您在使用 ASPNET 帳戶時(shí)仍可以使用性能監(jiān)視器工具 (Perfmon.exe) 監(jiān)視 ASP.NET 性能計(jì)數(shù)器。
在 Windows 2000 中,請(qǐng)按照下列步驟操作:
1. | 運(yùn)行注冊(cè)表編輯器。 |
2. | 找到以下注冊(cè)表項(xiàng): HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASP.NET_1.1.4322\Names |
3. | 單擊“安全”選項(xiàng)卡。 |
4. | 使用以下權(quán)限添加輔助進(jìn)程標(biāo)識(shí): • | 查詢數(shù)值 | • | 設(shè)置數(shù)值 | • | 創(chuàng)建子項(xiàng) | • | 枚舉子項(xiàng) | • | 通知讀取控制 | |
在 Windows Server 2003 中,將此標(biāo)識(shí)添加到 IIS_WPG 組。
啟動(dòng)進(jìn)程外 COM 服務(wù)器
在作為 ASPNET 帳戶運(yùn)行時(shí)必須啟動(dòng)進(jìn)程外 COM 服務(wù)器的應(yīng)用程序可以使用 Dcomcnfg.exe 工具專門向該帳戶授予啟動(dòng)權(quán)限。
調(diào)試問題
默認(rèn)情況下,您不能從客戶端應(yīng)用程序逐句執(zhí)行 XML Web 服務(wù)調(diào)用。要逐句執(zhí)行 XML Web 服務(wù),您必須將 ASPNET 帳戶添加到正運(yùn)行 XML Web 服務(wù)的計(jì)算機(jī)上的“調(diào)試器用戶”組。
用固定標(biāo)識(shí)運(yùn)行代碼
在 COM+ 服務(wù)中,您可以用固定標(biāo)識(shí)運(yùn)行代碼。您可以使用
System.EnterpriseServices 命名空間的
ServicedComponent 類來(lái)編寫利用 COM+ 服務(wù)的托管代碼組件。您可以在從
ServicedComponent 派生出的一個(gè)類中包含特權(quán)功能,然后作為一個(gè)具有配置的標(biāo)識(shí)的 COM+ 服務(wù)器應(yīng)用程序運(yùn)行此類。
在 UNC 共享上編譯代碼隱藏文件
在 ASP.NET 中,您可以使用幾種方法開發(fā)應(yīng)用程序文件:
• | 您可以在 .aspx 文件中使用超文本標(biāo)記語(yǔ)言 (HTML),然后可以在 Bin 目錄的預(yù)編譯的程序集中存儲(chǔ)該頁(yè)的代碼。這是 Microsoft Visual Studio .NET 模型。 |
• | 您可以將所有代碼和 HTML 內(nèi)容打包在單個(gè)即需編譯的源文件中。 |
• | 您可以將 HTML 表示放入一個(gè) ASP.NET 文件中,然后通過(guò)在 <%@ Assembly %> 指令中使用 src 屬性來(lái)動(dòng)態(tài)編譯該文件的任何相關(guān)的源代碼。 |
注意:如果應(yīng)用程序內(nèi)容位于網(wǎng)絡(luò)共享中,則編譯器以 ASPNET 帳戶啟動(dòng)并且不具有訪問該文件的網(wǎng)絡(luò)憑據(jù)。如果您使用網(wǎng)絡(luò)共享區(qū),則不能使用
src 屬性指向某個(gè)文件。您必須改用其他方法之一。
在主域控制器或備份域控制器上使用 ASP.NET
默認(rèn)情況下,如果在域控制器上使用 ASP.NET 1.1,則 ASP.NET Web 應(yīng)用程序?qū)⑦\(yùn)行在 IWAM_
<ComputerName> 帳戶的安全上下文中(其中
<ComputerName> 是計(jì)算機(jī)的名稱)。
有關(guān)其他信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
315158 (http://support.microsoft.com/kb/315158/) FIX:ASP.NET 在域控制器上使用默認(rèn) ASPNET 帳戶不能正常運(yùn)行
返回頁(yè)首讀取 IIS 元數(shù)據(jù)庫(kù)
ASPNET 帳戶無(wú)法讀取 Microsoft Internet 信息服務(wù) (IIS) 元數(shù)據(jù)庫(kù)。如果應(yīng)用程序必須訪問元數(shù)據(jù)庫(kù)設(shè)置,則可以通過(guò)使用 Metaacl.exe 實(shí)用工具,有選擇地向元數(shù)據(jù)庫(kù)節(jié)點(diǎn)授予讀訪問權(quán)限。
如果應(yīng)用程序必須使用 .disco 文件(.disco 文件必須能夠讀取 IIS 元數(shù)據(jù)庫(kù)才可以提供發(fā)現(xiàn)服務(wù)),則必須為 ASPNET 帳戶授予對(duì)該元數(shù)據(jù)庫(kù)的讀訪問權(quán)限。
使用 System.Management 和 WMI
Windows Management Instrumentation (WMI) 具有強(qiáng)大的管理功能,您可以用它來(lái)管理和監(jiān)視基于 Windows 的計(jì)算機(jī)。但是,當(dāng) ASP.NET 應(yīng)用程序以 ASPNET 帳戶運(yùn)行時(shí),此帳戶只具有與“所有人”相同的默認(rèn)訪問權(quán)限。這些權(quán)限包括為本地計(jì)算機(jī)上的提供程序讀取 WMI 數(shù)據(jù)、寫入提供程序數(shù)據(jù)和執(zhí)行方法。有關(guān) WMI 安全機(jī)制的更多信息,請(qǐng)參見 WMI Platform SDK 文檔或 MSDN。
注意:在沒有安裝 Service Pack 3 (SP3) 或更高版本的 Windows 2000 上,或者在沒有安裝 Service Pack 1 (SP1) 或更高版本的 Windows XP 上,在 ASPNET 帳戶下運(yùn)行的 ASP.NET Web 應(yīng)用程序可能無(wú)法運(yùn)行,并且您可能會(huì)收到“Access Denied (0x80041003)”(訪問被拒絕 (0x80041003))錯(cuò)誤信息。發(fā)生此錯(cuò)誤的原因是該帳戶不具有足夠的權(quán)限來(lái)訪問某些 WMI 命名空間。要解決此問題,請(qǐng)安裝 Windows XP SP1 或更高版本,或者安裝 Windows 2000 SP3 或更高版本。要變通解決此問題,請(qǐng)按照下列步驟操作:
1. | 打開“計(jì)算機(jī)管理”Microsoft 管理控制臺(tái) (MMC) 管理單元。 |
2. | 展開服務(wù)和應(yīng)用程序,然后選擇 WMI 控制。 |
3. | 右鍵單擊 WMI 控制,然后單擊屬性。 |
4. | 在 WMI 控制屬性對(duì)話框中,單擊安全選項(xiàng)卡。 |
5. | 展開根目錄,選擇 CIMV2,然后單擊安全。 |
6. | 在安全對(duì)話框中,單擊高級(jí)。 |
7. | 在訪問控制設(shè)置對(duì)話框中,單擊添加。選擇 localMachineName\ASPNET,然后單擊確定。 |
8. | 在權(quán)限項(xiàng)目對(duì)話框中,確保應(yīng)用到設(shè)置為這個(gè)名稱空間和子名稱空間。 |
9. | 確保選中允許“啟用帳戶”和允許“遠(yuǎn)程啟用”復(fù)選框。 |
10. | 單擊每個(gè)對(duì)話框中的確定直到出現(xiàn) WMI 控制屬性對(duì)話框。 |
11. | 為您的應(yīng)用程序?qū)⒃L問的其他 WMI 命名空間重復(fù)步驟 5 到 10。 |
12. | 重新啟動(dòng) IIS。為此,請(qǐng)從命令行運(yùn)行 IISRESET。 |
默認(rèn)情況下,ASP.NET 為 ASPNET 帳戶生成保密性強(qiáng)的密碼。因此,只要該 ASPNET 帳戶密碼在計(jì)算機(jī)之間不是共享的或重置為非默認(rèn)值的其他值,此替代方法就是安全的。
與桌面交互
當(dāng)將 IIS 服務(wù)配置成允許與桌面交互時(shí),ASPNET 帳戶會(huì)因?yàn)槟J(rèn)窗口站和桌面上的“自由選擇的訪問控制列表”(DACL) 而沒有訪問桌面的適當(dāng)權(quán)限??梢宰尮芾韱T更改這些 DACL,或者您可以使用有權(quán)訪問這些對(duì)象的帳戶運(yùn)行此進(jìn)程。
刪除 ASP.NET
當(dāng)您刪除 ASP.NET 時(shí),ASPNET 帳戶被禁用并繼續(xù)留在系統(tǒng)上。如果您不打算重新安裝 ASP.NET,則可以刪除 ASPNET 帳戶。
如果在顯式刪除 ASPNET 帳戶之后重新安裝 ASP.NET,就會(huì)創(chuàng)建一個(gè)具有新的安全標(biāo)識(shí) (SID) 的新 ASPNET 帳戶。因此,任何指向以前 ASPNET 帳戶的 ACL 將都不再適用于這個(gè)新的 ASPNET 帳戶。