共用方式為


應用程式集區身分識別

湯瑪斯·德姆

無論您是在自己的伺服器上或 雲端中執行月臺,安全性都必須在優先順序清單的頂端。 若是如此,您將很高興聽到 IIS 具有稱為應用程式集區身分識別的安全性功能。 這項功能是在 Windows Server 2008 和 Windows Vista 的 Service Pack 2 (SP2) 中引進的。 應用程式集區身分識別可讓您在唯一帳戶下執行應用程式集區,而不需要建立和管理網域或本機帳戶。 應用程式集區帳戶的名稱會對應至應用程式集區的名稱。 下圖顯示以 DefaultAppPool 身分識別執行的 IIS 背景工作進程(W3wp.exe)。

任務管理器畫面的螢幕快照,其焦點位於 W 3 W P 點 E X E I I S 背景工作進程。

應用程式集區身分識別帳戶

IIS 6.0 和 IIS 7 中的背景工作進程預設會以網路服務的形式執行。 網路服務是內建的 Windows 身分識別。 它不需要密碼,而且只有用戶許可權;也就是說,它相對低許可權。 以低許可權帳戶身分執行是很好的安全性做法,因為惡意使用者無法使用軟體錯誤接管整個系統。

不過,隨著越來越多的 Windows 系統服務開始以網路服務的形式執行,一段時間後就會發生問題。 這是因為以網路服務身分執行的服務可能會竄改在相同身分識別下執行的其他服務。 因為 IIS 背景工作進程預設會執行第三方程式代碼(傳統 ASP、ASP.NET PHP 程式代碼),所以是時候隔離 IIS 背景工作進程與其他 Windows 系統服務,並在唯一的身分識別下執行 IIS 背景工作進程。 Windows 作業系統提供稱為「虛擬帳戶」的功能,可讓 IIS 為每個應用程式集區建立唯一的身分識別。 如需虛擬帳戶的詳細資訊,請參閱 服務帳戶逐步指南

設定 IIS 應用程式集區身分識別

如果您在 Windows Server 2008 R2 或更新版本的 IIS 上執行 IIS 7.5,則不需要執行任何動作來使用新的身分識別。 針對您建立的每個應用程式集區,新應用程式集區的 Identity 屬性預設會設定為 ApplicationPoolIdentity 。 IIS 系統管理程式 (WAS) 會建立具有新應用程式集區名稱的虛擬帳戶,並預設在此帳戶下執行應用程式集區的背景工作進程。

若要在 Windows Server 2008 上執行 IIS 7.0 時使用此虛擬帳戶,您必須變更您建立至 ApplicationPoolIdentity 之應用程式集區的 Identity 屬性。 以下是如何:

  1. 開啟 IIS 管理主控台 (INETMGR。MSC)。

  2. 開啟電腦節點底下的 [應用程式集區] 節點。 選取您想要變更的應用程式集區,以在自動產生的應用程式集區身分識別下執行。

  3. 以滑鼠右鍵按下應用程式集區,然後選取 [ 進階設定]

    [進階設定] 對話框的螢幕快照,其中已醒目提示 [身分識別] 設定。

  4. 選取 [ 身分 識別] 列表項目,然後按下省略號 (具有三個點的按鈕)。

  5. 下列對話框隨即出現:

    [應用程式集區身分識別] 對話框的螢幕快照,其中已醒目提示 [應用程式集區身分識別] 選項。

  6. 選取 [內建帳戶] 按鈕,然後從下拉式方塊中選取 [ApplicationPoolIdentity] 身分識別類型

若要使用命令行執行相同的步驟,您可以透過下列方式呼叫 appcmd 命令行工具:

%windir%\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity

保護資源

每當建立新的應用程式集區時,IIS 管理程式就會建立代表應用程式集區本身名稱的安全性識別碼 (SID)。 例如,如果您建立名稱為 「MyNewAppPool」 的應用程式集區,則會在 Windows 安全性 系統中建立名稱為 「MyNewAppPool」 的安全性識別碼。 從此開始,可以使用此身分識別來保護資源。 不過,身分識別不是真正的用戶帳戶;它不會以使用者身分顯示在 Windows 使用者管理控制台中。

