虛擬主機安全核心在於「最小權限原則」的徹底落地。本文基於 Windows 2000 Advanced Server (NTFS 全盤),系統盤 C:、軟體盤 D:、資料盤 E:,詳細記錄從 TCP/IP 篩選、系統目錄 ACL、網站匿名帳號隔離、語言執行環境權限、資料庫、Serv-U、系統關鍵執行檔防護等全層面鎖定實務。
一、網路層防護:TCP/IP 篩選 (嚴格白名單)
- 原則:除非明確允許,否則拒絕 (較本地安全性原則「除非拒絕否則允許」更嚴格)。
- 開放 TCP 埠:
21 (FTP)、80 (HTTP)、5631 (pcAnywhere)、8735 (Terminal Service 修改埠)、10001-10005 (Serv-U PASV 模式)。
- IP 協定:僅允許
6 (TCP);UDP 埠暫未詳細測試保守關閉。
- 網卡屬性:移除除 TCP/IP 外所有協定;Administrator 重命名;本地安全性原則設定「不顯示上次登入帳號」、「帳號鎖定門檻」。
二、系統目錄 ACL 基準 (C:/D:/E: 根目錄)
- 移除 Everyone。
- 僅保留 重命名後的 Administrator、SYSTEM → 完全控制。
- 進階 → 重設所有子物件權限並啟用繼承傳播。
此為「預設拒絕」基準,後續各服務目錄按需最小授權。
三、服務目錄最小授權清單
| 服務/功能 | 目標路徑 | 授權對象 | 權限 | 備註 |
| ASP/ADO/MDAC | C:\Program Files\Common Files | Everyone | 讀取、列出資料夾、讀取與執行 | 資料庫連接需用 |
| PHP (ISAPI) | C:\WINNT\php.ini | Everyone | 讀取 | |
| PHP Session | C:\WINNT\Temp (若指定) | Everyone | 讀取、寫入 | |
| PHP ISAPI | D:\PHP | Everyone | 讀取、列出、讀取與執行 | 效能與安全較 CGI 優 |
| Perl CGI (ISAPI) | D:\Perl | Everyone | 讀取、列出、讀取與執行 | ISAPI 模式較安全 |
| MSSQL/MySQL | D:\MSSQL / D:\MySQL | 繼承 D: 根目錄 | — | 帳號密碼另行強化 |
四、Serv-U 5.0.11 專項加固
- 安裝至
D:\Serv-U,漢化破解。
- 修改預設管理帳號密碼:使用 EditPlus 等十六進位編輯器直接修改
ServUDaemon.exe、ServUAdmin.exe 內明文密碼字串,或自寫小程式修改。
- 溢位漏洞 5.0.11 已修補;INI 設定檔因目錄權限已無法被匿名寫入。
五、系統關鍵執行檔防護 (C:\WINNT\System32)
- 整體目錄:授予 Everyone「讀取、列出、讀取與執行」 (大多數服務需載入 DLL)。
- 逐項移除繼承並拒絕存取 (高風險工具):
cacls.exe (權限修改工具) → 拒絕所有存取。
- 限制 僅重命名後的 Administrator 可存取:
net.exe, cmd.exe, ftp.exe, tftp.exe, telnet.exe
⚠ 風險提示:System32 整體授予 Everyone 讀取/執行 存在風險 (可列舉 DLL、尋找漏洞)。進階做法:建立 C:\AppDLLs,將網站真正需要的 DLL 複製至此並授權,System32 僅保留核心系統服務存取。文中補充建議即朝此方向。
六、網站匿名帳號隔離 (每站一帳號)
雖本文未展開,但配合上述目錄 ACL,每個網站建立專屬 IUSR_SiteName 帳號,僅授予該站點目錄權限,是虛擬主機隔離的標準動作。
七、部署後驗證清單
- [ ] TCP/IP 篩選生效,掃描器僅見開放埠
- [ ] C:/D:/E: 根目錄無 Everyone
- [ ] Common Files、PHP、Perl 目錄權限最小化
- [ ] Serv-U 管理密碼已修改非預設值
- [ ] cmd.exe/tftp.exe 等僅 Administrator 可執行
- [ ] 匿名帳號隔離生效,跨站目錄存取被拒
權限配置非一次完成,需隨著軟體升級、新增服務持續微調。建議將上述 ACL 導出為安全性範本 (.inf),新機器部署時 secedit /configure 秒級套用,並納入定期稽核流程。