Aracılığıyla paylaş


JEA Rol Yetenekleri

JEA uç noktası oluştururken, birinin JEA oturumunda neler yapabileceğini açıklayan bir veya daha fazla rol özelliği tanımlamanız gerekir. Rol özelliği, kullanıcıların bağlanması için kullanıma sunulan tüm cmdlet'leri, işlevleri, sağlayıcıları ve dış programları listeleyen uzantılı bir PowerShell veri dosyasıdır .psrc .

Hangi komutlara izin verileceğini belirleme

Rol yeteneği dosyası oluşturmanın ilk adımı, kullanıcıların neye erişmesi gerektiğini göz önünde bulundurmaktır. Gereksinimleri toplama süreci biraz zaman alabilir, ancak bu önemlidir. Kullanıcılara çok az cmdlet'e ve işleve erişim vermek, işlerini yapmalarını engelleyebilir. Çok fazla cmdlet'e ve işleve erişime izin vermek, kullanıcıların istediğinizden daha fazlasını yapmalarını ve güvenlik duruşunuzu zayıflatmalarını sağlayabilir.

Bu süreci nasıl ilerletdiğiniz kuruluşunuza ve hedeflerinize bağlıdır. Aşağıdaki ipuçları doğru yolda olduğunuzdan emin olmanıza yardımcı olabilir.

  1. Kullanıcıların işlerini yapmak için kullandığı komutları belirleyin. Bu, BT personelini araştırmayı, otomasyon betiklerini denetlemeyi veya PowerShell oturum transkriptlerini ve günlüklerini analiz etmeyi içerebilir.
  2. Mümkün olduğunda en iyi denetim ve JEA özelleştirme deneyimi için komut satırı araçlarının kullanımını PowerShell eşdeğerlerine güncelleştirin. Dış programlar JEA'daki yerel PowerShell cmdlet'leri ve işlevleri kadar ayrıntılı olarak kısıtlanamaz.
  3. Cmdlet'lerin kapsamını yalnızca belirli parametrelere veya parametre değerlerine izin verecek şekilde kısıtlayın. Bu özellikle kullanıcıların sistemin yalnızca bir bölümünü yönetmesi gerekiyorsa önemlidir.
  4. JEA'da kısıtlaması zor olan karmaşık komutları veya komutları değiştirmek için özel işlevler oluşturun. Karmaşık bir komutu sarmalayan veya ek doğrulama mantığı uygulayan basit bir işlev, yöneticiler ve son kullanıcı basitliği için ek denetim sunabilir.
  5. Kullanıcılarınızla veya otomasyon hizmetlerinizle izin verilebilen komutların kapsamlı listesini test edin ve gerektiği gibi ayarlayın.

Tehlikeli olabilecek komut örnekleri

JEA uç noktasının kullanıcının izinlerini yükseltmesine izin vermediğinden emin olmak için komutların dikkatli bir şekilde seçilmesi önemlidir.

Önemli

Kullanıcı başarısı için gerekli temel bilgiler. Bir JEA oturumundaki komutlar genellikle yükseltilmiş ayrıcalıklarla çalıştırılır.

Aşağıdaki listede, kısıtlanmamış durumda izin verilirse kötü amaçlı olarak kullanılabilecek komut örnekleri yer alır. Bu kapsamlı bir liste değildir ve yalnızca dikkatli bir başlangıç noktası olarak kullanılmalıdır.

  • Risk: Bağlanan kullanıcıya JEA'yı atlamak için yönetici ayrıcalıkları verilmesi riski

    Örnek:

    Add-LocalGroupMember -Member 'CONTOSO\jdoe' -Group 'Administrators'
    

    İlgili komutlar:

    • Add-ADGroupMember
    • Add-LocalGroupMember
    • net.exe
    • dsadd.exe
  • Risk: Korumaları atlamak için kötü amaçlı yazılım, açıklardan yararlanma veya özel betikler gibi rastgele kod çalıştırma

    Örnek:

    Start-Process -FilePath '\\san\share\malware.exe'
    

    İlgili komutlar:

    • Start-Process
    • New-Service
    • Invoke-Item
    • Invoke-WmiMethod
    • Invoke-CimMethod
    • Invoke-Expression
    • Invoke-Command
    • New-ScheduledTask
    • Register-ScheduledJob

