現(xiàn)在絕大多數(shù)的虛擬主機(jī)都禁用了 ASP 的標(biāo)準(zhǔn)組件:FileSystemObject,因?yàn)檫@個(gè)組件為 ASP 提供了強(qiáng)大的文件系統(tǒng)訪問能力,可以對服務(wù)器硬盤上的任何文件進(jìn)行讀、寫、復(fù)制、刪除、改名等操作(當(dāng)然,這是指在使用默認(rèn)設(shè)置的 Windows NT / 2000 下才能做到)。但是禁止此組件后,引起的后果就是所有利用這個(gè)組件的 ASP 將無法運(yùn)行,無法滿足客戶的需求。
如何既允許 FileSystemObject 組件,又不影響服務(wù)器的安全性(即:不同虛擬主機(jī)用戶之間不能使用該組件讀寫別人的文件)呢?這里介紹本人在實(shí)驗(yàn)中獲得的一種方法,下文以 Windows 2000 Server 為例來說明。
在服務(wù)器上打開資源管理器,用鼠標(biāo)右鍵點(diǎn)擊各個(gè)硬盤分區(qū)或卷的盤符,在彈出菜單中選擇“屬性”,選擇“安全”選項(xiàng)卡,此時(shí)就可以看到有哪些帳號可以訪問這個(gè)分區(qū)(卷)及訪問權(quán)限。默認(rèn)安裝后,出現(xiàn)的是“Everyone”具有完全控制的權(quán)限。點(diǎn)“添加”,將“Administrators”、“Backup Operators”、“Power Users”、“Users”等幾個(gè)組添加進(jìn)去,并給予“完全控制”或相應(yīng)的權(quán)限,注意,不要給“Guests”組、“IUSR_機(jī)器名”這幾個(gè)帳號任何權(quán)限。然后將“Everyone”組從列表中刪除,這樣,就只有授權(quán)的組和用戶才能訪問此硬盤分區(qū)了,而 ASP 執(zhí)行時(shí),是以“IUSR_機(jī)器名”的身份訪問硬盤的,這里沒給該用戶帳號權(quán)限,ASP 也就不能讀寫硬盤上的文件了。
下面要做的就是給每個(gè)虛擬主機(jī)用戶設(shè)置一個(gè)單獨(dú)的用戶帳號,然后再給每個(gè)帳號分配一個(gè)允許其完全控制的目錄。
如下圖所示,打開“計(jì)算機(jī)管理”→“本地用戶和組”→“用戶”,在右欄中點(diǎn)擊鼠標(biāo)右鍵,在彈出的菜單中選擇“新用戶”:

在彈出的“新用戶”對話框中根據(jù)實(shí)際需要輸入“用戶名”、“全名”、“描述”、“密碼”、“確認(rèn)密碼”,并將“用戶下次登錄時(shí)須更改密碼”前的對號去掉,選中“用戶不能更改密碼”和“密碼永不過期”。本例是給第一虛擬主機(jī)的用戶建立一個(gè)匿名訪問 Internet 信息服務(wù)的內(nèi)置帳號“IUSR_VHOST1”,即:所有客戶端使用 http://xxx.xxx.xxxx/ 訪問此虛擬主機(jī)時(shí),都是以這個(gè)身份來訪問的。輸入完成后點(diǎn)“創(chuàng)建”即可。可以根據(jù)實(shí)際需要,創(chuàng)建多個(gè)用戶,創(chuàng)建完畢后點(diǎn)“關(guān)閉”:

現(xiàn)在新建立的用戶已經(jīng)出現(xiàn)在帳號列表中了,在列表中雙擊該帳號,以便進(jìn)一步進(jìn)行設(shè)置:

在彈出的“IUSR_VHOST1”(即剛才創(chuàng)建的新帳號)屬性對話框中點(diǎn)“隸屬于”選項(xiàng)卡:

剛建立的帳號默認(rèn)是屬于“Users”組,選中該組,點(diǎn)“刪除”:

