ASP.NET 中的處理序及要求識別

文章翻譯 文章翻譯
文章編號: 317012 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將概述授予預設處理序帳戶的存取權限,並說明在某些情況中,會因為這些權限的規定太嚴格,而無法執行特定工作。

在 Microsoft Windows 2000 及 Microsoft Windows XP 上的 ASP.NET 預設安裝,ASP.NET 會在工作者處理序中執行 Web 應用程式程式碼。 根據預設,此處理序的身分會使用名為 ASPNET 帳戶 (其中,完整名稱為 aspnet_wp 帳戶) 的本機帳戶。 在 ASP.NET 的 Beta 版本中,處理序身分是 System,是一個功能強大且具系統管理能力的帳戶,且包含了電腦上的許多存取權限。 如果要提供較低權限的預設安裝,ASP.NET 的發行版本會使用較弱且適用於大多數 Web 應用程式的 ASPNET 帳戶。

注意 根據預設,如果您使用的是 Microsoft Internet Information Services (IIS) 6.0,您的 ASP.NET Web 應用程式將會在 NetworkService 帳戶的安全性內容中執行。

其他相關資訊

設定處理序身分

您可以在安裝根目錄中,Config 子目錄的 Machine.config 檔案的 <processModel> 區段中,設定處理序身分。 userNamepassword 屬性會控制處理序的身分。 這些屬性的預設值如下所示:
<processModel  userName="machine" password="AutoGenerate" />
				
machineAutoGenerate 值會指示 ASP.NET 使用內建的 ASPNET 帳戶,以及使用較強的密碼編譯、隨機的密碼,此密碼會儲存在該帳戶的「本機安全性授權」(LSA) 中。

如果您要使用具有較多存取權限的處理序,您可以將 userName 屬性設定為 System,如此,ASP.NET 工作者處理序就會以和 Inetinfo.exe 處理序相同的身分執行。 根據預設,Inetinfo.exe 處理序會以 System 的身分執行。 當您將 ASP.NET 工作者處理序設定為使用 System 身分時,ASP.NET 工作者處理序就可以存取本機電腦上幾乎所有的資源。 在執行 Windows 2000 或 Windows XP 的電腦上,System 帳戶也具有網路認證,而且會以機器帳戶的身分存取網路資源。 如果要將處理序設定為以 System 身分執行,請變更 <processModel> 區段中的 userName 屬性,如下所示:
<processModel  userName="SYSTEM" password="AutoGenerate" />
				

ASPNET 帳戶的預設權限

安裝 ASP.NET 時,將 ASPNET 帳戶建立成本機帳戶。 ASPNET 帳戶僅屬於該電腦上的 Users 群組。 因此,ASPNET 帳戶具有所有與 Users 群組相關的權限,並且可以存取 Users 群組有權存取的任何資源。 ASPNET 帳戶會從 Users 群組繼承下列使用者權限:
  • SeChangeNotifyPrivilege
  • SeUndockPrivilege
  • SeInteractiveLogonRight
  • SeNetworkLogonRight
除了這些權限之外,預設也會將下列權限授予 ASPNET 帳戶:
  • SeServiceLogonRight
  • SeBatchLogonRight
  • SeDenyInteractiveLogonRight
ASP.NET 會將 ASPNET 帳戶的特定、完整權限授予下列資料夾:
  • Temporary ASP.NET Files
  • %windir%\temp
此外,ASP.NET 會授予 Microsoft .NET Framework 安裝目錄的「讀取」權限。

下列清單會概述 ASPNET 帳戶所需的「存取控制清單」(ACL)。 Windows 2000 及 Microsoft .NET Framework 的預設安裝會包含這些 ACL。
  • 位置:%installroot%\ASP.NET Temporary Files
    存取類型:資料夾上為「讀取」/「寫入」,磁碟機的根目錄資料夾上則為「列出資料夾內容」
    帳戶:處理序帳戶及設定的模擬帳戶
    描述:這是 ASP.NET 動態編譯的位置。 在此位置下,會針對每個應用程式,在分隔的目錄中產生應用程式程式碼。 您可以使用 <compilation> 區段中的 tempDir 屬性來設定根位置。

    注意 如果您將 machine.config 變更為在不同位置中儲存 ASP.NET 暫存檔,則 ASPNET 帳戶必須在磁碟機的根層次上具有「列出資料夾內容」存取類型。
  • 位置:%windir%\temp
    存取類型:讀取/寫入
    帳戶:處理序帳戶
    描述:這是「可延伸標記語言」(XML) 網頁服務用來產生序列化 Proxy 的位置。
  • 位置:應用程式目錄
    存取類型:讀取
    帳戶:處理序帳戶及設定的模擬帳戶
    描述:這是應用程式內容的位置 (僅需要「讀取」權限)。
    如需詳細資訊,請造訪下列 Microsoft 網站:
    http://msdn.microsoft.com/library/en-us/dnnetsec/html/SecNetHT01.asp
  • 位置:網站根目錄 (%systemdrive%\inetpub\wwwroot 或預設網站會指向的路徑)
    存取類型:讀取
    帳戶:處理序帳戶及設定的模擬帳戶
    描述:ASP.NET 嘗試在磁碟機:\inetpub\wwwroot\web.config 讀取設定檔及監視變更。
  • 位置:%installroot% hierarchy
    存取類型:讀取
    帳戶:處理序帳戶及設定的模擬帳戶
    描述: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 如何在 ASP.NET 應用程式中實作模擬