Rol yetenek dosyası oluşturma

New-PSRoleCapabilityFile cmdlet'iyle yeni bir PowerShell rol yetenek dosyası oluşturabilirsiniz.

New-PSRoleCapabilityFile -Path .\MyFirstJEARole.psrc

Oluşturulan rol yetenek dosyasını yalnızca rol için gerekli komutlara izin verecek şekilde düzenlemeniz gerekir. PowerShell yardım belgeleri, dosyayı nasıl yapılandırabileceğinize ilişkin birkaç örnek içerir.

PowerShell cmdlet'lerine ve işlevlerine izin verme

Kullanıcıları PowerShell cmdlet'lerini veya işlevlerini çalıştırma yetkisi vermek için, cmdlet'i veya işlev adını VisibleCmdlet'ler veya VisibleFunctions alanlarına ekleyin. Komutun bir cmdlet mi yoksa işlev mi olduğundan emin değilseniz, komutunu çalıştırabilir Get-Command <name> ve çıktıdaki CommandType özelliğini de kontrol edebilirsiniz.

VisibleCmdlets = @('Restart-Computer', 'Get-NetIPAddress')

Bazen belirli bir cmdlet'in veya işlevin kapsamı kullanıcılarınızın ihtiyaçlarına göre çok geniş olabilir. Örneğin bir DNS yöneticisinin yalnızca DNS hizmetini yeniden başlatmak için erişimi olabilir. Çok kiracılı ortamlarda kiracılar self servis yönetim araçlarına erişebilir. Kiracılar kendi kaynaklarını yönetmeyle sınırlı olmalıdır. Bu durumlarda, cmdlet veya işlevden hangi parametrelerin gösterilip gösterilmeyebileceğini kısıtlayabilirsiniz.

VisibleCmdlets = @{
    Name       = 'Restart-Computer'
    Parameters = @{ Name = 'Name' }
}

Daha gelişmiş senaryolarda, bir kullanıcının bu parametrelerle kullanabileceği değerleri de kısıtlamanız gerekebilir. Rol özellikleri, hangi girişe izin verileceğini belirleyen bir değer kümesi veya normal ifade deseni tanımlamanıza olanak sağlar.

VisibleCmdlets = @(
    @{
        Name       = 'Restart-Service'
        Parameters = @{ Name = 'Name'; ValidateSet = @('Dns', 'Spooler') }
    }
    @{
        Name       = 'Start-Website'
        Parameters = @{ Name = 'Name'; ValidatePattern = 'HR_*' }
    }
)

Uyarı

Kullanılabilir parametreleri kısıtlasanız bile ortak PowerShell parametrelerine her zaman izin verilir. Bunları Parametreler alanında açıkça listelememelisiniz.