現(xiàn)在出現(xiàn)的是如下圖所示,此時(shí)再點(diǎn)“添加”:

在彈出的“選擇 組”對話框中找到“Guests”,點(diǎn)“添加”,此組就會出現(xiàn)在下方的文本框中,然后點(diǎn)“確定”:

出現(xiàn)的就是如下圖所示的內(nèi)容,點(diǎn)“確定”關(guān)閉此對話框:

打開“Internet 信息服務(wù)”,開始對虛擬主機(jī)進(jìn)行設(shè)置,本例中的以對“第一虛擬主機(jī)”設(shè)置為例進(jìn)行說明,右擊該主機(jī)名,在彈出的菜單中選擇“屬性”:

彈出一個(gè)“第一虛擬主機(jī) 屬性”的對話框,從對話框中可以看到該虛擬主機(jī)用戶的使用的是“F:\VHOST1”這個(gè)文件夾:

暫時(shí)先不管剛才的“第一虛擬主機(jī) 屬性”對話框,切換到“資源管理器”,找到“F:\VHOST1”(原文是單只修改這一個(gè)目錄,我覺得還是把整個(gè)盤符的everyone權(quán)限去了,增加administrators組,比較好)這個(gè)文件夾,右擊,選“屬性”→“安全”選項(xiàng)卡,此時(shí)可以看到該文件夾的默認(rèn)安全設(shè)置是“Everyone”完全控制(視不同情況顯示的內(nèi)容不完全一樣),首先將最將下的“允許將來自父系的可繼承權(quán)限傳播給該對象”前面的對號去掉:

將如圖中所示的“Administrator”(原文寫的是administrator 但我覺得還是應(yīng)該是administrators組,比較好)及在前面所創(chuàng)建的新帳號“IUSR_VHOST1”添加進(jìn)來,將給予完全控制的權(quán)限,還可以根據(jù)實(shí)際需要添加其他組或用戶,但一定不要將“Guests”組、“IUSR_機(jī)器名”這些匿名訪問的帳號添加上去!

再切換到前面打開的“第一虛擬主機(jī) 屬性”的對話框,打開“目錄安全性”選項(xiàng)卡,點(diǎn)匿名訪問和驗(yàn)證控制的“編輯”:

在彈出的“驗(yàn)證方法”對方框(如下圖所示),點(diǎn)“編輯”:

彈出了“匿名用戶帳號”,默認(rèn)的就是“IUSR_機(jī)器名”,點(diǎn)“瀏覽”:

在“選擇 用戶”對話框中找到前面創(chuàng)建的新帳號“IUSR_VHOST1”,雙擊:

此時(shí)匿名用戶名就改過來了,在密碼框中輸入前面創(chuàng)建時(shí),為該帳號設(shè)置的密碼:

再確定一遍密碼:

OK,完成了,點(diǎn)確定關(guān)閉這些對話框。
經(jīng)此設(shè)置后,“第一虛擬主機(jī)”的用戶,使用 ASP 的 FileSystemObject 組件也只能訪問自己的目錄:F:\VHOST1 下的內(nèi)容,當(dāng)試圖訪問其他內(nèi)容時(shí),會出現(xiàn)諸如“沒有權(quán)限”、“硬盤未準(zhǔn)備好”、“500 服務(wù)器內(nèi)部錯(cuò)誤”等出錯(cuò)提示了。
另:如果該用戶需要讀取硬盤的分區(qū)容量及硬盤的序列號,那這樣的設(shè)置將使其無法讀取。如果要允許其讀取這些和整個(gè)分區(qū)有關(guān)的內(nèi)容,請右鍵點(diǎn)擊該硬盤的分區(qū)(卷),選擇“屬性”→“安全”,將這個(gè)用戶的帳號添加到列表中,并至少給予“讀取”權(quán)限。由于該卷下的子目錄都已經(jīng)設(shè)置為“禁止將來自父系的可繼承權(quán)限傳播給該對象”,所以不會影響下面的子目錄的權(quán)限設(shè)置。