Asp.net

IIS AppPoolIdentity 和文件系統寫訪問權限

  • March 25, 2011

這是我一直在研究但無處可去的 IIS 7.5 和 ASP.NET 的問題。任何幫助將不勝感激。

我的問題是:在 IIS 7.5 中使用 ASP.NET,IIS 和/或作業系統如何允許 Web 應用程序寫入文件夾,就像C:\dump在完全信任下執行時一樣?為什麼我不必為應用程序池使用者顯式添加寫訪問權限(在這種情況下ApplicationPoolIdentity)?

我知道的就這麼多:

  • 在 IIS 7.5 中,應用程序池的預設標識是ApplicationPoolIdentity.
  • ApplicationPoolIdentity表示一個名為“IIS APPPOOL\AppPoolName”的Windows使用者帳戶,在創建應用程序池時創建,其中AppPoolName是應用程序池的名稱。
  • 預設情況下,“IIS APPPOOL\AppPoolName”使用者是該IIS_IUSRS組的成員。
  • 如果您在完全信任下執行,您的 Web 應用程序可以寫入文件系統的許多區域(不包括 、 等文件夾C:\UsersC:\Windows。例如,您的應用程序將有權寫入某些文件夾,例如C:\dump.
  • 預設情況下,該IIS_IUSRS組沒有被授予讀取或寫入訪問權限C:\dump(至少沒有通過 Windows 資源管理器中的“安全”選項卡可見的訪問權限)。
  • 如果您拒絕對 的寫訪問IIS_IUSRS,您將在嘗試寫入文件夾時收到 SecurityException(如預期的那樣)。

那麼,考慮到所有這些,如何向“IIS APPPOOL\AppPoolName”使用者授予寫訪問權限?w3wp.exe 程序以該使用者身份執行,那麼是什麼允許該使用者寫入它似乎沒有顯式訪問權限的文件夾?

請注意,我理解這可能是為了方便起見,因為如果您在完全信任下執行,授予使用者訪問它需要寫入的每個文件夾的權限會很痛苦。如果您想限制此訪問,您始終可以在中等信任下執行該應用程序。我有興趣了解作業系統和/或 IIS 允許這些寫入發生的方式,即使似乎沒有明確授予文件系統訪問權限。

ApplicationPoolIdentity被分配了Users組以及組的成員資格IIS_IUSRS。乍一看,這可能看起來有些令人擔憂,但是該Users組的 NTFS 權限有些有限。

例如,如果您嘗試在文件夾中創建一個文件C:\Windows夾,那麼您會發現您做不到。仍然需要能夠從 Windows 系統文件夾中ApplicationPoolIdentity讀取文件(否則工作程序將如何能夠動態載入必要的 DLL)。

關於您對能夠寫入c:\dump文件夾的觀察。如果您查看高級安全設置中的權限,您將看到以下內容:

在此處輸入圖像描述

請參閱繼承自的特殊權限c:\

在此處輸入圖像描述

這就是您的站點ApplicationPoolIdentity可以讀取和寫入該文件夾的原因。該權利是從c:\驅動器繼承的。

在您可能有數百個站點的共享環境中,每個站點都有自己的應用程序池和應用程序池標識,您可以將站點文件夾儲存在已Users刪除組的文件夾或卷中,並且權限設置為只有管理員和SYSTEM 帳戶具有訪問權限(具有繼承)。

IIS AppPool\[name]然後,您將在其站點根文件夾上單獨分配每個所需的必要權限。

您還應該確保您創建的儲存潛在敏感文件或數據的任何文件夾都已Users刪除該組。您還應確保您安裝的任何應用程序不會將敏感數據儲存在其c:\program files\[app name]文件夾中,而是使用使用者配置文件文件夾。

所以是的,乍一看,它似乎ApplicationPoolIdentity擁有比它應該擁有的更多的權利,但實際上它沒有比它的組成員資格要求更多的權利。

ApplicationPoolIdentity可以使用 SysInternals Process Explorer 工具檢查一個組的成員身份。找到使用您感興趣的應用程序池標識執行的工作程序(您必須將該列添加User Name到要顯示的列列表中:

在此處輸入圖像描述

例如,我在這裡有一個名為的池900300,其應用程序池標識為IIS APPPOOL\900300. 右鍵點擊程序的屬性並選擇我們看到的安全選項卡:

在此處輸入圖像描述

如我們所見IIS APPPOOL\900300,是該Users組的成員。

引用自:https://stackoverflow.com/questions/5437723