在 Windows PowerShell 中啟用多躍點遠端
遠端作業的另一項挑戰與跨多個遠端連線委派認證相關。 根據預設,只能透過一個連線或躍點委派認證。 這項委派限制可防止遠端電腦進一步委派您的認證,因為這可能會導致額外的安全性風險。
一般而言,下方是我們想要解決的案例:
- 您已登入 ServerA。
- 從 ServerA 開啟一個遠端 PowerShell 工作階段,以連線至 ServerB。
- 您透過 PowerShell 遠端工作階段在 ServerB 上執行的命令會嘗試存取 ServerC 上的資源。
- ServerC 上的資源存取遭拒,因為您用來建立 PowerShell 遠端工作階段的認證未從 ServerB 傳遞至 ServerC。
在實際執行環境中時常會發生需要執行多個躍點 (或多躍點) 委派的情況。 例如,某些組織不允許系統管理員直接從其用戶端電腦連線到資料中心的伺服器。 系統管理員反而必須連線到中繼閘道或跳躍伺服器,然後從該處連線到其要管理的伺服器。 遠端功能在其預設組態中不允許這種方法。 當您連線到遠端電腦之後,您的認證就不能比遠端電腦取得更高的權限。 嘗試存取任何不位於該電腦上的資源,通常會導致失敗,因為您的存取未隨附認證。 解決方案是啟用認證安全性支援提供者 (CredSSP)。
啟用 CredSSP
CredSSP 會快取遠端伺服器上的認證 (來自上述範例的 ServerB)。 因此,您應該留意,使用 CredSSP 會使您容易遭到潛在的認證竊取攻擊。 如果遠端電腦遭到入侵,攻擊者就能存取使用者的認證。 用戶端和伺服器電腦上的 CredSSP 都預設停用。 只有在最受信任的環境中才應啟用 CredSSP。 例如,由於網域控制站高度受到信任,因此連線到網域控制站的網域系統管理員可以啟用 CredSSP。
您必須在起始電腦 (稱為 用戶端) 以及在接收電腦 (稱為 伺服器) 上啟用 CredSSP 通訊協定。 這樣做可讓接收電腦委派您的認證,啟用另一個躍點。
若要設定用戶端,請執行下列命令,並以能夠重新委派認證的伺服器名稱取代 servername:
Enable-WsManCredSSP –Role Client –Delegate servername
該伺服器名稱可以包含萬用字元。 不過,使用星號的 (*
) 萬用字元條件太寬鬆,因為您會讓任何電腦,甚至是未經授權的使用者重新委派認證。 請考慮有限的萬用字元模式作為替代,例如 *.ADATUM.com,這會限制重新委派該網域中的電腦。
若要設定伺服器,請執行 Enable-WsManCredSSP –Role Server。 伺服器上不需要任何委派的電腦清單。 您也可以透過群組原則來設定這些組態,以在整個企業中提供更集中且一致的設定。
注意
使用 CredSSP 時發生過許多安全性缺口紀錄,因此使用 CredSSP 不再是偏好的選項。 您應該改用限制委派。
以資源為基礎的 Kerberos 限制委派
從 Windows Server 2012 開始,您可以放棄使用 CredSSP,並改用限制委派。 限制委派使用安全性描述元來實作服務票證的委派,而不是允許的伺服器名稱清單。 這可讓資源判斷哪些安全性主體可以代表另一位使用者要求票證。 無論網域功能等級為何,資源型限制委派都能正常運作。
限制委派需求如下:
- 存取網域控制站,其與執行 Windows PowerShell 遠端命令的主機電腦位於相同網域之中。
- 在裝載您嘗試從中繼遠端伺服器存取之遠端伺服器的網域中,存取網域控制站。
設定權限的程式碼需要使用 Active Directory PowerShell 遠端伺服器管理工具 (RSAT) 執行 Windows Server 的電腦。 您可以執行下列兩個命令,將 RSAT 新增為 Windows 功能:
Add-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
若要將以資源為基礎的 Kerberos 限制委派授與 LON-SVR1 到 LON-SVR2 到 LON-SVR3,請執行下列命令:
Set-ADComputer -Identity LON-SVR2 -PrincipalsAllowedToDelegateToAccount LON-SVR3
有個問題可能會導致此命令失敗。 金鑰發佈中心 (KDC) 有 15 分鐘的服務主體名稱 (SPN) 負快取。 如果 LON-SVR2 已嘗試與 LON-SVR3 通訊,則會出現負快取輸入。 您必須使用下列其中一種技術來清除 LON-SVR2 上的快取:
- 執行
klist purge -li 0x3e7
命令。 這是偏好且最快速的方法。 - 請等候 15 分鐘讓快取自動清除。
- 重新啟動 LON-SVR2。
若要測試限制委派,請執行下列程式碼範例:
$cred = Get-Credential Adatum\TestUser
Invoke-Command -ComputerName LON-SVR1.Name -Credential $cred -ScriptBlock {Test-Path \\$($using:ServerC.Name)\C$ `
Get-Process lsass -ComputerName $($using:LON-SVR2.Name)
Get-EventLog -LogName System -Newest 3 -ComputerName $using:LON-SVR3.Name
}
Just Enough Administration
恰到好處的系統管理 (JEA) 是安全性技術,允許委派管理 PowerShell 管理的任何項目。 透過 JEA,您可以:
- 使用虛擬帳戶或群組受控服務帳戶來代表一般使用者執行特殊權限動作,以減少電腦上的系統管理員數目。
- 指定使用者可以執行的 Cmdlet、函式及外部命令,以限制使用者可以執行的工作。
- 透過檢閱文字記錄和記錄檔,顯示使用者在工作階段期間執行的確切命令,以深入了解使用者正在執行的工作。
用來管理伺服器的高度特殊權限帳戶會造成嚴重的安全性風險。 萬一攻擊者入侵其中一個帳戶,其便可以對整個組織啟動橫向攻擊。 每個遭入侵的帳戶都能讓攻擊者存取更多帳戶和資源,讓他們進一步竊取公司祕密、啟動拒絕服務 (DOS) 的攻擊等。
移除系統管理權限也不一定容易。 請考慮常見的案例:DNS 角色安裝在與您 Active Directory 網域控制站相同的電腦上。 您的 DNS 系統管理員需要有本機系統管理員權限才能修正 DNS 伺服器的問題。 但若要這樣做,您必須讓其成為具高度權限的系統管理員安全性群組成員。 這個方法能有效地讓 DNS 系統管理員取得控制整個網域的能力,並存取該電腦上的所有資源。
JEA 透過最低權限原則解決此問題。 透過 JEA,您可以為 DNS 系統管理員設定管理端點,以便他們只存取完成工作所需的 PowerShell 命令。 這表示您可以提供適當的存取權來修復有害的 DNS 快取或重新啟動 DNS 伺服器,而不會在無意中授與他們 Active Directory、瀏覽檔案系統或執行潛在危險指令碼的權限。 更棒的是,當 JEA 工作階段設定為使用暫時性特殊權限虛擬帳戶時,您的 DNS 系統管理員仍可以在使用非管理員認證連線到伺服器的情況下,執行通常需要系統管理權限的命令。 JEA 可讓您從廣泛權限的本機或網域系統管理員角色移除使用者,且小心控制使用者能夠在每部電腦上執行的事項。
JEA 是 PowerShell 5.0 和更新版本中所包含的功能。 如需完整的功能,您應該為系統安裝最新版本的 PowerShell。 PowerShell 遠端可提供建置 JEA 的基礎。 您必須先確定 PowerShell 遠端已啟用並受到適當保護,才能使用 JEA。
建立 JEA 端點時,您必須定義一或多個角色功能,以描述某人在 JEA 工作階段中可以執行的動作。 角色功能是具有 .psrc 副檔名的 PowerShell 資料檔案,列出可供連線使用者使用的所有 Cmdlet、函數、提供者,以及外部程式。
您可以使用 New-PSRoleCapabilityFile Cmdlet 建立新的 PowerShell 角色功能檔案。 您應編輯產生的角色功能檔案,以允許該角色所需的命令。 PowerShell 說明文件包含數個有關如何設定檔案的範例。