原文地址:http://www.iis.net/1026/SinglePageArticle.ashx
翻譯:Tony Qu (來(lái)自BluePRint翻譯團(tuán)隊(duì))
作者:Vikas Malhotra
最后更新時(shí)間:2006年9月12日,星期二,上午11:48
介紹
在以前的IIS版本中有一個(gè)本地帳號(hào),是在安裝時(shí)創(chuàng)建的,叫做IUSR_MachineName。一旦啟用匿名身份認(rèn)證,這個(gè)IUSR_MachineName帳號(hào)就是IIS默認(rèn)使用的身份(identity),它同時(shí)在FTP和HTTP服務(wù)中使用。另外還有一個(gè)叫做IIS_WPG的組,它是所有應(yīng)用程序池帳號(hào)的容器。在IIS安裝期間,必須保證所有的系統(tǒng)可用資源已經(jīng)為IIS_WPG設(shè)置了適當(dāng)?shù)臋?quán)限,當(dāng)管理員創(chuàng)建一個(gè)新的應(yīng)用程序池帳號(hào)時(shí),只需要把新帳號(hào)(身份)加入這個(gè)組即可。
這個(gè)模型運(yùn)轉(zhuǎn)得很好,但是和其他任何設(shè)計(jì)一樣,它們有他們的缺點(diǎn),主要的缺點(diǎn)是IUSR_MachineName帳號(hào)和IIS_WPG組對(duì)于創(chuàng)建它們的系統(tǒng)來(lái)說(shuō)都是本地的。 Windows中的每個(gè)帳號(hào)或組都有一個(gè)唯一的號(hào)碼叫做SID(安全識(shí)別號(hào)),這樣就可以區(qū)別于其它的帳號(hào)或組。我們僅使用SID來(lái)創(chuàng)建創(chuàng)建ACL。作為以前版本的IIS設(shè)計(jì)的組成部分,我們將IUSR_MachineName包含在了metabase.xml文件中,如果你嘗試從一臺(tái)機(jī)器拷貝metabase.xml到另一臺(tái)機(jī)器上,它并不會(huì)馬上運(yùn)轉(zhuǎn)起來(lái),因?yàn)榱硪慌_(tái)機(jī)器上的帳號(hào)使用的名字是不同的。另外,你不能僅用xcopy /o來(lái)拷貝ACL,因?yàn)椴煌瑱C(jī)器上的SID也是不同的。一個(gè)解決方法是使用域帳號(hào),但是你需要在你的架構(gòu)中添加一個(gè)活動(dòng)目錄。IIS_WPG組也有同樣的權(quán)限問(wèn)題,如果你在一個(gè)機(jī)器的文件系統(tǒng)上為IIS_WPG組設(shè)置ACL,使用xcopy /o來(lái)拷貝ACL到另一臺(tái)機(jī)器上是無(wú)法成功的。IIS了解了這一問(wèn)題,并通過(guò)在IIS7.0中使用內(nèi)建的帳號(hào)和組對(duì)其作了改進(jìn)。
內(nèi)建的帳號(hào)和組是由操作系統(tǒng)保證的,這樣就可以保證有一個(gè)唯一的SID,IIS甚至做得更好,它保證了新的帳號(hào)名稱和組名稱永遠(yuǎn)不會(huì)被本地化。例如,無(wú)論你安裝的是那種語(yǔ)言版本的Windows,IIS帳號(hào)名稱將永遠(yuǎn)是IUSR,而組名稱將永遠(yuǎn)是IIS_IUSRS。
總的來(lái)說(shuō),在IIS 7.0中:
IUSR內(nèi)建帳號(hào)替代了IUSR_MachineName帳號(hào)
IIS_IUSRS內(nèi)建組替代了IIS_WPG組
因?yàn)镮USR是一個(gè)內(nèi)建帳號(hào),它不再需要密碼。邏輯上你可以認(rèn)為它就是NETWORKSERVICE或LOCALSERVICE帳號(hào)。IUSR帳號(hào)和IIS_IUSRS組將在下面的章節(jié)中做進(jìn)一步介紹。
理解新的IUSR帳號(hào)
正如上面所說(shuō)的,在IIS 7.0中IUSR帳號(hào)將替代IUSR_MachineName 帳號(hào)。僅在安裝FTP服務(wù)器時(shí),IUSR_MachineName 帳號(hào)才會(huì)被創(chuàng)建和使用。如果不安裝FTP,那么這個(gè)帳號(hào)將永遠(yuǎn)不會(huì)被創(chuàng)建。
這個(gè)內(nèi)建帳號(hào)并不需要密碼,當(dāng)啟用匿名身份認(rèn)證時(shí),該帳號(hào)并將被作為默認(rèn)的用戶身份使用。如果你看一看applicationHost.config文件,你會(huì)發(fā)現(xiàn)下面的定義:
<anonymousAuthentication enabled="true" userName="IUSR" defaultLogonDomain="" />
這就告訴了IIS對(duì)所有的匿名身份認(rèn)證請(qǐng)求使用新的內(nèi)建帳號(hào)。這樣做的最大優(yōu)點(diǎn)在于,我們現(xiàn)在可以:
* 使用Windows Explorer或許多其他命令行工具為IUSR設(shè)置文件系統(tǒng)權(quán)限
* 不用再擔(dān)心這個(gè)帳號(hào)的密碼會(huì)過(guò)期
* 使用xcopy /o無(wú)縫拷貝文件以及它們的所有權(quán)和ACL信息到不同的機(jī)器上
有一點(diǎn)要重點(diǎn)提一下:IUSR帳號(hào)和LOCALSERVICE帳號(hào)在方式上很相似,它是在網(wǎng)絡(luò)上匿名工作。NETWORKSERVICE和LOCALSYSTEM 可以以機(jī)器身份工作,但I(xiàn)USR則不是,因?yàn)樗且环N特權(quán)的升遷。如果你希望有一個(gè)擁有網(wǎng)絡(luò)訪問(wèn)權(quán)限的匿名帳號(hào),你就需要?jiǎng)?chuàng)建一個(gè)新的用戶帳號(hào),并手工設(shè)置用戶名和密碼,就像你以前設(shè)置匿名身份驗(yàn)證一樣。要在IIS Manager中實(shí)現(xiàn)這一點(diǎn),你可以:
* 點(diǎn)擊Start按鈕,鍵入"INetMgr.exe"并按回車(如果彈出提示框,請(qǐng)按Continue來(lái)提升權(quán)限)
* 點(diǎn)擊Connection中機(jī)器名稱旁邊的"+"按鈕
* 在IIS Manager中雙擊你要管理的站點(diǎn)
* 雙擊Feature Name標(biāo)題下面的Authentication項(xiàng)
* 選擇Anonymous Authentication,點(diǎn)擊右側(cè)Task標(biāo)題下面的Edit,彈出Specify Credentials dialog(指定認(rèn)證對(duì)話框)
* 點(diǎn)擊Specific User選項(xiàng),然后按下"Set"按鈕
* 輸入想設(shè)的用戶名和密碼,按OK
理解新的IIS_IUSRS組
正如前面所提到的,IIS_IUSRS組是用來(lái)替代IIS_WPG組的,它已經(jīng)擁有了所有的文件和系統(tǒng)資源的訪問(wèn)權(quán)限,因此如果一個(gè)帳號(hào)被添加到該組中,它將以應(yīng)用程序池身份無(wú)縫工作。
由于與內(nèi)建帳號(hào)配合工作,該內(nèi)建組可以解決幾個(gè)xcopy的部署問(wèn)題。如果你在文件上為IIS_WPG設(shè)置權(quán)限(在IIS6中這是可以的),并嘗試把這些文件拷貝另外一個(gè)Windows系統(tǒng)中,由于組SID在不同機(jī)器上是不同的,站點(diǎn)設(shè)置可能被破壞。
在IIS7中,由于組SID在所有Longhorn系統(tǒng)中是相同的。當(dāng)你從一臺(tái)機(jī)器向令一臺(tái)機(jī)器移動(dòng)文件時(shí),使用'xcopy /o'可以保留ACL和擁有權(quán)信息,這使得xcopy部署變得簡(jiǎn)單的多!
客戶們的第二個(gè)請(qǐng)求是“一旦我們配置了應(yīng)用程序池身份,我們需要IIS來(lái)幫我們做所有必要的修改”。我們接受了這個(gè)意見(jiàn),并使這一過(guò)程在IIS7.0中變得更加簡(jiǎn)單。當(dāng)IIS啟動(dòng)一個(gè)工作者進(jìn)程(worker process)時(shí),需要?jiǎng)?chuàng)建一個(gè)供該進(jìn)程使用的令牌(token)。現(xiàn)在,當(dāng)我們創(chuàng)建這個(gè)令牌時(shí),IIS將自動(dòng)在運(yùn)行時(shí)添加IIS_IUSRS membership到工作者進(jìn)程令牌中,這么做能夠讓賬號(hào)以應(yīng)用程序池身份運(yùn)行,而不需要顯示地作為IIS_IUSRS組的一部分。我們相信這一修改將幫助你更輕易地設(shè)置系統(tǒng),并讓您的整體體驗(yàn)更好。
如果你想禁用這個(gè)特性并手工添加賬號(hào)到IIS_IUSRS組,你可以通過(guò)設(shè)置manualGroupMembership值為true來(lái)僅用這一特性。下面是關(guān)于如何設(shè)置defaultAppPool來(lái)禁用這一特性的例子:
<applicationPools>
<add name="DefaultAppPool">
<processModel manualGroupMembership="true" />
</add>
</applicationPools>
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注