原文網址: http://www.iis.net/1026/SinglePageArticle.ashx
翻譯:Tony Qu (來自BluePrint翻譯團隊)
作者:Vikas Malhotra
最後更新時間:2006年9月12日,星期二,上午11:48
介紹在先前的IIS版本中有一個本地帳號,是在安裝時創建的,叫做IUSR_MachineName。一旦啟用匿名身分認證,這個IUSR_MachineName帳號就是IIS預設使用的身分(identity),它同時在FTP和HTTP服務中使用。另外還有一個叫做IIS_WPG的群組,它是所有應用程式集區帳號的容器。在IIS安裝期間,必須確保所有的系統可用資源已經為IIS_WPG設定了適當的權限,當管理員建立一個新的應用程式池帳號時,只需要把新帳號(身分)加入這個群組即可。
這個模型運作得很好,但是和其他任何設計一樣,它們有他們的缺點,主要的缺點是IUSR_MachineName帳號和IIS_WPG組對於創建它們的系統來說都是本地的。 Windows中的每個帳號或群組都有一個唯一的號碼叫做SID(安全識別號碼),這樣就可以區別於其它的帳號或群組。我們僅使用SID來建立建立ACL。作為先前版本的IIS設計的組成部分,我們將IUSR_MachineName包含在了metabase.xml檔案中,如果你嘗試從一台機器拷貝metabase.xml到另一台機器上,它並不會馬上運轉起來,因為另一台機器上的帳號所使用的名字是不同的。另外,你不能只用xcopy /o來拷貝ACL,因為不同機器上的SID也是不同的。一個解決方法是使用網域帳號,但是你需要在你的架構中新增一個活動目錄。 IIS_WPG群組也有同樣的權限問題,如果你在一個機器的檔案系統上為IIS_WPG群組設定ACL,使用xcopy /o來拷貝ACL到另一台機器上是無法成功的。 IIS了解了這個問題,並透過在IIS7.0中使用內建的帳號和群組對其作了改進。
內建的帳號和群組是由作業系統保證的,這樣就可以保證有一個唯一的SID,IIS甚至做得更好,它保證了新的帳號名稱和群組名稱永遠不會被本地化。例如,無論你安裝的是那種語言版本的Windows,IIS帳號名稱將永遠是IUSR,而群組名稱將永遠是IIS_IUSRS。
總的來說,在IIS 7.0:
IUSR內建帳號取代了IUSR_MachineName帳號
IIS_IUSRS內建組取代了IIS_WPG組
因為IUSR是一個內建帳號,它不再需要密碼。邏輯上你可以認為它就是NETWORKSERVICE或LOCALSERVICE帳號。 IUSR帳號和IIS_IUSRS組將在下面的章節中進一步介紹。
理解新的IUSR帳號如上面所說的,在IIS 7.0中IUSR帳號將取代IUSR_MachineName 帳號。只有在安裝FTP伺服器時,IUSR_MachineName 帳號才會被建立和使用。如果不安裝FTP,那麼這個帳號將永遠不會被創建。
這個內建帳號並不需要密碼,當啟用匿名身分認證時,帳號並且會被當作預設的使用者身分使用。如果你看一看applicationHost.config文件,你會發現下面的定義:
這告訴了IIS對所有的匿名身分認證請求使用新的內建帳號。這樣做的最大優點在於,我們現在可以:
* 使用Windows Explorer或許多其他命令列工具為IUSR設定檔案系統權限
* 不用再擔心這個帳號的密碼會過期
* 使用xcopy /o無縫拷貝檔案以及它們的所有權和ACL資訊到不同的機器上
有一點要重點提一下:IUSR帳號和LOCALSERVICE帳號在方式上很相似,它是在網路上匿名工作。 NETWORKSERVICE和LOCALSYSTEM 可以以機器身分工作,但IUSR則不是,因為它是一種特權的晉升。如果你希望有一個擁有網路存取權限的匿名帳號,你就需要建立一個新的使用者帳號,並手動設定使用者名稱和密碼,就像你以前設定匿名驗證一樣。要在IIS Manager中實現這一點,你可以:
* 點擊Start按鈕,鍵入"INetMgr.exe"並按回車(如果彈出提示框,請按Continue來提升權限)
* 點選Connection中機器名稱旁的"+"按鈕
* 在IIS Manager中雙擊你要管理的站點
* 雙擊Feature Name標題下面的Authentication項
* 選擇Anonymous Authentication,點選右側Task標題下方的Edit,彈出Specify Credentials dialog(指定認證對話框)
* 點選Specific User選項,然後按下"Set"按鈕
* 輸入想設的用戶名和密碼,按OK
理解新的IIS_IUSRS組正如前面所提到的,IIS_IUSRS組是用來替代IIS_WPG組的,它已經擁有了所有的文件和系統資源的訪問權限,因此如果一個帳號被添加到該群組中,它將以應用程式集區身分無縫運作。
由於與內建帳號配合工作,此內建群組可以解決幾個xcopy的部署問題。如果你在文件上為IIS_WPG設定權限(在IIS6中這是可以的),並嘗試把這些檔案拷貝另一個Windows系統中,由於群組SID在不同機器上是不同的,網站設定可能被破壞。
在IIS7中,由於組SID在所有Longhorn系統中是相同的。當你從一台機器向令一台機器移動文件時,使用'xcopy /o'可以保留ACL和擁有權信息,這使得xcopy部署變得簡單的多!
客戶們的第二個請求是「一旦我們配置了應用程式集區身份,我們就需要IIS來幫我們做所有必要的修改」。我們接受了這個意見,並使這個過程在IIS7.0中變得更加簡單。當IIS啟動一個工作者程序(worker process)時,需要建立一個供該程序使用的令牌(token)。現在,當我們建立這個令牌時,IIS將自動在運行時添加IIS_IUSRS membership到工作者進程令牌中,這麼做能夠讓帳號以應用程式池身份運行,而不需要顯示地作為IIS_IUSRS組的一部分。我們相信這項修改將幫助你更輕易地設定係統,並讓您的整體體驗更好。
如果你想要停用這個特性並手動新增帳號到IIS_IUSRS群組,你可以透過設定manualGroupMembership值為true來只用這個特性。以下是如何設定defaultAppPool來停用這項特性的範例: