2011-03-25 332 views
359

這是IIS 7.5和ASP.NET的一個問題,我一直在研究和獲取無處可去。任何幫助將不勝感激。IIS AppPoolIdentity和文件系統寫入權限

我的問題是:在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允許這些寫入發生的方式,即使似乎沒有授予明確的文件系統訪問權限。

回答

375

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

例如,如果你嘗試創建的文件夾C:\Windows一個文件夾,然後你會發現,你不能。 ApplicationPoolIdentity仍然需要能夠從Windows系統文件夾中讀取文件(否則工作進程將如何動態加載重要的DLL)。

關於你對能夠寫信給你c:\dump文件夾的意見。如果你看一看在高級安全設置的權限,您將看到以下內容:

enter image description here

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

enter image description here

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

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

你會再單獨分配必要的權限,每個IIS AppPool\[name]需要在它的網站根目錄。

你也應該確保創建您存儲潛在的敏感文件或數據的任何文件夾有Users組中刪除。你還應該確保你安裝任何應用程序不敏感數據存儲在他們的c:\program files\[app name]文件夾和它們使用的用戶配置文件夾代替。

所以是的,乍一看,它看起來像ApplicationPoolIdentity有比它應該更多的權利,但它實際上沒有更多的權利比它的組員資格指定。可以使用SysInternals Process Explorer tool檢查ApplicationPoolIdentity的組成員資格。查找與應用程序池標識您感興趣的運行工作進程(你必須將User Name列添加到列的列表中顯示:

enter image description here

例如,我有一個游泳池。這裏命名900300其中有IIS APPPOOL\900300應用程序池標識右擊該進程的屬性,然後選擇安全選項卡,我們看到:

enter image description here

我們可以看到IIS APPPOOL\900300Users組的成員。

+0

@Kev [+1]我張貼的應用程序池標識regardin NTFS權限類似的問題在這裏:http://stackoverflow.com/questions/11232675/applications-apppool-permisions-on-parent-site-文件夾結構 - 如果你看一看,我將不勝感激。 – 2012-06-27 19:09:06

+0

@ one.beat.consumer - 抱歉,我從未看到您的評論。你仍然堅持這個問題? – Kev 2012-09-19 03:10:27

+0

@Kev - 是的,它已經不再成爲一個問題了,因爲我已經被撇到其他廢話,但它仍然沒有解決。有什麼想法嗎? – 2012-09-20 17:15:29

0

非法入境的每個應用程序池,在c默認情況下完全的讀/寫權限創建自己安全的用戶文件夾:\用戶。打開您的Users文件夾並查看哪些應用程序池文件夾在那裏,右鍵單擊並檢查其分配的應用程序池虛擬帳戶的權限。您應該看到您的應用程序池帳戶已經添加了分配給其根目錄和子目錄的讀/寫訪問權限。

那麼該類型的文件存儲的訪問是自動完成的,你應該能夠編寫無論你在應用程序池的用戶帳戶文件夾像有在不改變任何東西。這就是爲什麼創建每個應用程序池的虛擬用戶帳戶的原因。

+0

僅當「加載用戶配置文件」設置爲True時纔會發生這種情況。 – JamesQMurphy 2017-10-20 15:49:14

+0

那是對的,這意味着AppPool用戶的文件夾不會被創建,如果它不正確的話?這就是爲什麼他們這樣構建它.....以防止II在windows/temp和整個硬盤驅動器訪問和存儲垃圾,而不是僅僅爲該帳戶使用託管安全文件夾。 – Stokely 2017-10-22 22:24:18

12
  1. 右鍵單擊文件夾。

  2. 單擊屬性

  3. 點擊安全標籤。你會看到這樣的事情:

enter image description here

  • 點擊 「編輯...」,在上面的屏幕按鈕。你會看到這樣的事情:
  • enter image description here

  • 點擊 「添加...」 按鈕,在上面的屏幕。你會看到這樣的事情:
  • enter image description here

  • 單擊 「位置...」 按鈕,在上面的屏幕。你會看到這樣的東西。現在,轉到此樹結構的頂部並選擇您的計算機名稱,然後單擊確定。
  • enter image description here

  • 現在鍵入 「IIS程序池\ your_apppool_name」 並點擊 「檢查名稱」 按鈕。如果該應用程序池存在,您將在帶有下劃線的文本框中看到您的應用程序池名稱。點擊確定按鈕。
  • enter image description here

  • 選中/取消選中您需要授予帳戶

  • 點擊應用按鈕,然後確定任何訪問。