Aşağıdaki listede, görünür bir cmdlet'i veya işlevi özelleştirmenin çeşitli yolları açıklanmaktadır. VisibleCmdlets alanında aşağıdakilerden herhangi birini karıştırabilir ve eşleştirebilirsiniz.

  • Kullanım örneği: Kullanıcının parametreler üzerinde herhangi bir kısıtlama olmadan çalışmasına My-Func izin verin.

    @{ Name = 'My-Func' }
    
  • Kullanım örneği: Kullanıcının parametreler üzerinde herhangi bir kısıtlama olmadan My-Func modülünden çalışmasına izin verin.

    @{ Name = 'MyModule\My-Func' }
    
  • Kullanım örneği: Kullanıcının fiil Myile herhangi bir cmdlet'i veya işlevi çalıştırmasına izin verin.

    @{ Name = 'My-*' }
    
  • Kullanım örneği: Kullanıcının adıyla Funcherhangi bir cmdlet'i veya işlevi çalıştırmasına izin verin.

    @{ Name = '*-Func' }
    
  • Kullanım örneği: Kullanıcıya My-Func çalıştırmasına ve Param1 ile Param2 parametrelerini kullanmasına izin verin. Parametrelere herhangi bir değer sağlanabilir.

    @{ Name = 'My-Func'; Parameters = @{ Name = 'Param1'}, @{ Name = 'Param2' }}
    
  • Kullanım örneği: Kullanıcının My-Func parametresiyle Param1 çalıştırmasına izin verin. parametresine yalnızca Value1 ve Value2 sağlanabilir.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidateSet = @('Value1', 'Value2') }
    }
    
  • Kullanım örneği: Kullanıcının My-Func parametresiyle Param1 çalıştırmasına izin verin. ile contoso başlayan herhangi bir değer parametresine sağlanabilir.

    @{
        Name       = 'My-Func'
        Parameters = @{ Name = 'Param1'; ValidatePattern = 'contoso.*' }
    }
    

Uyarı

En iyi güvenlik uygulamaları için görünür cmdlet'leri veya işlevleri tanımlarken joker karakterlerin kullanılması önerilmez. Bunun yerine, aynı adlandırma düzenini paylaşan diğer komutların istemeden yetkilendirilmediğinden emin olmak için her güvenilen komutu açıkça listelemeniz gerekir.

Aynı cmdlet'e veya işleve hem ValidatePattern hem de ValidateSet uygulayamazsınız.

Bunu yaparsanız ValidatePattern , ValidateSet'i geçersiz kılar.

ValidatePattern hakkında daha fazla bilgi için bu Hey, Scripting Guy! gönderisine ve PowerShell Normal İfadeleri başvuru içeriğine göz atın.

Dış komutlara ve PowerShell betiklerine izin verme

Kullanıcıların jea oturumunda yürütülebilir dosyaları ve PowerShell betiklerini (.ps1) çalıştırmasına izin vermek için , VisibleExternalCommands alanındaki her programa tam yolu eklemeniz gerekir.

VisibleExternalCommands = @(
    'C:\Windows\System32\whoami.exe'
    'C:\Program Files\Contoso\Scripts\UpdateITSoftware.ps1'
)

Mümkün olduğunda, PowerShell cmdlet'leri ve işlevleriyle izin verilen parametreler üzerinde denetime sahip olduğunuzdan yetkilendirildiğiniz tüm dış yürütülebilir dosyalar için PowerShell cmdlet'ini veya işlev eşdeğerlerini kullanın.

Birçok yürütülebilir dosya, geçerli durumu okumanıza ve ardından farklı parametreler sağlayarak değiştirmenize olanak sağlar.

Örneğin, bir sistemde barındırılan ağ paylaşımlarını yöneten bir dosya sunucusu yöneticisinin rolünü göz önünde bulundurun. Paylaşımları yönetmenin bir yolu kullanmaktır net share. Ancak, net.exe izni vermek tehlikelidir çünkü kullanıcı, net group Administrators unprivilegedjeauser /add komutuyla yönetici ayrıcalıkları kazanabilir. Daha güvenli bir seçenek, aynı sonucu elde eden ancak çok daha sınırlı bir kapsama sahip olan Get-SmbShare cmdlet'ine izin vermektir.

Dış komutları bir JEA oturumunda kullanıcıların kullanımına açarken her zaman yürütülebilir dosyanın tam yolunu belirtin. Bu, sistemin başka bir yerinde bulunan benzer adlandırılmış ve kötü amaçlı olabilecek programların yürütülmesini engeller.

PowerShell sağlayıcılarına erişime izin verme

