PowerShell Uzaktan İletişim’de ikinci atlamayı yapma
"İkinci atlama sorunu" aşağıdaki gibi bir duruma başvurur:
- ServerA'da oturum açtınız.
- ServerA'dan, SunucuB'ye bağlanmak için uzak bir PowerShell oturumu başlatırsınız.
- PowerShell uzaktan iletişim oturumunuz aracılığıyla ServerB'de çalıştırdığınız bir komut, ServerC'de bir kaynağa erişmeye çalışır.
- PowerShell Uzaktan İletişim oturumunu oluştururken kullandığınız kimlik bilgileri ServerB'den ServerC'ye geçirilmediğinden ServerC'de kaynağa erişim reddedildi.
Bu sorunu çözmenin birkaç yolu vardır. Aşağıdaki tabloda yöntemleri tercih sırasına göre listelemektedir.
Yapılandırma | Not |
---|---|
CredSSP | Kullanım kolaylığı ve güvenliği dengeler |
Kaynak tabanlı Kerberos kısıtlanmış temsili | Daha basit yapılandırma ile daha yüksek güvenlik |
Kerberos kısıtlanmış temsili | Yüksek güvenlik, ancak Etki Alanı Yönetici istrator gerektirir |
Kerberos temsilcisi (kısıtlanmamış) | Önerilmez |
Yeterli Yönetim (JEA) | En iyi güvenliği sağlayabilir ancak daha ayrıntılı yapılandırma gerektirir |
RunAs kullanarak PSSessionConfiguration | Yapılandırılması daha kolay ama kimlik bilgisi yönetimi gerekiyor |
Kimlik bilgilerini bir Invoke-Command betik bloğunun içine geçirme |
Kullanımı en basit ama kimlik bilgilerini sağlamanız gerekir |
CredSSP
Kimlik doğrulaması için Kimlik Bilgisi Güvenlik Destek Sağlayıcısı'nı (CredSSP) kullanabilirsiniz. CredSSP, kimlik bilgilerini uzak sunucuda (ServerB) önbelleğe alır, bu nedenle bunu kullanmak kimlik bilgisi hırsızlığı saldırılarına kadar sizi açar. Uzak bilgisayarın güvenliği aşılırsa, saldırganın kullanıcının kimlik bilgilerine erişimi olur. CredSSP hem istemci hem de sunucu bilgisayarlarında varsayılan olarak devre dışıdır. CredSSP'yi yalnızca en güvenilir ortamlarda etkinleştirmeniz gerekir. Örneğin, etki alanı denetleyicisi son derece güvenilir olduğundan etki alanı denetleyicisine bağlanan bir etki alanı yöneticisi.
PowerShell Uzaktan İletişimi için CredSSP kullanırken güvenlikle ilgili endişeler hakkında daha fazla bilgi için bkz . Yanlışlıkla Sabotaj: CredSSP'ye dikkat edin.
Kimlik bilgisi hırsızlığı saldırıları hakkında daha fazla bilgi için bkz . Karma Geçiş (PtH) Saldırılarını Azaltma ve Diğer Kimlik Bilgisi Hırsızlığı.
PowerShell uzaktan iletişim için CredSSP'yi etkinleştirme ve kullanma örneği için bkz . CredSSP ile PowerShell "İkinci Atlama" İşlevini Etkinleştirme.
Avantajlar
- Windows Server 2008 veya sonraki sürümleri olan tüm sunucularda çalışır.
Dezavantajlar
- Güvenlik açıkları vardır.
- hem istemci hem de sunucu rollerinin yapılandırılması gerekir.
- Korumalı Kullanıcılar grubuyla çalışmaz. Daha fazla bilgi için bkz . Korumalı Kullanıcılar Güvenlik Grubu.
Kerberos kısıtlanmış temsili
İkinci atlama için eski kısıtlanmış temsili (kaynak tabanlı değil) kullanabilirsiniz. Protokol geçişine izin vermek için Kerberos kısıtlanmış temsilini "Herhangi bir kimlik doğrulama protokolü kullan" seçeneğiyle yapılandırın.
Avantajlar
- Özel kodlama gerektirmez
- Kimlik bilgileri depolanmaz.
Dezavantajlar
- WinRM için ikinci atlama desteklenmez.
- Yapılandırmak için Etki Alanı Yönetici istrator erişimi gerektirir.
- Uzak sunucunun (ServerB) Active Directory nesnesinde yapılandırılmalıdır.
- Tek bir etki alanıyla sınırlıdır. Etki alanları veya ormanlar çapraz olamaz.
- Nesneleri ve Hizmet Asıl Adlarını (SPN) güncelleştirme hakları gerektirir.
- ServerB, kullanıcı müdahalesi olmadan kullanıcı adına ServerC'ye bir Kerberos bileti alabilir.
Not
Hesabı hassas olan ve temsilci seçilemedi özellik kümesine sahip Active Directory hesaplarına temsilci atanamaz. Daha fazla bilgi için, Ayrıcalıklı Hesaplar ve Kerberos Kimlik Doğrulama Araçları ve Ayarlar için Bkz. Güvenlik Odağı: 'Hesap hassas ve temsilci seçilemiyor' analizi.
Kaynak tabanlı Kerberos kısıtlanmış temsili
Kaynak tabanlı Kerberos kısıtlanmış temsilini (Windows Server 2012'de kullanıma sunulmuştur) kullanarak, kaynakların bulunduğu sunucu nesnesinde kimlik bilgisi temsilcisini yapılandırabilirsiniz. Yukarıda açıklanan ikinci atlama senaryosunda, ServerC'yi temsilci kimlik bilgilerini kabul ettiği yeri belirtecek şekilde yapılandıracaksınız.
Avantajlar
- Kimlik bilgileri depolanmaz.
- PowerShell cmdlet'leri kullanılarak yapılandırılır. Özel kodlama gerekmez.
- Yapılandırmak için Etki Alanı Yönetici istrator erişimi gerektirmez.
- Etki alanları ve ormanlar arasında çalışır.
Dezavantajlar
- Windows Server 2012 veya üzerini gerektirir.
- WinRM için ikinci atlama desteklenmez.
- Nesneleri ve Hizmet Asıl Adlarını (SPN) güncelleştirme hakları gerektirir.
Not
Hesabı hassas olan ve temsilci seçilemedi özellik kümesine sahip Active Directory hesaplarına temsilci atanamaz. Daha fazla bilgi için, Ayrıcalıklı Hesaplar ve Kerberos Kimlik Doğrulama Araçları ve Ayarlar için Bkz. Güvenlik Odağı: 'Hesap hassas ve temsilci seçilemiyor' analizi.
Örnek
ServerB'den temsilci kimlik bilgilerine izin vermek için ServerC'de kaynak tabanlı kısıtlanmış temsili yapılandıran bir PowerShell örneğine göz atalım. Bu örnekte, tüm sunucuların Windows Server'ın desteklenen sürümlerini çalıştırdığını ve her güvenilen etki alanı için en az bir Windows etki alanı denetleyicisi olduğunu varsayar.
Kısıtlanmış temsili yapılandırabilmeniz için önce Active Directory PowerShell modülünü RSAT-AD-PowerShell
yüklemek için özelliğini eklemeniz ve ardından bu modülü oturumunuza aktarmanız gerekir:
Add-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
Get-Command -ParameterName PrincipalsAllowedToDelegateToAccount
Kullanılabilir birkaç cmdlet'in principalsAllowedToDelegateToAccount parametresi vardır:
CommandType Name ModuleName
----------- ---- ----------
Cmdlet New-ADComputer ActiveDirectory
Cmdlet New-ADServiceAccount ActiveDirectory
Cmdlet New-ADUser ActiveDirectory
Cmdlet Set-ADComputer ActiveDirectory
Cmdlet Set-ADServiceAccount ActiveDirectory
Cmdlet Set-ADUser ActiveDirectory
PrincipalsAllowedToDelegateToAccount parametresi, hangi hesapların ilişkili hesaba kimlik bilgilerini devretme iznine sahip olduğunu belirten bir erişim denetimi listesi (ACL) içeren msDS-AllowedToActOnBehalfOfOtherIdentity Active Directory nesne özniteliğini ayarlar (örneğimizde, SunucuA için makine hesabı olacaktır).
Şimdi sunucuları temsil etmek için kullanacağımız değişkenleri ayarlayalım:
# Set up variables for reuse
$ServerA = $env:COMPUTERNAME
$ServerB = Get-ADComputer -Identity ServerB
$ServerC = Get-ADComputer -Identity ServerC
WinRM (ve dolayısıyla PowerShell uzaktan iletişim) varsayılan olarak bilgisayar hesabı olarak çalışır. Hizmetin StartName özelliğine winrm
bakarak bunu görebilirsiniz:
Get-CimInstance Win32_Service -Filter 'Name="winrm"' | Select-Object StartName
StartName
---------
NT AUTHORITY\NetworkService
ServerC'nin ServerB'de bir PowerShell uzaktan iletişim oturumundan temsilci seçmeye izin vermesi için, ServerC'de PrincipalsAllowedToDelegateToAccount parametresini ServerB'nin bilgisayar nesnesine ayarlamalıyız:
# Grant resource-based Kerberos constrained delegation
Set-ADComputer -Identity $ServerC -PrincipalsAllowedToDelegateToAccount $ServerB
# Check the value of the attribute directly
$x = Get-ADComputer -Identity $ServerC -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
$x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access
# Check the value of the attribute indirectly
Get-ADComputer -Identity $ServerC -Properties PrincipalsAllowedToDelegateToAccount
Kerberos Anahtar Dağıtım Merkezi (KDC), reddedilen erişim girişimlerini (negatif önbellek) 15 dakika boyunca önbelleğe alır. ServerB daha önce ServerC'ye erişmeye çalıştıysa, aşağıdaki komutu çağırarak ServerB önbelleğini temizlemeniz gerekir:
Invoke-Command -ComputerName $ServerB.Name -Credential $cred -ScriptBlock {
klist purge -li 0x3e7
}
Ayrıca bilgisayarı yeniden başlatabilir veya önbelleği temizlemek için en az 15 dakika bekleyebilirsiniz.
Önbelleği temizledikten sonra, ServerA'dan ServerB'den ServerC'ye kodu başarıyla çalıştırabilirsiniz:
# Capture a credential
$cred = Get-Credential Contoso\Alice
# Test kerberos double hop
Invoke-Command -ComputerName $ServerB.Name -Credential $cred -ScriptBlock {
Test-Path \\$($using:ServerC.Name)\C$
Get-Process lsass -ComputerName $($using:ServerC.Name)
Get-EventLog -LogName System -Newest 3 -ComputerName $($using:ServerC.Name)
}
Bu örnekte değişken, $using
değişkenin ServerB'ye görünür olmasını sağlamak $ServerC
için kullanılır.
Değişken hakkında $using
daha fazla bilgi için bkz . about_Remote_Variables.
Birden çok sunucunun ServerC'ye kimlik bilgileri atamasına izin vermek için ServerC'de PrincipalsAllowedToDelegateToAccount parametresinin değerini bir dizi olarak ayarlayın:
# Set up variables for each server
$ServerB1 = Get-ADComputer -Identity ServerB1
$ServerB2 = Get-ADComputer -Identity ServerB2
$ServerB3 = Get-ADComputer -Identity ServerB3
$ServerC = Get-ADComputer -Identity ServerC
$servers = @(
$ServerB1,
$ServerB2,
$ServerB3
)
# Grant resource-based Kerberos constrained delegation
Set-ADComputer -Identity $ServerC -PrincipalsAllowedToDelegateToAccount $servers
Etki alanları arasında ikinci atlama yapmak istiyorsanız, ServerB'nin ait olduğu etki alanının etki alanı denetleyicisinin tam etki alanı adını (FQDN) belirtmek için Sunucu parametresini kullanın:
# For ServerC in Contoso domain and ServerB in other domain
$ServerB = Get-ADComputer -Identity ServerB -Server dc1.alpineskihouse.com
$ServerC = Get-ADComputer -Identity ServerC
Set-ADComputer -Identity $ServerC -PrincipalsAllowedToDelegateToAccount $ServerB
Kimlik bilgilerini ServerC'ye devretme özelliğini kaldırmak için ServerC'de PrincipalsAllowedToDelegateToAccount parametresinin değerini olarak $null
ayarlayın:
Set-ADComputer -Identity $ServerC -PrincipalsAllowedToDelegateToAccount $null
Kaynak tabanlı Kerberos kısıtlanmış temsili hakkında bilgi
- Kerberos Kimlik Doğrulamasındaki Yenilikler
- Windows Server 2012 Kerberos Kısıtlanmış TemsilInin Acısını Nasıl Hafifletir, Bölüm 1
- Windows Server 2012 Kerberos Kısıtlanmış Temsilinin Acısını Nasıl Hafifletir, Bölüm 2
- Tümleşik Windows Kimlik Doğrulaması ile Microsoft Entra uygulama ara sunucusu dağıtımları için Kerberos Kısıtlanmış Temsilini Anlama
- [MS-ADA2 Active Directory Şema Öznitelikleri M2.210 Özniteliği msDS-AllowedToActOnBehalfOfOtherIdentity]MS-ADA2
- [MS-SFU Kerberos Protokolü Uzantıları: Kullanıcı için Hizmet ve Kısıtlanmış Temsil Protokolü 1.3.2 S4U2proxy]MS-SFU
- PrincipalsAllowedToDelegateToAccount Kullanılarak Kısıtlanmış Temsil Olmadan Uzaktan Yönetici
Kerberos temsilcisi (kısıtlanmamış)
İkinci atlama için Kerberos kısıtlanmamış temsili de kullanabilirsiniz. Tüm Kerberos senaryolarında olduğu gibi kimlik bilgileri de depolanmaz. Bu yöntem WinRM için ikinci atlamayı desteklemez.
Uyarı
Bu yöntem, temsilci kimlik bilgilerinin nerede kullanıldığına dair bir denetim sağlamaz. CredSSP'den daha az güvenlidir. Bu yöntem yalnızca test senaryoları için kullanılmalıdır.
Yeterli Yönetim (JEA)
JEA, bir yöneticinin PowerShell oturumu sırasında çalıştırabileceği komutları kısıtlamanıza olanak tanır. İkinci atlama sorununu çözmek için kullanılabilir.
JEA hakkında bilgi için bkz. Just Enough Yönetici istration.
Avantajlar
- Sanal hesap kullanılırken parola bakımı yapılmaz.
Dezavantajlar
- WMF 5.0 veya üzerini gerektirir.
- Her ara sunucuda (ServerB) yapılandırma gerektirir.
RunAs kullanarak PSSessionConfiguration
ServerB'de bir oturum yapılandırması oluşturabilir ve RunAsCredential parametresini ayarlayabilirsiniz.
İkinci atlama sorununu çözmek için PSSessionConfiguration ve RunAs kullanma hakkında bilgi için bkz. Çok atlamalı PowerShell uzaktan iletişiminin başka bir çözümü.
Avantajlar
- WMF 3.0 veya sonraki bir sürümü olan tüm sunucularla çalışır.
Dezavantajlar
- Her ara sunucuda (ServerB) PSSessionConfiguration ve RunA'ların yapılandırılmasını gerektirir.
- Etki alanı RunAs hesabı kullanılırken parola bakımı gerektirir
Kimlik bilgilerini Invoke-Command betik bloğu içinde geçirme
Invoke-Command cmdlet'ine bir çağrının ScriptBlock parametresi içinde kimlik bilgilerini geçirebilirsiniz.
Avantajlar
- Özel sunucu yapılandırması gerektirmez.
- WMF 2.0 veya üzerini çalıştıran tüm sunucularda çalışır.
Dezavantajlar
- Garip bir kod tekniği gerektirir.
- WMF 2.0 çalıştırılıyorsa, bağımsız değişkenleri uzak oturuma geçirmek için farklı söz dizimi gerekir.
Örnek
Aşağıdaki örnekte, kimlik bilgilerinin bir betik bloğuna nasıl ilettiği gösterilmektedir:
# This works without delegation, passing fresh creds
# Note $Using:Cred in nested request
$cred = Get-Credential Contoso\Administrator
Invoke-Command -ComputerName ServerB -Credential $cred -ScriptBlock {
hostname
Invoke-Command -ComputerName ServerC -Credential $Using:cred -ScriptBlock {hostname}
}
Ayrıca bkz.
PowerShell