IIS7權限簡述_Web服務器教程

      編輯Tag賺U幣
      教程Tag:IIS7添加

      IIS7對于以往是革命性的改變, 不再是以前縫縫補補的破衣裳, 全部重寫的代碼帶來了更為優秀的性能與擴展能力. 他不再是一個Web Server了而變成了一個Application Server能夠承載一切以通訊為基礎的應用. 新的變革也帶來了新的知識, 想更好的駕馭IIS7權限則是最基礎的一部分也是最先需要了解的一部分. 本文讓你初步了解IIS7的權限應用的基本相關知識, 了解來龍去脈不會再因應用程序突然多出一個莫名其妙權限而感到困惑. 雖然下面的內容均以Web服務為例, 但道理同樣適用于以IIS7宿主的其他應用如FTP等等.

      工作進程(Worker Process)

      Worker Process是IIS應用程序的宿主, 在任務管理器中可以看到每一個Worker Process就是一個w3wp.exe.

      WindowsLiveWriter-429641856/supfiles195C5D69/image7.png" target="_blank">image_thumb3

      工作進程標識(Worker Process Identity - WPI)

      是Worker Process運行時的身份:

      • 在IIS6, Windows 2008 IIS7下, 默認關聯權限是NetworkService.
      • 在Windows 2008 R2 IIS7.5下, 默認是關聯權限是Application Pool Identity.

      這里并沒有提供一個直接的手段來設置Worker Process在什么身份標識下運行, 而是通過Application Pool的身份標識設定來實現的.

      應用程序池(Application Pool)

      Application Pool包含至少一個或多個Worker Process(Web Garden模式). 在運行時會將Application Pool的身份注入到Worker Process中, 就會以Application Pool的身份運行. 可以認為Application Pool與其包含的Worker Process的運行身份是一致的.

      應用程序池標識(Application Pool Identity)

      是Application Pool運行時的身份:

      • 在IIS6, Windows 2008 IIS7下, 默認關聯權限是NetworkService.
      • 在Windows 2008 SP2 IIS7下, 運行身份設置時除了LocalService, NetworkService, LocalSystem外增加了Application Pool Identity一個選項, 而這個則是一個可以設置權限的虛擬標識.
      • 在Windows 2008 R2 IIS7.5下, 默認是關聯權限是Application Pool Identity.

      image_thumb1

      虛擬帳戶 Application Pool Identity

      上面提到的身份標識選項中你可以選擇他, 但他只是一個統稱, 并不存在實際的這個命名. 他依賴你的Application Pool的名稱, 例如我的Application Pool名字叫做: SimonwAppPool, 那么這個虛擬標識的全名是: IIS AppPool\SimonwAppPool 運行在此Application Pool下的Worker Process從任務管理器中可以看到w3wp.exe是在SimonwAppPool這個用戶下運行的. 可以在文件系統中對這個帳戶分配權限. 這么做的好處是能夠將能夠將權限分離開來做粒度更細的配置, 不像是NetworkService有很多應用基于此, 設置一個權限影響一大片.

      image_thumb9 

      不過有時候通過UI找不到這個對象大約是個Bug, 通過命令行icacls處理即可.

      什么是impersonate

      這可能是一個讓人容易迷糊的詞匯impersonate - 扮演, 裝扮. 他是指在某個特定的時刻以一個新的身份來代替已有身份來運行應用程序. 一個請求來臨時在IIS處理管道中, 在authentication之前authenticated user的上下文是未知的, 這時你的應用程序以WPI的權限在運行. 在authentication之后authenticated user的上下文被建立, 但依然沒有去扮演, 直至請求被映射到他的handler也就是handler mapping后應用程序開始使用扮演則將默認的WPI權限替換為authenticated user的權限來執行應用程序.

      image_thumb7

      舉個例子, php配置fastcgi時推薦設置fcgi.impersonate=true, 體現在請求一個php文件時
      false: 始終使用WPI的權限, 默認權限是NetworkService
      true: 使用authenticated user, 默認為IUSR, 也就是說可以讓在站點級別上設置的權限生效.

      用戶組與用戶

      在IIS7下需要注意2個特殊的用戶和用戶組, 在IIS6中有著類似的對應關系
      IIS6:IIS_WPG - IIS7:IIS_IUSRS
      IIS6:IUSR_MachineName - IIS7:IUSR

      最大的改變就是他們都成為了系統內置帳戶(built-in account)有著統一的SID, 這樣的好處在于做不同機器/系統間的拷貝時可以連帶權限一同拷貝過去了, 在以往因為SID不同換了機器權限是無法有效拷貝的只能挨個手動設置, 現在方便多了.

      IIS_IUSRS組

      默認他會擁有適當的權限來運行Worker Process. 所有的WPI下的運行帳戶均被隱式的自動加入到這個組中, 以獲得最小的運行權限. 例如當你將SimonwAppPool這個Application Pool的運行身份設置為Application Pool Identity, 那么IIS AppPool\SimonwAppPool這個用戶會被自動加入到IIS_IUSRS組中擁有他的全部權限. 因此對此組權限賦值需很小心很容易不知不覺中影響一大片.

      IUSR默認匿名帳戶

      特別需要注意的別看他是一個匿名帳戶并且沒有密碼, 但他屬于authenticated users ,而authenticated users屬于Users組, 因此IUSR默認具備了Users組的權限.

      image_thumb5

      結束語

      一年總要寫一篇文章(慚愧), 年底再不寫沒機會了, 大部分的內容都是大半年前總結的, 今天才寫出來難免錯誤與疏漏請及時指正. 希望能為你的IIS7配置提供有效的參考.

      來源:網絡搜集//所屬分類:Web服務器教程/更新時間:2011-12-08
      相關Web服務器教程