現在絕大多數的虛擬主機都停用了ASP 的標準元件:FileSystemObject,因為這個元件為ASP 提供了強大的檔案系統存取能力,可以對伺服器硬碟上的任何檔案進行讀取、寫入、複製、刪除、改名等操作(當然,這是指在使用預設設定的Windows NT / 2000 下才能做到)。但是禁止此元件後,造成的後果就是所有利用這個元件的ASP 將無法運行,無法滿足客戶的需求。
如何既允許FileSystemObject 元件,又不影響伺服器的安全性(即:不同虛擬主機使用者之間無法使用該元件讀寫別人的檔案)呢?這裡介紹本人在實驗中所獲得的一種方法,下文以Windows 2000 Server 為例來說明。
在伺服器上開啟資源管理器,用滑鼠右鍵點擊各個硬碟分區或磁碟區的盤符,在彈出式選單中選擇“屬性”,選擇“安全性”選項卡,此時就可以看到有哪些帳號可以存取這個分割區(卷)及訪問權限。預設安裝後,出現的是「Everyone」具有完全控制的權限。點“添加”,將“Administrators”、“Backup Operators”、“Power Users”、“Users”等幾個群組添加進去,並給予“完全控制”或相應的權限,注意,不要給“Guests”群組、 “IUSR_機器名”這幾個帳號任何權限。然後將「Everyone」群組從清單中刪除,這樣,就只有授權的群組和使用者才能存取此硬碟分割了,而ASP 執行時,是以「IUSR_機器名稱」的身分存取硬碟的,這裡沒給該使用者帳號權限,ASP 也就無法讀寫硬碟上的檔案了。
下面要做的就是為每個虛擬主機使用者設定一個單獨的使用者帳號,然後再給每個帳號指派一個允許其完全控制的目錄。
如下圖所示,開啟“電腦管理”→“本機使用者和群組”→“使用者”,在右邊欄位中點選滑鼠右鍵,在彈出的選單中選擇“新使用者”:
在彈出的“新用戶”對話框中根據實際需要輸入“用戶名”、“全名”、“描述”、“密碼”、“確認密碼”,並將“用戶下次登入時須更改密碼”前的對號去掉,勾選「使用者不能更改密碼」和「密碼永不過期」。本例是給第一虛擬主機的使用者建立一個匿名存取Internet 資訊服務的內建帳號“IUSR_VHOST1”,即:所有用戶端使用http://xxx.xxx.xxxx/存取此虛擬主機時,都是以這個身份來訪問的。輸入完成後點「建立」即可。可依實際需要,建立多個用戶,建立完畢後點「關閉」:
現在新建立的用戶已經出現在帳號清單中了,在清單中雙擊該帳號,以便進一步進行設定:
在彈出的「IUSR_VHOST1」(即剛剛建立的新帳號)屬性對話方塊中點「隸屬於」標籤:
剛建立的帳號預設是屬於「Users」群組,選取該群組,點選「刪除」:
現在出現的是如下圖所示,此時再點「新增」:
在彈出的“選擇群組”對話框中找到“Guests”,點“新增”,此群組就會出現在下方的文字方塊中,然後點“確定”:[www.knowsky.com]
出現的就是如下圖所示的內容,點「確定」關閉此對話框:
開啟“Internet 資訊服務”,開始對虛擬主機進行設置,本例中的以對“第一虛擬主機”設置為例進行說明,右鍵單擊該主機名,在彈出的選單中選擇“屬性”:
跳出一個「第一虛擬主機屬性」的對話框,從對話框中可以看到該虛擬主機使用者的使用的是「F:VHOST1」這個資料夾:
暫時先不管剛才的“第一虛擬主機屬性”對話框,切換到“資源管理器”,找到“F:VHOST1”這個資料夾,右鍵,選“屬性”→“安全”選項卡,此時可以看到該資料夾的預設安全性設定是「Everyone」完全控制(視不同情況顯示的內容不完全一樣),首先將最將下的「允許將來自父系的可繼承權限傳播給該物件」前面的對號去掉:
此時會彈出如下圖所示的「安全」警告,點「刪除」:
此時安全性標籤中的所有群組和使用者都將被清空(如果沒有清空,請使用「刪除」將其清空),然後點選「新增」按鈕。
將如圖所示的「Administrator」及在前面所建立的新帳號「IUSR_VHOST1」加入進來,將給予完全控制的權限,還可以根據實際需要添加其他群組或用戶,但一定不要將「Guests」群組、「IUSR_機器名稱」這些匿名存取的帳號加上去!
再切換到前面開啟的「第一虛擬主機屬性」的對話框,開啟「目錄安全性」選項卡,點匿名存取和驗證控制的「編輯」:
在彈出的“驗證方法”對方框(如下圖所示),點“編輯”:
彈出了“匿名用戶帳號”,預設的就是“IUSR_機器名”,點“瀏覽”:
在「選擇使用者」對話方塊中找到前面建立的新帳號“IUSR_VHOST1”,按兩下:
此時匿名使用者名稱就改過來了,在密碼框中輸入前面建立時,為該帳號設定的密碼:
OK,完成了,點確定關閉這些對話框。
經過此設定後,「第一個虛擬主機」的用戶,使用ASP 的FileSystemObject 元件也只能存取自己的目錄:F:VHOST1 下的內容,當試圖存取其他內容時,會出現諸如「沒有權限」、 「硬碟未準備好」、「500 伺服器內部錯誤」等出錯提示了。
另:如果該用戶需要讀取硬碟的分割容量及硬碟的序號,那麼這樣的設定將使其無法讀取。如果要允許其讀取這些和整個分區相關的內容,請右鍵點擊該硬碟的分區(卷),選擇“屬性”→“安全性”,將這個用戶的帳號添加到列表中,並至少給予“讀取”權限。由於該磁碟區下的子目錄都已經設定為“禁止將來自父系的可繼承權限傳播給該物件”,所以不會影響下面的子目錄的權限設定。