﻿# IIS 執行的身份識別與 Windows 權限控管不是你想的那樣

一般人都以為 Windows Server 預設的目錄權限很安全，但事實上一點也不，因為 Windows Server 2003 是一個多用途(Multi-function)的伺服器作業系統，並不是單單為了 Web 應用程式所設計的，所以系統管理員如果對於 IIS 的執行權限與 Windows 的權限控管不夠瞭解，就很有可能面臨極大的風險。

我們都知道 IIS 中有幾個內建的身份識別擁有不同的意義與使用情境，詳細可參考 [IIS and Built-in Accounts (IIS 6.0)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc784675\(v=ws.10\)) 說明，以下為部分摘要：

-   IUSR\_*MachineName*
    -   匿名存取時 IIS 所使用的身份識別
    -   IIS 讀取任何**靜態檔案**時，預設就是以此身份權限進行讀取
    -   IIS 內某些 **ISAPI** 程序預設也是以此身份執行
-   NETWORK SERVICE
    -   負責啟動 IIS 工作程序 (w3wp.exe)
    -   ASP.NET 執行時預設就是以這個身份執行
    -   FastCGI 執行時預設也是以這個身份執行

首先，先介紹一個常見的 **Users** 群組，裡面預設包含了 NT AUTHORITY\\Authenticated Users 群組，所以只要所有被認證成功的使用者都屬於 Users 群組的成員，當然也包括 NETWORK SERVICE 與 IUSR\_*MachineName* 這些特殊用途的系統群組與使用者。

![Users 群組](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/db14717340d9d183f5dc-image37_3.png)

再來，你看看 **D:\\** 目錄的預設權限定義：

![新增磁碟區 (D:) 內容](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/477a3609d82aa6a2baf8-image16_3.png) 

感覺上 **Users** 群組的權限只有**讀取**與**執行**而已，但是若你點選「進階」進入查看，事實上 User 群組的權限不止如此，他還可以「建立資料夾」、「附加資料」、「建立檔案」、「寫入資料」等權限。

 ![新增磁碟區 (D:) 的進階安全性設定](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/71f564b1d40b0a439a93-image30_3.png)

預設的 **C:\\Inetpub\\wwwroot** 目錄是安全的，不過如果你將網站安裝在非預設網站目錄下（例如： **D:\\Website** ）且目錄權限又沒有特別設定過的話，該目錄就會直接繼承 **D:\\** 目錄下所定義的權限，也就代表著不管你是用 NETWORK SERVICE 或 IUSR\_*MachineName* 身份執行任何程式(PHP, ASP, ASP.NET, ISAPI, CGI, ...)，其實都可以任意「建立資料夾」、「附加資料」、「建立檔案」、「寫入資料」到你的網站目錄內 ( 也包括以外的目錄 )。

可想見網站目錄若套用**預設權限**的設定有多危險，風險指數極高！

若要安全的設定網站，我個人有以下建議：

-   將主機單純用作 Web 用途，不要同時處理太多不同的任務
-   將 **C:\\** 與 **D:\\** 預設的 Users 與 Everyone 權限全部移除！
-   網站目錄必須明確拒絕**匿名登入帳號**的寫入權限，包括 NETWORK SERVICE 與 IUSR\_*MachineName* 兩個預設的群組。
-   僅開放真的需要透過 Web 上傳或寫入的目錄有「寫入」權限!
-   如果上傳或寫入的檔案不需要直接透過 Web 存取，建議不要將目錄放在 Web 可存取的目錄下!
-   若需透過 Web 介面上傳檔案至網站，建議限制上傳檔案的「副檔名」（需明確表列）
-   透過 Web 介面上傳檔案至網站目錄，如果不需要**執行權限**者，建議直接將該目錄的執行權限設定成「無」，避免駭客上傳可執行的**指令檔** (如: \*.asp , \*.php , ... ) 把你的網站當成跳版!  
    如下圖示：  
    ![站台內容 :: 接將該目錄的執行權限設定成「無」，避免駭客上傳可執行的指令檔 (如: \*.asp , \*.php , ... ) 把你的網站當成跳版](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/75a68503a9b75b8a9c6c-image_3.png) 
-   完整看過一遍 [Checklist: Securing Your Web Server](http://msdn.microsoft.com/en-us/library/aa302351.aspx) 檢核清單，並落實檢核。

**相關連結**

-   [FastCGI Extension for IIS6.0 - RTM](http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1521)
-   [PHP: Hypertext Preprocessor](http://php.net/)
-   [Improving Web Application Security: Threats and Countermeasures](http://msdn.microsoft.com/en-us/library/ms994921.aspx)
    -   [Chapter 16 – Securing Your Web Server](http://msdn.microsoft.com/en-us/library/aa302432.aspx)
    -   [Checklist: Securing Your Web Server](http://msdn.microsoft.com/en-us/library/aa302351.aspx)
-   [Security Guidance for IIS](http://technet.microsoft.com/en-us/library/dd450371.aspx)
-   [Securing Sites with Web Site Permissions (IIS 6.0)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc756133\(v=ws.10\))
-   [IIS 6.0 Technical Reference (IIS 6.0)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc784675\(v=ws.10\))