Varsayılan olarak, JEA oturumlarında hiçbir PowerShell sağlayıcısı kullanılamaz. Bu, hassas bilgilerin ve yapılandırma ayarlarının bağlanan kullanıcıya ifşa edilme riskini azaltır.

Gerektiğinde komutunu kullanarak VisibleProviders PowerShell sağlayıcılarına erişime izin vekleyebilirsiniz. Sağlayıcıların tam listesi için komutunu çalıştırın Get-PSProvider.

VisibleProviders = 'Registry'

Dosya sistemine, kayıt defterine, sertifika deposuna veya diğer hassas sağlayıcılara erişim gerektiren basit görevler için, kullanıcı adına sağlayıcıyla birlikte çalışan özel bir işlev yazmayı göz önünde bulundurun. JEA oturumunda kullanılabilen işlevler, cmdlet'ler ve dış programlar JEA ile aynı kısıtlamalara tabi değildir. Varsayılan olarak herhangi bir sağlayıcıya erişebilirler. Ayrıca, kullanıcıların jea uç noktasına veya jea uç noktasından dosya kopyalaması gerektiğinde kullanıcı sürücüsünü kullanmayı da göz önünde bulundurun.

Özel işlevler oluşturma

Son kullanıcılarınız için karmaşık görevleri basitleştirmek için bir rol yetenek dosyasında özel işlevler yazabilirsiniz. Özel işlevler, cmdlet parametre değerleri için gelişmiş doğrulama mantığına ihtiyaç duyduğunuzda da kullanışlıdır. FunctionDefinitions alanına basit işlevler yazabilirsiniz:

VisibleFunctions = 'Get-TopProcess'

FunctionDefinitions = @{
    Name        = 'Get-TopProcess'
    ScriptBlock = {
        param($Count = 10)

        Get-Process |
            Sort-Object -Property CPU -Descending |
            Microsoft.PowerShell.Utility\Select-Object -First $Count
    }
}

Önemli

JEA kullanıcıları tarafından çalıştırılabilmeleri için özel işlevlerinizin adını VisibleFunctions alanına eklemeyi unutmayın.

Özel işlevlerin gövdesi (betik bloğu) sistem için varsayılan dil modunda çalışır ve JEA'nın dil kısıtlamalarına tabi değildir. Bu, işlevlerin dosya sistemine ve kayıt defterine erişebileceği ve rol yetenek dosyasında görünür yapılmamış komutları çalıştırabileceği anlamına gelir. Parametreleri kullanırken rastgele kod çalıştırmaktan kaçınmaya dikkat edin. kullanıcı girişini Invoke-Expression gibi cmdlet'lere doğrudan aktarmaktan kaçının.

Yukarıdaki örnekte, kısaltma Microsoft.PowerShell.Utility\Select-Objectyerine tam modül adının (FQMN) Select-Object kullanıldığına dikkat edin. Rol özelliği dosyalarında tanımlanan işlevler, JEA'nın mevcut komutları kısıtlamak için oluşturduğu proxy işlevlerini içeren JEA oturumlarının kapsamına tabidir.

Varsayılan olarak, Select-Object tüm JEA oturumlarında nesneler üzerinde rastgele özelliklerin seçilmesine izin verilmeyen kısıtlanmış bir cmdlet'tir. Kısıtlanmamış Select-Object işlevleri kullanmak için FQMN kullanarak tam uygulamayı açıkça istemeniz gerekir. Bir JEA oturumundaki kısıtlanmış cmdlet, bir işlevden çağrıldığında aynı kısıtlamalara sahiptir. Daha fazla bilgi için bkz. about_Command_Precedence.

Birkaç özel işlev yazıyorsanız, bunları bir PowerShell betik modülüne yerleştirmek daha uygundur. Yerleşik ve üçüncü taraf modüllerde yaptığınız gibi VisibleFunctions alanını kullanarak bu işlevleri JEA oturumunda görünür hale getirirsiniz.

Sekme tamamlamanın JEA oturumlarında düzgün çalışması için TabExpansion2 listesine yerleşik işlevi eklemeniz gerekir.

