為什麼 MS GPO 選項會破壞使用主機文件作為機器名稱的 SMB 共享?
我們在測試 GPO 上將“ Microsoft 網路伺服器:伺服器 SPN 目標名稱驗證級別”設置為“客戶端需要”。
我們的測試系統在它們的主機文件中有一些自定義機器別名,但是一旦打開該選項,我們就不能再使用機器別名訪問 SMB 共享。
我一直在努力尋找有關這種互動的資訊,所以希望有人能夠在這裡解釋這種互動,是否有辦法補救?
這與“主機”文件無關——它破壞了通過**與伺服器“真實”名稱不同的主機名訪問的共享。**您的結果是正常的,因為這實際上是 GPO 的全部目的。
有問題的 GPO 很像在某些 Web 伺服器中發現的 TLS SNI 強制執行:客戶端聲明“我在這裡與伺服器 SRV01.EXAMPLE.COM 交談”並且如果伺服器不將該名稱辨識為虛擬主機之一它服務,它完全拒絕客戶。因此,如果客戶端聲明它想與您的 /etc/hosts 別名之一交談,但伺服器不知道別名,它會拒絕客戶端。
Kerberos 已經內置了類似的強制措施(這就是為什麼您需要使用 為別名註冊 SPN
setspn
),但 GPO 使其更加嚴格*,*並將相同的保護擴展到 NTLM。(正如文件頁面中已經提到的,這應該防止 NTLM 中繼攻擊,其中惡意伺服器 A 接受 NTLM 身份驗證,然後將完全相同的 NTLM 數據包轉發到真實伺服器 B - 攻擊將被阻止,因為伺服器 B 會看到“我想從客戶端與伺服器 A" 交談。)
仍然可以使用主機別名,但它需要越來越多的系統資料庫旋鈕。官方的方法是
netdom computername REALHOST /add:THEALIAS
像在這篇 TechNet 文章中那樣使用,我發現部落格文章聲稱即使經過嚴格的 SPN 驗證也足以使別名可用,但似乎還不夠——至少有一個如果不是它忘記觸摸的兩個系統資料庫值。
- NETDOM 為 AD 中的別名註冊Kerberos SPN,允許為其獲取 Kerberos 票證,類似於手動發出以下兩個命令:
setspn -S HOST/THEALIAS REALHOST$ setspn -S HOST/thealias.example.com REALHOST$
這是 Kerberos 所必需的,沒有理由不在 AD 環境中使用 Kerberos,因此無論您選擇使用 NETDOM 還是手動操作,您都應該註冊別名 SPN。
(從技術上講,SMB 使用“cifs/”主體,但在 AD 中,只要註冊了“host/”SPN,它們就會隱式出現。) 2. 然後 NETDOM 在伺服器系統資料庫的兩個位置添加別名,導致伺服器在 AD DNS 中註冊其附加名稱並通過 NetBIOS 瀏覽器宣布它們:
- 路徑:
HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
名稱:
AlternateComputerNames
類型:REG_MULTI_SZ
數據:{
thealias.example.com
}
- 路徑:
HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
名稱:
OptionalNames
類型:REG_MULTI_SZ
數據:{
THEALIAS
}它們似乎對身份驗證沒有任何影響(甚至沒有 Kerberos),所以我相信如果您使用 /etc/hosts 或在 DNS 中創建手動 CNAME 記錄,這兩者都是完全可選的。 3. NETDOM沒有創建的另一個參數是:
- 路徑:
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
名稱:
BackConnectionHostNames
類型:REG_MULTI_SZ
數據:{
thealias.example.com
}這個僅用於“環回”連接,因此通常可能不是絕對必要的,但至少在我的情況下,伺服器確實需要連接到自己的別名,因此需要設置。 4. 最後,我發現“SPN 目標名稱驗證”功能有自己的允許名稱列表,必須手動更新 - 否則即使存在上述所有設置,別名也會由於嚴格的 SPN 驗證而被拒絕:
- 路徑:
HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
名稱: 類型:REG_MULTI_SZ 數據:{ , }
SrvAllowedServerNames
THEALIAS``thealias.example.com
您需要同時列出每個別名的短名稱和FQDN——根據我的實驗,列出一個並不會自動暗示另一個。註冊 Kerberos SPN 並設置
SrvAllowedServerNames
系統資料庫值後,即使經過嚴格的目標驗證,別名也應該最終正常工作。