IIS AppPoolIdentity 和文件系統寫訪問權限
這是我一直在研究但無處可去的 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:\Users)C:\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組的成員。