Rol özelliklerini yapılandırma için kullanılabilir hale getirme

PowerShell 6'ya başlamadan önce, PowerShell'in rol yetenek dosyasını bulması için powershell modülündeki bir RoleCapabilities klasörde depolanması gerekir. Modül, ortam değişkenine $Env:PSModulePath dahil edilen herhangi bir klasörde depolanabilir, ancak bu $Env:SystemRoot\System32 modülü veya güvenilmeyen kullanıcıların dosyaları değiştirebileceği bir klasöre yerleştirmemeniz gerekir.

Aşağıdaki örnek, rol yetenekleri dosyasını barındırmak için yolunda $Env:ProgramFiles adlı bir PowerShell betik modülü oluşturur.

# Create a folder for the module
$modulePath = Join-Path $Env:ProgramFiles "WindowsPowerShell\Modules\ContosoJEA"
New-Item -ItemType Directory -Path $modulePath

# Create an empty script module and module manifest.
# At least one file in the module folder must have the same name as the folder itself.
$rootModulePath = Join-Path $modulePath "ContosoJEAFunctions.psm1"
$moduleManifestPath = Join-Path $modulePath "ContosoJEA.psd1"
New-Item -ItemType File -Path $RootModulePath
New-ModuleManifest -Path $moduleManifestPath -RootModule "ContosoJEAFunctions.psm1"

# Create the RoleCapabilities folder and copy in the PSRC file
$rcFolder = Join-Path $modulePath "RoleCapabilities"
New-Item -ItemType Directory $rcFolder
Copy-Item -Path .\MyFirstJEARole.psrc -Destination $rcFolder

PowerShell modülleri hakkında daha fazla bilgi için bkz. PowerShell Modülünü Anlama.

PowerShell 6'dan başlayarak RoleDefinitions özelliği oturum yapılandırma dosyasına eklendi. Bu özellik, rol tanımınız için rol yapılandırma dosyasının konumunu belirtmenize olanak tanır. New-PSSessionConfigurationFile içindeki örneklere bakın.

Rol özelliklerini güncelleştirme

İstediğiniz zaman ayarları güncelleştirmek için bir rol yetenek dosyasını düzenleyebilirsiniz. Rol özelliği güncelleştirildikten sonra başlatılan tüm yeni JEA oturumları, düzeltilen özellikleri yansıtır.

Bu nedenle rol özellikleri klasörüne erişimi denetlemek çok önemlidir. Rol özelliği dosyalarını yalnızca yüksek oranda güvenilen yöneticilerin değiştirmesine izin verilmelidir. Güvenilmeyen bir kullanıcı rol yeteneği dosyalarını değiştirebiliyorsa, ayrıcalıklarını yükseltmesine olanak tanıyan cmdlet'lere kendilerine kolayca erişim sağlayabilir.

Rol özelliklerine erişimi kilitlemek isteyen yöneticiler için Yerel Sistem'in rol özelliği dosyalarına ve modüller içeren dosyalara salt okunur erişimi olduğundan emin olun.

Rol özellikleri nasıl birleştirilir?

Bir JEA oturumuna giren kullanıcılara oturum yapılandırma dosyasındaki tüm eşleşen rol özelliklerine erişim verilir. JEA, kullanıcıya rollerden herhangi birinin izin verdiği en izinli komut kümesini vermeye çalışır.

VisibleCmdlet'ler ve VisibleFunctions

En karmaşık birleştirme mantığı, cmdlet'leri ve işlevleri etkiler ve bunların parametreleri ile parametre değerleri JEA'da sınırlıdır.

