應用程式集區身分識別

作者 :Thomas Deml

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

[工作管理員] 畫面的螢幕擷取畫面,其中著重于 W 3 W P 點 E X I I S 背景工作進程。

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

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

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

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

如果您在 Windows Server 2008 R2 或更新版本的 IIS 上執行 IIS 7.5,則不需要執行任何動作來使用新的身分識別。 針對您所建立的每個應用程式集區,新應用程式集區的 Identity 屬性預設會設定為 ApplicationPoolIdentity 。 IIS 管理員 Process (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 User Management Console 中的使用者。

您可以在 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,以允許此電腦帳戶存取。

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

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

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

指引檔

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

使用者設定檔

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

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

總結

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