原文地址:http://www.iis.net/1026/SinglePageArticle.ashx
介紹
在以前的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檔案,你會發現下面的定義:
<anonymousAuthentication enabled="true" userName="IUSR" defaultLogonDomain="" />
這就告訴了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來禁用這一特性的例子:<applicationPools>
<add name="DefaultAppPool">
<processModel manualGroupMembership="true" />
</add>
</applicationPools>