如果要變更檔案的「存取控制清單」,請依照下列步驟執行:
  1. 開啟 Windows 檔案總管。
  2. 選取您要變更權限的檔案或資料夾。
  3. [檔案] 功能表上,按一下 [內容]
  4. 按一下 [安全性] 索引標籤。 按一下以選取 ACL 權限的核取方塊。
您也可以使用指令碼或 Cacls.exe 命令列工具 (包含於 Windows) 來變更檔案的 ACL。

ASP.NET 1.1 使用 <DriveName>\Documents and Settings\<MachineName>\ASPNET 資料夾儲存處理序檔案 (<DriveName> 您電腦上安裝 ASP.NET 的磁碟機,而 <MachineName> 則為您電腦的名稱)。

啟用模擬

使用模擬便可以驗證的使用者或匿名使用者的身分,在要求實體的安全性內容中執行。 在 ASP.NET 中,模擬是選擇性的,且預設為不啟用。 如果要啟用電腦或應用程式層級的模擬,請將下列設定指示詞新增到 Machine.config 或 Web.config 檔案中的 <system.web> 區段中:
<identity impersonate="true"/>
				

使用資料庫

使用 SQL 驗證連線至資料庫的應用程式,通常都不會受到 ASPNET 帳戶參數的影響。 使用整合式驗證及模擬的應用程式也是如此。 但是,如果應用程式沒有進行模擬,且使用的是 Windows 驗證,則您必須將資料庫存取權限授予 ASPNET 帳戶。

當您透過具名管道使用整合式 Windows 驗證,嘗試驗證 Microsoft SQL Server 時,您便無法使用 ASPNET 帳戶。 但是,您可以透過「傳輸控制通訊協定」(TCP) 傳輸,成功地搭配使用 ASPNET 帳戶及「整合式 Windows 驗證」。

如果應用程式必須使用 Microsoft Access 資料庫,則 ASPNET 帳戶必須能夠寫入資料庫檔案。 系統管理員必須因應實際狀況調整檔案權限。

使用事件日誌

必須寫入至應用程式事件日誌的應用程式,在以 ASPNET 帳戶執行時可執行。 如果應用程式必須建立新的事件日誌類別目錄,則應用程式必須在 HKEY_LOCAL_MACHINE 登錄 Hive 下建立登錄機碼,這是 ASPNET 帳戶無法執行的操作。

如果要在執行期間建立類別目錄,您必須啟用模擬,然後再模擬具有更多存取權限的帳戶。 此外,系統管理員可以建立類別目錄,而應用程式可以在執行期間寫入類別目錄。

如果應用程式必須建立新的事件日誌類別目錄,請在安裝時建立類別目錄。 建立類別目錄之後,ASPNET 帳戶便可以寫入應用程式事件日誌。

使用 System.DirectoryServices 及 Active Directory

如果 Web 應用程式必須存取 Active Directory,則應用程式可以在支援委派的環境中使用模擬。 此外,應用程式會為 System.DirectoryServices 命名空間中 DirectoryEntry 建構函式提供明確認證,以便存取 Active Directory。 如果應用程式使用明確認證,則應用程式應該要使用 COM+ 建構字串此類的技術,或使用 Windows 資料保護應用程式發展介面 (API),來適當地儲存認證。

使用效能計數器

ASPNET 帳戶具有足夠權限寫入至 (非讀取) 效能計數器資料。 如果應用程式必須讀取效能計數器資料或建立效能計數器類別目錄,就需要 Administrator 或 Power User 權限。

如果應用程式必須建立新的效能計數器類別目錄,請在安裝時建立類別目錄。 建立類別目錄之後,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 帳戶執行下必須啟動跨處理序的應用程式,可以使用 Dcomcnfg.exe 工具確實授與啟動權限至帳戶。

偵錯問題

根據預設,您無法從用戶端逐步執行 XML Web 服務呼叫。 如果要逐步執行 XML Web 服務,您必須將 ASPNET 帳戶新增到執行 XML Web 服務之電腦上的 Debugger Users 群組。

