IIS 資料夾權限深入 (IIS & SMB)
2022-01-21
筆記 IIS 與使用 SMB 協定存取檔案的要點,並討論 Static File Http Module 以及 UNC 做為網站來源的設定方式。
關鍵詞彙
- Identity As User
- 應用程式集區的識別方式,分為 ApplicationPoolIdentity 或自訂帳號,會影響 w3wp.exe 的使用者名稱
- Impersonation As User
- ASP.NET 驗證,分為停用、已驗證的使用者(啟用)與特定使用者。對於實際的 SC User Name 有最高決定權。
- Connected As User
- IIS 基本設定中可以設定的連線身分,分為特定使用者以及應用程式使用者(通過驗證)兩種設定。
- Server Configuration User Name
- 簡稱 SC User Name,伺服器組態的一個項目。會根據 Identity As, Impersonation As, Connected As 的設置組合,有不同的值,包含應用程式集區、特定使用者或者是驗證登入的使用者。SC User Name 決定 ASP 如何在程式當中存取本機資源、UNC 資源以及網域驗證連線資料庫的身分,非常重要。
- Auth User
- 登入驗證的使用者,如果是使用匿名驗證為 IUSR;使用 Windows 驗證則為各驗證登入者。
- Statfic File Http Module
- 使用 Connected As User 或 Auth User 的身分,向網頁伺服器取得靜態檔案。
- Proxy File
- 使用 ASP.NET 程式,會依據 SC User Name 的身分連線 Drirve / UNC 資源並進行讀取、寫入檔案。
Static File Http Module
http://domain.local/files/funPictures.png
http://domain.local/files/memo.txt
http://domain.local/files/style.css
Proxy File 示例
ASP.NET MVC Controller
public ActionResult GetFile(string serverPath)
{
return File(serverPath, "text/plain");
}
如何決定 SC User Name
如何排除使用者讀取應用程式的特定資料夾及檔案
資料夾及檔案 | 排除方式 |
---|---|
BIN | 要求篩選的隱藏區段中預設排除 |
web.config | 要求篩選的隱藏區段中預設排除 |
App_Data | 要求篩選的隱藏區段中預設排除 |
App_code | 要求篩選的隱藏區段中預設排除 |
*.cs | 要求篩選的副檔名預設為拒絕 |
*.vb | 要求篩選的副檔名預設為拒絕 |
*.mdf | 要求篩選的副檔名預設為拒絕 |
*.ldf | 要求篩選的副檔名預設為拒絕 |
*.config | 要求篩選的副檔名預設為拒絕 |
*.cshtml | 處理常式對應交由 System.Web.HttpForbidenHandler |
*.vbhtml | 處理常式對應交由 System.Web.HttpForbidenHandler |
*.aspx | 處理常式對應交由 IsapiModule 處理 |
*.ashx | 處理常式對應交由 IsapiModule 處理 |
*.asp | 處理常式對應交由 IsapiModule 處理 |
Views | 資料夾內的 Web.config 設定交由 System.Web.HttpNotFoundHandler |
UNC 作為應用程式實體路徑
假說:
搭配 Identity As User 的方式,使用 UNC 資料夾要提供的最小權限包含 Identity User 以及需要以 Static File Http Module 下載檔案的使用者。
網站資料夾的權限
假說:
只要讓網站的資料夾建立者對檔案擁有 NTFS 安全性讀取權限,則縱使登入的使用者對該檔案不具有 NTFS 安全性讀取權限,仍然可以 Static File Http Module 的方式讀取檔案。
集區識別與網站安全性的搭配
識別 | 資料夾 NTFS |
---|---|
ApplicationPoolIdentity | IIS_IUSRS |
ApplicationPoolIdentity 為 IIS_IUSRS 的成員,授權 IIS_IUSRS 對於網站資料夾擁有讀取權限後網站可以運行,好處在於授權的設定上相當方便。
但存在風險是若其他不同集區的網站被加入後門程式,其他集區若可以基於 IIS_IUSRS 權限存取個本系統,會受到影響。
識別 | 資料夾 NTFS |
---|---|
ApplicationPoolIdentity | IIS Apppool\集區名稱 |
理想的設定方式,以及集區名稱的方式在 NTFS 安全上進行授權,有著更高的資安防護,但缺點是設定上略微麻煩,需要逐網站、應用程式設定。
識別 | 資料夾 NTFS |
---|---|
Specific User | Authenticated Users |
應用情境為應用程式實體路徑在 UNC 或者使用 Windows 驗證的方式連線資料庫 或者有存取檔案來源是在 UNC 上。Specific User 必須為 Authenticated 的成員,例如 AD 網域帳號 即可。
授權 Authenticated Users 的缺點在於若網站存在後門程式,其他具 Authenticated User 身分的執行以 Proxy File 的方式取得檔案內容。此外所有的 Authenticated Users 都可以基於此身分以 Http Module 的方式下載網站資料夾未受限(要求篩選、處理常式)的檔案。
識別 | 資料夾 NTFS |
---|---|
Specific User | Specific User(佳) |
與上一個使用情境相同,但差別在於在 UNC 資料夾上使用 Specific User 而非 Authenticated User,好處是有更高的安全性。但缺點是使用者無法 Http Module 的方式下載檔案,必須由應用程式經由 Proxy File 的方式提供檔案。
情境與設定
Setup | Value |
---|---|
Identity As | ApplicationPool |
Impersonation As | Enable |
Connected As | - |
SC User Name | Depends On Logon User |
Proxy File | LognOn Self Handle Error; Users, Auth Users, Everyone OK |
Setup | Value |
---|---|
Identity As | AD User In IIS_IUSRS Group |
Impersonation As | AD User2 |
Connected As | - |
SC User Name | AD User2 |
LogOn | AD User2 |
Proxy File | AD User2 Handle Error, AD User Denied |
Http Module | AD User2 OK, AD User Deny |
Setup | Value |
---|---|
Identity As | AD User In IIS_IUSRS Group |
Impersonation As | AD User2 |
Connected As | AD User 3 In IIS_IUSRS Group |
SC User Name | AD User2 |
LogOn | AD User2 |
Proxy File | Proxy AD User2 Handle Error |
Http Module | AD User3 OK, AD User, AD User2 Deny |
Setup | Value |
---|---|
Identity As | ApplicationPool |
Impersonation As | AD User In IIS_IUSRS Groip |
Connected As | - |
SC User Name | AD User |
LogOn | AD User2 |
Proxy File | Proxy AD User Handle Error |
Http Module | AD User2 OK, AD User Deny |
Setup | Value |
---|---|
Identity As | AD User |
Impersonation As | - |
Connected As | - |
SC User Name | AD User |
LogOn | AD User |
Proxy File | Proxy AD User OK |
Http Module | Depends On LogOn |
參考資料
自訂 HTTP Modules and HTTP Handlers