Kurallar aşağıdaki gibidir:

  1. Bir cmdlet yalnızca bir rolde görünür hale getiriliyorsa, her türlü geçerli parametre kısıtlamasına rağmen kullanıcıya görünür olur.
  2. Bir cmdlet birden fazla rolde görünür hale getiriliyorsa ve her rol cmdlet'inde aynı kısıtlamalara sahipse, cmdlet bu kısıtlamalara sahip kullanıcı tarafından görülebilir.
  3. Bir cmdlet birden fazla rolde görünür hale getiriliyorsa ve her rol farklı bir parametre kümesine izin veriyorsa, cmdlet ve her rolde tanımlanan tüm parametreler kullanıcı tarafından görülebilir. Bir rolün parametrelerinde kısıtlamaları yoksa, tüm parametrelere izin verilir.
  4. Bir rol bir cmdlet parametresi için doğrulama kümesi veya doğrulama deseni tanımlıyorsa ve diğer rol parametreye izin veriyor ancak parametre değerlerini sınırlamıyorsa, doğrulama kümesi veya deseni göz ardı edilir.
  5. Aynı cmdlet parametresi için birden fazla rolde bir doğrulama kümesi tanımlanmışsa, tüm doğrulama kümelerindeki tüm değerlere izin verilir.
  6. Aynı cmdlet parametresi için birden fazla rolde bir doğrulama deseni tanımlanmışsa, desenlerden herhangi biriyle eşleşen değerlere izin verilir.
  7. Bir doğrulama kümesi bir veya daha fazla rolde tanımlanmışsa ve aynı cmdlet parametresi için bir doğrulama deseni başka bir rolde tanımlanmışsa, doğrulama kümesi yoksayılır ve kural (6) kalan doğrulama desenleri için geçerlidir.

Aşağıda rollerin bu kurallara göre nasıl birleştirildiğinden bir örnek verilmiştir:

# Role A Visible Cmdlets
$roleA = @{
    VisibleCmdlets = @(
        'Get-Service'
         @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Client' }
        }
    )
}

# Role B Visible Cmdlets
$roleB = @{
    VisibleCmdlets = @(
        @{
            Name       = 'Get-Service';
            Parameters = @{ Name = 'DisplayName'; ValidatePattern = 'DNS.*' }
        }
        @{
            Name       = 'Restart-Service'
            Parameters = @{ Name = 'DisplayName'; ValidateSet = 'DNS Server' }
        }
    )
}

# Resulting permissions for a user who belongs to both role A and B
# - The constraint in role B for the DisplayName parameter on Get-Service
#   is ignored because of rule #4
# - The ValidateSets for Restart-Service are merged because both roles use
#   ValidateSet on the same parameter per rule #5
$mergedAandB = @{
    VisibleCmdlets = @(
        'Get-Service'
        @{
            Name = 'Restart-Service';
            Parameters = @{
                Name = 'DisplayName'
                ValidateSet = 'DNS Client', 'DNS Server'
            }
        }
    )
}

Görünür Harici Komutlar, Görünür Takma Adlar, Görünür Sağlayıcılar, İşlenir Komut Dosyaları

Rol yetenek dosyasındaki diğer tüm alanlar, izin verilebilen dış komutlar, diğer adlar, sağlayıcılar ve başlangıç betiklerinden oluşan kümülatif kümeye eklenir. Tek bir rol özelliğinde kullanılabilen tüm komut, diğer ad, sağlayıcı veya betikLER JEA kullanıcısının kullanımına sunulur.

Bir rol özelliğinden ve cmdlet'lerden/işlevlerden/komutlardan oluşan birleşik sağlayıcı kümesinin kullanıcıların sistem kaynaklarına istemeden erişmesine izin vermediğinden emin olun. Örneğin, bir rol cmdlet'ine Remove-Item izin veriyorsa ve diğeri sağlayıcıya FileSystem izin veriyorsa, JEA kullanıcısının bilgisayarınızdaki rastgele dosyaları silme riski altındasınız. Kullanıcıların etkin izinlerini belirleme hakkında ek bilgileri denetim JEA makalesinde bulabilirsiniz.

Sonraki Adımlar

Oturum yapılandırma dosyası oluşturma