IIS/ASP.NET 的所有使用者帳戶是什麼?它們有何不同?
在安裝了 ASP.NET 4.0 的 Windows Server 2008 下,有一大堆相關的使用者帳戶,我不明白哪個是哪個,它們有何不同,以及哪個是我的應用程序執行的真正的使用者帳戶。這是一個列表:
- IIS_IUSRS
- 管轄權
- 預設應用程序池
- ASP.NET v4.0
- NETWORK_SERVICE
- 本地服務。
什麼是什麼?
這是一個非常好的問題,遺憾的是,在作為 Web 開發人員和設置 IIS 的背景下,許多開發人員沒有提出足夠的關於 IIS/ASP.NET 安全性的問題。所以這裡……
涵蓋列出的身份:
IIS_IUSRS:這類似於舊的 IIS6
IIS_WPG組。它是一個內置組,其安全配置使得該組的任何成員都可以充當應用程序池身份。
IUSR:此帳戶類似於舊的
IUSR_<MACHINE_NAME>本地帳戶,它是 IIS5 和 IIS6 網站的預設匿名使用者(即通過站點屬性的目錄安全選項卡配置的帳戶)。有關更多資訊
IIS_IUSRS,IUSR請參閱:
DefaultAppPool:如果應用程序池配置為使用應用程序池標識功能執行,
IIS AppPool\<pool name>則將動態創建一個稱為“綜合”帳戶以用作池標識。在這種情況下,將IIS AppPool\DefaultAppPool在池的生命週期內創建一個名為 created 的合成帳戶。如果您刪除池,則此帳戶將不再存在。對文件和文件夾應用權限時,必須使用IIS AppPool\<pool name>. 您也不會在您的電腦使用者管理器中看到這些池帳戶。有關詳細資訊,請參閱以下內容:
ASP.NET v4.0:-這將是 ASP.NET v4.0 應用程序池的應用程序池標識。見
DefaultAppPool上文。
NETWORK SERVICE:-該
NETWORK SERVICE帳戶是在 Windows 2003 上引入的內置身份。NETWORK SERVICE是一個低特權帳戶,您可以在該帳戶下執行應用程序池和網站。在 Windows 2003 池中執行的網站仍然可以模擬該網站的匿名帳戶(IUSR_ 或您配置為匿名身份的任何內容)。在 Windows 2008 之前的 ASP.NET 中,您可以讓 ASP.NET 在應用程序池帳戶(通常是
NETWORK SERVICE)下執行請求。<identity impersonate="true" />或者,您可以將 ASP.NET 配置為通過本地文件中的設置來模擬站點的匿名帳戶web.config(如果該設置被鎖定,則需要由machine.config文件中的管理員完成)。設置
<identity impersonate="true">在使用共享應用程序池的共享託管環境中很常見(與部分信任設置結合使用以防止模擬帳戶的解除)。在 IIS7.x/ASP.NET 中,模擬控制現在通過站點的身份驗證配置功能進行配置。因此,您可以配置為以池身份
IUSR或特定的自定義匿名帳戶身份執行。
LOCAL SERVICE:該
LOCAL SERVICE帳戶是服務控制管理器使用的內置帳戶。它在本地電腦上具有最低權限集。它的使用範圍相當有限:
LOCAL SYSTEM:你沒有問這個問題,但我為了完整性而添加。這是一個本地內置帳戶。它擁有相當廣泛的特權和信任。您永遠不應將網站或應用程序池配置為在此身份下執行。
在實踐中:
在實踐中,保護網站的首選方法(如果網站有自己的應用程序池 - 這是 IIS7 的 MMC 中新網站的預設設置)是在
Application Pool Identity. 這意味著將站點在其應用程序池的高級設置中的身份設置為Application Pool Identity:
然後,您應該在網站中配置身份驗證功能:
右鍵點擊並編輯匿名身份驗證條目:
確保選擇了*“應用程序池標識”*:
當您應用文件和文件夾權限時,您授予應用程序池身份所需的任何權限。例如,如果您為
ASP.NET v4.0池權限授予應用程序池身份,那麼您可以通過 Explorer 執行此操作:
點擊“檢查名稱”按鈕:
或者您可以使用該
ICACLS.EXE實用程序執行此操作:icacls c:\wwwroot\mysite /grant "IIS AppPool\ASP.NET v4.0":(CI)(OI)(M)…或者…如果您的站點的應用程序池被呼叫
BobsCatPicBlog,那麼:icacls c:\wwwroot\mysite /grant "IIS AppPool\BobsCatPicBlog":(CI)(OI)(M)我希望這有助於澄清問題。
更新:
我剛剛從 2009 年偶然發現了這個出色的答案,其中包含大量有用的資訊,非常值得一讀:





