asp.net - net如何將檔案寫入到網路芳鄰的分享目錄 - iis user
IIS AppPoolIdentity和文件系統寫入訪問權限 (2)
這是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允許這些寫入發生的方式,即使似乎沒有授予明確的文件系統訪問權限。
IIs中的每個應用程序池在c:\ users下默認創建自己的安全用戶文件夾,具有完全讀/寫權限。 打開您的用戶文件夾並查看哪些應用程序池文件夾在那裡,右鍵單擊並檢查其分配的應用程序池虛擬帳戶的權限。 您應該看到您的應用程序池帳戶已經添加了分配給其根目錄和子目錄的讀/寫訪問權限。
因此,這種類型的文件存儲訪問是自動完成的,您應該可以在應用程序池用戶帳戶文件夾中編寫您喜歡的任何內容,而無需更改任何內容。 這就是為什麼創建每個應用程序池的虛擬用戶帳戶的原因。