使用固定身分執行程式碼

在 COM+ 服務中,您可以使用固定身分執行程式碼。 您可以使用 System.EnterpriseServices 命名空間的 ServicedComponent 類別,來寫入使用 COM+ 服務的 Managed 程式碼元件。 您可以將特殊權限的功能包裝在 ServicedComponent 衍生出的類別中,然後將此類別視為 COM+ 伺服器應用程式,與設定身分一併執行。

在 UNC 共用上編譯程式碼後置檔案

在 ASP.NET 中,您可以使用一些方法開發應用程式檔案:
  • 您可以使用 .aspx 檔案中的「超文字標記語言」(HTML),然後您就可以在 Bin 目錄的預先編譯組件中儲存該網頁的程式碼。 這是 Microsoft Visual Studio .NET 模式。
  • 您可以將所有程式碼及 HTML 內容封裝在視需要編譯的單一來源檔中。
  • 您可以使用 <%@ Assembly %> 指示詞中的 src 屬性,將 HTML 簡報放在 ASP.NET 檔案中,然後就可以動態編譯與該檔案相關的任何原始碼。
注意 如果應用程式內容位於網路共用上,編譯器會在 ASPNET 帳戶中開始,而且不具有存取該檔案的網路認證。 如果您使用網路共用,則無法使用 src 屬性來指向檔案。 您必須改用其他的方法。

在主要或備份網域控制站上使用 ASP.NET


根據預設,如果您正在使用網域控制器上的 ASP.NET 1.1,則該 ASP.NET Web 應用程式將在 IWAM_<ComputerName> 帳戶的安全性內容下執行 (<ComputerName> 為您電腦的名稱)。

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
315158 FIX:ASP.NET 無法使用網域控制站上的預設 ASPNET 帳戶
回到頁首

讀取 IIS Metabase

ASPNET 帳戶無法讀取 Microsoft Internet Information Services (IIS) Metabase。 如果應用程式必須存取 Metabase 設定,則您可以使用 Metaacl.exe 公用程式,選擇性地將「讀取」權限授予 Metabase 節點。

如果應用程式必須使用 .disco 檔案,因為此類檔案必須要能讀取 IIS Metabase 才可以提供探索服務,所以您必須將 Metabase 的「讀取」權限授予 ASPNET 帳戶。

使用 System.Management 及 WMI

Windows Management Instrumentation (WMI) 的管理功能強大,您可以用來管理和監視 Windows 電腦。 但是,如果是在 ASPNET 帳戶下執行 ASP.NET 應用程式,則這個帳戶只會具有和 Everyone 相同的預設權限。 這些權限包含讀取 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 Management Console (MMC) 嵌入式管理單元。
  2. 展開 [服務及應用程式],再選取 [WMI 控制]
  3. 用滑鼠右鍵按一下 [WMI 控制],然後按一下 [內容]
  4. [WMI 控制內容] 對話方塊中,按一下 [安全性] 索引標籤。
  5. 展開 [Root],選取 [CIMV2],然後按一下 [安全性]
  6. [安全性] 對話方塊中,按一下 [進階]
  7. [存取控制設定] 對話方塊中,按一下 [新增]。 選取 localMachineName\ASPNET後,按一下 [確定]
  8. [權限項目] 對話方塊中,確定已經將 [套用到] 設定為 [這個名稱區和子名稱區]
  9. 確定已選取 [允許 Enable Account][允許 Remote Enable] 核取方塊。
  10. 在返回 [WMI 控制內容] 對話方塊之前,在每個對話方塊中按一下 [確定]
  11. 針對應用程式會存取的其他 WMI 命名空間,重複執行步驟 5 至 10。
  12. 重新啟動 IIS。 如果要執行這項操作,請從命令列執行 IISRESET
根據預設,ASP.NET 會為 ASPNET 帳戶產生密碼編譯較強的密碼。 因此,假如 ASPNET 帳戶密碼不會在電腦之間進行共用,或是重設為預設值以外的數值,這個替代的解決方案將會非常安全。

與桌面進行互動

將 IIS 服務設定為與桌面進行互動時,因為預設視窗工作站及桌面的 Discretionary Access Control Lists (DACL) 的緣故,ASPNET 帳戶將不具有存取桌面的正確權限。 系統管理員可以變更這些 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
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
329290 如何使用 ASP.NET 公用程式加密認證及工作階段狀態的連接字串
315158 FIX:ASP.NET 無法使用網域控制站上的預設 ASPNET 帳戶

屬性

文章編號: 317012 - 上次校閱: 2005年11月9日 - 版次: 12.3
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
關鍵字:?
kbconfig kbhttpruntime kbinfo kbsecurity KB317012
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com