顯示具有 應用程式集區識別 標籤的文章。 顯示所有文章
顯示具有 應用程式集區識別 標籤的文章。 顯示所有文章

2026年1月15日 星期四

[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」的「IUSR」與「應用程式集區識別」覆蓋設定實測

[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」的「IUSR」與「應用程式集區識別」覆蓋設定實測

2026-01-15

ASP.NET WebForm,

IIS 管理員\伺服器\IIS\驗證\動作\開啟功能\匿名驗證\動作\編輯\編輯匿名驗證認證\匿名使用者識別

-----

"IIS/伺服器/站台/網站" 層級的 "匿名驗證" 用預設「IUSR」,可以覆蓋

"IIS/伺服器" 層級的 "匿名驗證" 從「IUSR」改為「應用程式集區識別」設定 ?

ChatGPT

結論:站台/網站層級可以完全覆蓋伺服器層級的設定。

換句話說:

站台或網站層級設為 IUSR,即使伺服器層級改為 應用程式集區識別,該站台/網站仍然使用 IUSR。

註:避免出狀況時,可以讓系統盡快復原運作。

********************************************************************************

2026-01-16補

雖然「網站」層級設定可以覆蓋「伺服器」層級設定,但這個「網站」層級設定,不是儲存在 ASP.NET WebForm 網站根目錄的 Web.Config,而是儲存在 C:\Windows\System32\inetsrv\Config\applicationHost.config 檔案中,

    <location path="WebSite2">
        <system.webServer>
            <security>
                <authentication>
                    <anonymousAuthentication userName="" />
                </authentication>
            </security>
        </system.webServer>
    </location>

userName="" 空值表示使用 應用程式集區識別 (Application Pool Identity)。

如果是 IUSR,會是:

<anonymousAuthentication enabled="true" userName="IUSR" password="..." />

例如:

<anonymousAuthentication enabled="true" userName="IUSR" />

註:和 SourceCode 的 Web.Config 無關。

********************************************************************************

2026-01-16補

實際測試兩個 ASP.NET WebForm 網站,一個有使用 Microsoft Identity 身分識別機制,一個沒有,似乎登入都正常。

(完)

[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」編輯「匿名驗證」出錯解決

[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」編輯「匿名驗證」出錯解決

2026-01-15

政府組態基準(Government Configuration Baseline,簡稱GCB)

[研究]Windows Server 2019 套用 GCB IIS 10.0設定路徑圖解(1)基本設定
https://shaurong.blogspot.com/2025/10/windows-server-2019-gcb-iis-1001.html

[研究]ASP.NET WebForm 用 NuGet 安裝 Microsoft Identity 身分識別機制套件https://shaurong.blogspot.com/2026/01/aspnet-webform-nuget-microsoft-identity.html

項次TWGCB-ID類別原則設定名稱說明設定位置設定路徑GCB設定值
6TWGCB-04-014-0006基本設定匿名使用者識別
  • 這項原則設定決定匿名使用者識別是否設為「應用程式集區識別」
  • 將匿名驗證中之「匿名使用者識別」設定為「應用程式集區識別」,可確保匿名使用者以最小權限之身分執行,可簡化站台管理工作
伺服器IIS 管理員\伺服器\IIS\驗證\動作\開啟功能\匿名驗證\動作\編輯\編輯匿名驗證認證\匿名使用者識別應用程式集區識別



下圖,出錯 


********************************************************************************

【解決】發現網站不小心砍掉,所以 Web.Config 不存在,重新 Deploy 後,成功讀取了。

(完)

相關



[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」從「IUSR」改為「應用程式集區識別」實測

[研究]GCB IIS 10.0 基本設定,「匿名使用者識別」從「IUSR」改為「應用程式集區識別」實測

2026-01-15

政府組態基準(Government Configuration Baseline,簡稱GCB)

[研究]Windows Server 2019 套用 GCB IIS 10.0設定路徑圖解(1)基本設定
https://shaurong.blogspot.com/2025/10/windows-server-2019-gcb-iis-1001.html

[研究]ASP.NET WebForm 用 NuGet 安裝 Microsoft Identity 身分識別機制套件https://shaurong.blogspot.com/2026/01/aspnet-webform-nuget-microsoft-identity.html

項次TWGCB-ID類別原則設定名稱說明設定位置設定路徑GCB設定值
6TWGCB-04-014-0006基本設定匿名使用者識別
  • 這項原則設定決定匿名使用者識別是否設為「應用程式集區識別」
  • 將匿名驗證中之「匿名使用者識別」設定為「應用程式集區識別」,可確保匿名使用者以最小權限之身分執行,可簡化站台管理工作
伺服器IIS 管理員\伺服器\IIS\驗證\動作\開啟功能\匿名驗證\動作\編輯\編輯匿名驗證認證\匿名使用者識別應用程式集區識別




註:如果編輯「匿名驗證」出現錯誤,請檢查該網站是否存在

********************************************************************************

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

Default.aspx

<?xml version="1.0" encoding="utf-8"?>
<!--
  如需如何設定 ASP.NET 應用程式的詳細資訊,請前往
  https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.8" />
    <httpRuntime targetFramework="4.8" />
    <authentication mode="Forms" />
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>IIS GCB 匿名驗證測試</h2>

        <table border="1">
            <tr>
                <th>項目</th>
                <th>值</th>
            </tr>
            <tr>
                <td>User.Identity.IsAuthenticated</td>
                <td><asp:Label ID="lblIsAuthenticated" runat="server" /></td>
            </tr>
            <tr>
                <td>User.Identity.Name</td>
                <td><asp:Label ID="lblUserName" runat="server" /></td>
            </tr>
            <tr>
                <td>HttpContext.Current.User.Identity.AuthenticationType</td>
                <td><asp:Label ID="lblAuthType" runat="server" /></td>
            </tr>
            <tr>
                <td>Request.LogonUserIdentity.Name</td>
                <td><asp:Label ID="lblLogonUser" runat="server" /></td>
            </tr>
        </table>

        <div class="section">
        <h3>Forms Authentication 測試登入</h3>
        帳號:
        <asp:TextBox ID="txtUser" runat="server" />
        <asp:Button ID="btnLogin" runat="server" Text="登入" OnClick="btnLogin_Click" />
        &nbsp;
        <asp:Button ID="btnLogout" runat="server" Text="登出" OnClick="btnLogout_Click" />
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Web.Security;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ShowIdentity();
        }

        private void ShowIdentity()
        {
            lblIsAuthenticated.Text = User.Identity.IsAuthenticated.ToString();

            lblUserName.Text = string.IsNullOrEmpty(User.Identity.Name)
                ? "(空字串)"
                : User.Identity.Name;

            lblAuthType.Text = string.IsNullOrEmpty(User.Identity.AuthenticationType)
                ? "(null / 空)"
                : User.Identity.AuthenticationType;

            if (Request.LogonUserIdentity != null)
            {
                lblLogonUser.Text = Request.LogonUserIdentity.Name;
            }
            else
            {
                lblLogonUser.Text = "(null)";
            }
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            // 不做帳密驗證,純測試用
            string userName = txtUser.Text.Trim();

            if (!string.IsNullOrEmpty(userName))
            {
                FormsAuthentication.SetAuthCookie(userName, false);
                Response.Redirect(Request.RawUrl);
            }
        }

        protected void btnLogout_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect(Request.RawUrl);
        }
    }
}

********************************************************************************

下圖,在 Visual Studio Enterprise 2019 中執行,登入前


下圖,在 Visual Studio Enterprise 2019 中執行,登入後


下圖,未套 GCB,Deploy後,登入前


下圖,未套 GCB,Deploy後,登入後


下圖,套 GCB,Deploy後,登入前

下圖,套 GCB,Deploy後,登入後

Request.LogonUserIdentity.Name 在套用 GCB 前後回傳值可能有變化。

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?(二)

根據這幾篇,影響的東西會很多,有空再繼續研究。

(完)

相關



2026年1月6日 星期二

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?(二)

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?(二)

政府組態基準(GCB) II 10.0

續 

[研究]GCB IIS 10.0「匿名使用者識別」改為「應用程式集區識別」會否產生問題?https://shaurong.blogspot.com/2025/10/gcb-iis-100iusr.html

因為這個的衝擊有些大,再做點研究...

以下是幾個可能會受到影響的關鍵領域:

1. 檔案系統存取權限 (NTFS Permissions)

這是最直接的衝擊。過去您只需要給予 IUSR 讀取權限,現在必須針對每一個特定的 AppPool 進行設定。

  • 影響範圍: 靜態檔案(HTML, CSS, JS, 圖片)、Web.config、日誌資料夾。
  • 調整方式: 需手動加入 IIS AppPool\<您的集區名稱> 並給予適當權限。如果站台很多,這會增加維運成本。

2. 暫存檔與臨時目錄 (Temp Folders)

  • ASP.NET 編譯暫存: 通常位於 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files。如果集區識別變更後權限不足,站台可能無法啟動或編譯失敗。
  • 系統 Temp 目錄: 某些套件(如 PDF 產生器、Excel 匯出)會使用 Path.GetTempPath()。不同身分指向的 Temp 路徑不同,可能導致找不到檔案。

3. 資料庫連線 (Windows 驗證)

如果您的資料庫連線字串中使用 Trusted_Connection=True 或 Integrated Security=SSPI:

  • 舊情況: 使用 IUSR(或電腦帳戶)去連線。
  • 新情況: 會使用 IIS AppPool\<AppPoolName> 去連線。
  • 後果: 資料庫端若未授權給該集區識別,會發生 Login failed for user 錯誤。

4. 外部網路資源存取

當您的程式碼需要存取 UNC 路徑 (網路芳鄰檔案共享) 或跨伺服器資源時:

  • AppPoolIdentity 在跨機時代表的是該伺服器的「電腦帳戶」(Domain\ComputerName$)。
  • 如果原本跨機存取是依賴特定帳戶模擬,改動後可能會失效。

5. 憑證存放區存取 (Certificate Store)

  • 如果您的網站有使用 SSL 憑證進行客戶端驗證 或 數位簽章 (WebAPI 呼叫金鑰)。
  • 私鑰的存取權限通常是綁定給特定身分的。更改為集區識別後,可能無法讀取個人憑證存放區中的金鑰。

6. 第三方元件與 COM+ 元件

  • 某些老舊的 COM 元件或系統層級的 DLL (如 Office 串接) 對執行身分非常敏感。
  • AppPoolIdentity 的 Profile 載入行為與 IUSR 不同,可能導致元件初始化失敗。


落實「最小權限原則」是好事,但出了事,問題可能很難查,全面測試100%沒問題再上線,該無人可保證。

(完)

2025年10月23日 星期四

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?

[研究]GCB IIS 10.0「匿名使用者識別」從「IUSR」改為「應用程式集區識別」會否產生問題?

2025-10-23

政府組態基準(Government Configuration Baseline,簡稱GCB)

[研究]Windows Server 2019 套用 GCB IIS 10.0設定路徑圖解(1)基本設定
https://shaurong.blogspot.com/2025/10/windows-server-2019-gcb-iis-1001.html

項次TWGCB-ID類別原則設定名稱說明設定位置設定路徑GCB設定值
6TWGCB-04-014-0006基本設定匿名使用者識別
  • 這項原則設定決定匿名使用者識別是否設為「應用程式集區識別」
  • 將匿名驗證中之「匿名使用者識別」設定為「應用程式集區識別」,可確保匿名使用者以最小權限之身分執行,可簡化站台管理工作
伺服器IIS 管理員\伺服器\IIS\驗證\動作\開啟功能\匿名驗證\動作\編輯\編輯匿名驗證認證\匿名使用者識別應用程式集區識別




********************************************************************************

Windows Server 2019 的 IIS 10.0 套用 政府組態基準(Government Configuration Baseline,簡稱GCB)

TWGCB-04-014_Microsoft IIS 10政府組態基準說明文件v1.1_1141002.pdf

https://download.nics.nat.gov.tw/api/v4/file-service/UploadFile/attachfilegcb/TWGCB-04-014_Microsoft%20IIS%2010%E6%94%BF%E5%BA%9C%E7%B5%84%E6%85%8B%E5%9F%BA%E6%BA%96%E8%AA%AA%E6%98%8E%E6%96%87%E4%BB%B6v1.1_1141002.pdf

其中 IIS 管理員\伺服器\IIS\驗證\動作\開啟功能\匿名驗證\動作\編輯\編輯匿名驗證認證\匿名使用者識別 "匿名使用者識別" 從 IUSR 改為 "應用程式集區識別" 會否產生問題 ?

ChatGPT

一、背景說明

在 IIS 10.0 (Windows Server 2019) 中,匿名驗證 (Anonymous Authentication) 是讓未經驗證的使用者能夠存取網站的主要機制。

它有兩種常見的執行帳號設定:

選項 說明 實際執行帳號
IUSR (預設) IIS 內建的低權限匿名帳號,全系統共用 IUSR 本機帳號
應用程式集區識別 (Application Pool Identity) 每個應用程式集區使用自己專屬的虛擬帳號執行 IIS APPPOOL\<AppPoolName>

二、設定位置

IIS 管理員 → 網站 → 驗證 → 匿名驗證 → 右鍵「編輯」「編輯匿名驗證認證」選擇:
  • 特定使用者 (IUSR)
  • 應用程式集區識別 (Application pool identity)

三、改用「應用程式集區識別」的影響分析
✅ 優點

1.安全性較佳(符合最小權限原則)
  • 每個應用程式集區有自己獨立的虛擬帳號,例如:IIS APPPOOL\MyAppPool
  • 不同網站間不再共用同一個 IUSR,避免橫向權限問題。
  • 依據 GCB 強化分權,這樣更能符合原則。
2.易於存取控制
  • 你可以在檔案或資料夾 NTFS 權限中,授權給特定集區帳號:IIS APPPOOL\MyAppPool → Read/Execute
  • 不會影響其他網站的存取。
3.相容於 GCB(政府組態基準)
  • 根據你提供的文件(TWGCB-04-014),該基準建議將匿名使用者改為應用程式集區識別,以確保隔離性與可稽核性。
潛在風險與注意事項

風險類型 說明 解決方式
檔案權限不足 若網站目錄 NTFS 權限僅授權給 IUSRUsers,改成集區帳號後會出現「401.3 - Unauthorized」或「403.14 Forbidden」。

敝人註:檔案上傳目錄要注意
需明確授權 IIS APPPOOL\<AppPoolName> 存取該目錄。
外部共用內容無法使用 若網站需要存取共用資料夾 (UNC path),集區識別為虛擬帳號時無法跨機器驗證。 改為使用 指定網域帳號 或建立對應服務帳號。
某些舊版 ASP.NET 或 Classic ASP 模組 若程式中明確檢查 IUSR,可能造成邏輯錯誤。

敝人註:若使用「ASP.ENT身份辨識機制 (ASP.NET Identity)」,功能可能異常,CODE要改;因 IUSR 和 IIS APPPOOL\<AppPoolName> 權限的回傳值不同
檢查程式邏輯,改以 User.Identity.IsAuthenticated 判斷。

四、最佳實務建議

項目 建議設定
匿名驗證帳號 應用程式集區識別
應用程式集區執行帳號 預設 ApplicationPoolIdentity(虛擬帳號)
網站資料夾權限 授權 IIS APPPOOL\<AppPoolName> 具備「讀取與執行」權限
若需跨伺服器資源 改以「自訂身分」帳號設定應用程式集區,避免匿名失敗

五、結論

問題 答案
將「匿名使用者識別」從 IUSR 改為「應用程式集區識別」會否產生問題? 在正確設定 NTFS 權限的前提下,不會產生問題。

敝人註:只說要正確設定,但沒說不需要變更設定、沒說不需要改CODE
是否建議修改? 是,且符合政府組態基準(GCB v1.1)建議。
是否會造成安全風險? ❌ 不會,相反地,它提高安全性與隔離性。
何時可能出問題? 只有在網站目錄權限未授權給該集區帳號,或應用需跨伺服器時。


敝人註IIS 設定變更要生效,可能需要重新啟動 IIS (甚至需要 Windows Reboot )

********************************************************************************
若使用到潛在風險與注意事項,建議多評估是否要變更為 GCB 建議,避免系統到處異常,CODE大改。

(完)