您可以在 Windows 檔案總管中選取檔案,並將 「DefaultAppPool」 身分識別新增至檔案的 存取控制 清單 (ACL) 來嘗試此專案。

  1. 開啟 Windows 檔案總管

  2. 選取檔案或目錄。

  3. 以滑鼠右鍵按下檔案,然後選取 [ 屬性]

  4. 選取 [安全性] 索引標籤

  5. 按兩下 [ 編輯] 按鈕,然後按下 [ 新增 ] 按鈕

  6. 按兩下 [ 位置] 按鈕,並確定您選取您的電腦。

  7. [輸入要選取的對象名稱] 文本框中輸入 IIS AppPool\DefaultAppPool

  8. 按兩下 [ 檢查名稱] 按鈕,然後按下 [ 確定]。

    [選取使用者或群組] 對話框的螢幕快照。

如此一來,您選取的 檔案或目錄現在也會允許 DefaultAppPool 身分識別存取。

您可以使用 ICACLS 工具,透過命令行執行此動作。 下列範例提供 DefaultAppPool 身分識別的完整存取權。

ICACLS test.txt /grant "IIS AppPool\DefaultAppPool:F"

如需詳細資訊,請參閱 ICACLS

在 Windows 7 和 Windows Server 2008 R2 和更新版本的 Windows 上,預設會以應用程式集區身分識別的形式執行應用程式集區。 為了做到這一點,引進名稱為 「AppPoolIdentity」 的新身分識別類型。 如果選取 [AppPoolIdentity] 身分識別類型 (Windows 7 和 Windows Server 2008 R2 和更新版本上的預設值),IIS 會以應用程式集區身分識別的形式執行背景工作進程。 使用其他每個身分識別類型時,安全性標識符只會插入進程的存取令牌中。 如果插入標識符,內容仍然可以是 ApplicationPoolIdentity 的 ACLed,但令牌的擁有者可能不是唯一的。 如需此概念的詳細資訊,請參閱 IIS 7 - 應用程式集區隔離 的新功能部落格文章。

存取網路

在網域環境中使用網路服務帳戶會有很大的好處。 以網路服務身分執行的背景工作進程,以計算機帳戶的形式存取網路。 當計算機加入網域時,會產生計算機帳戶。 看起來像這樣:

<domainname>\<machinename>$,

例如:

mydomain\machine1$

這是一件好事,就是檔案共享或 SQL Server 資料庫等網路資源可以讓此電腦帳戶存取。

應用程式集區身分識別呢?

好消息是,應用程式集區身分識別也會使用計算機帳戶來存取網路資源。 不需要任何變更。

應用程式集區身分識別的相容性問題

指引檔

應用程式集區身分識別的最大相容性問題可能是先前的指引檔,其中明確建議您使用 ACL 資源進行網路服務,也就是 IIS 6.0 和 IIS 7.0 中 DefaultAppPool 的預設身分識別。 客戶在 IIS 7.5 或更新版本上執行時,必須將其腳本變更為 ACL,以取得 “IIS AppPool\DefaultAppPool” (或其他應用程式集區名稱)(請參閱上述範例以瞭解如何執行這項操作)。

使用者設定檔

IIS 不會載入 Windows 使用者設定檔,但某些應用程式可能會利用它來儲存暫存數據。 SQL Express 是執行此作業的應用程式範例。 不過,必須建立使用者配置檔,才能將暫存數據儲存在配置文件目錄或登錄區中。 網路服務帳戶的使用者配置檔是由系統所建立,且一律可供使用。 不過,透過切換至唯一的應用程式集區身分識別,系統不會建立任何使用者配置檔。 只有標準應用程式集區 (DefaultAppPool 和傳統 .NET AppPool) 在磁碟上具有使用者配置檔。 如果系統管理員建立新的應用程式集區,則不會建立任何使用者配置檔。

不過,如果您想要的話,您可以將 LoadUserProfile 屬性設定為 「true」,將 IIS 應用程式集區設定為載入使用者配置檔。

摘要

應用程式集區身分識別是針對 Windows Server 2008、Windows Vista 和更新版本的 Windows 引進的強大新隔離功能。 它會讓執行 IIS 應用程式更加安全且可靠。