выдача_прав_с_помощью_jea

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
выдача_прав_с_помощью_jea [2023/06/23 12:41] jpвыдача_прав_с_помощью_jea [2025/02/11 09:16] (current) jp
Line 1: Line 1:
 ===== Выдача прав с помощью JEA ===== ===== Выдача прав с помощью JEA =====
  
-В ОС Windows возможно выдавать права на запуск отдельных командлетов с помощью концепции, которая называется //Just Enough Administration (JEA)//. В данном примере мы рассмотрим - как делегировать права пользователю на управлениями машинами HYPER-V, не делая его ни локальным администратором, ни администратором HYPER-V.+В ОС Windows возможно выдавать права на запуск отдельных командлетов с помощью концепции, которая называется **//Just Enough Administration (JEA)//**
  
-Пользователь сможет подключаться к локальной сессии и выполнить ограниченный администратором набор команд, даже если для этих команд требуются привилегии админа. +В данном примере мы рассмотрим - как делегировать права пользователю на управлениями машинами HYPER-V, не делая его ни локальным администратором, ни администратором HYPER-V. Все действия и редактируемые файлы находятся на одном локальном компьютере. Пользователь, которого ограничиваем - сможет подключаться к локальной сессии и выполнить заданный администратором набор команд, даже если для этих команд требуются привилегии админа.  
 + 
 +//Можно ограничивать не только команды, но и их **параметры**.//  
 + 
 +Приступим к настройке.
  
 Сначала нам необходимо создать файл сессии. Сделаем это следующей командой: Сначала нам необходимо создать файл сессии. Сделаем это следующей командой:
Line 11: Line 15:
 Теперь нужно отредактировать файл сессии //hpv_manage.pssc//. Теперь нужно отредактировать файл сессии //hpv_manage.pssc//.
  
-В типе сессии выбираем **//RestrictedRemoteServer//**. Эта опция создаст минимальное окружение доступных комманд. Если этого не сделать - комманды PS, без которых трудно работать в окружении придется вручную перечислять в конфигурационном файле, который мы будем редактировать дальше. +В типе сессии выбираем**//RestrictedRemoteServer//**. Эта опция создаст минимальное окружение доступных комманд. Если этого не сделать - комманды PS, без которых трудно работать в окружениипридется вручную перечислять в конфигурационном файле (*.psrc), который мы будем редактировать дальше. 
  
 Также, устанавливаем параметр //**TranscriptDirectory**//. В директории, заданной в параметре - будет храниться информация о конкретных действиях пользователей в рамках их сессий. Также, устанавливаем параметр //**TranscriptDirectory**//. В директории, заданной в параметре - будет храниться информация о конкретных действиях пользователей в рамках их сессий.
  
-Устанавливаем опцию //**RunAsVirtualAccount**//. В этом случае команды будут выполняться под виртуализированныйм аккаунтом с привилегиями администратора, что нам и требуется. +Устанавливаем опцию //**RunAsVirtualAccount**//. В этом случае команды будут выполняться под виртуализированным аккаунтом с привилегиями администратора, что нам и требуется. 
  
 В опции //**RoleDefinitions**// мы задаем имя группы (локального компьютера или Active Directory) и название роли JEA, которую мы сконфигурируем далее. В опции //**RoleDefinitions**// мы задаем имя группы (локального компьютера или Active Directory) и название роли JEA, которую мы сконфигурируем далее.
  
-:!: //Название роли здесь должно точно соответствовать имени файла ролей JEA (не hpv_manage.pssc)//+:!: //Название роли здесь должно точно соответствовать имени файла ролей JEA (не hpv_manage.pssc, а hyperv-power.psrc)//
  
 Файл //hpv_manage.pssc// в нашем случае будет выглядеть следующим образом: Файл //hpv_manage.pssc// в нашем случае будет выглядеть следующим образом:
Line 60: Line 64:
 Отсутствие ошибок в файле сессии можно проверить таким командлетом: Отсутствие ошибок в файле сессии можно проверить таким командлетом:
  
-   Test-PSSessionConfigurationFile -Path  'C:\Program Files\WindowsPowerShell\dc_manage.pssc'+   Test-PSSessionConfigurationFile -Path  'C:\Program Files\WindowsPowerShell\hpv_manage.pssc'
 Теперь нам нужно создать каталог, который будет содержать конфигурационные файлы JEA: Теперь нам нужно создать каталог, который будет содержать конфигурационные файлы JEA:
  
    New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities ' -ItemType Directory    New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities ' -ItemType Directory
-:!: Папка, содержащая конфигурации всегда должна называться ''RoleCapabilities''+:!: Папка, содержащая конфигурациивсегда должна называться ''RoleCapabilities''
  
 После того, как папка создана - самое время создать файл конфигурации ролей JEA, который и будет задавать - какие именно командлеты и модули можно использовать. После того, как папка создана - самое время создать файл конфигурации ролей JEA, который и будет задавать - какие именно командлеты и модули можно использовать.
 <WRAP prewrap> <WRAP prewrap>
 <code> <code>
-New-PSRoleCapabilityFile -Path 'C:\Program files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'+New-PSRoleCapabilityFile -Path 'C:\Program files\WindowsPowerShell\Modules\JEA\RoleCapabilities\hyperv-power.psrc'
 </code> </code>
 </WRAP> </WRAP>
-{{tag>Microsoft PowerShell HYPER-V}} 
  
 +Отредактируем этот файл, поправив следующие директивы.
  
 +//**VisibleCmdlets**// - задает какие, собственно, командлеты и с какими параметрами можно использовать. В данном примере мы разрешаем командлеты, связанные с управлением HYPER-V. 
 +
 +//**ModulesToImport**// - в данном случае нам требуется подключить в сессию модуль HYPER-V, т.к. без него перечисленные командлеты вообще не будут запущены.
 +
 +Пример файла //hyperv-power.psrc//, в котором разрешается управление HYPER-V:
 +<WRAP prewrap>
 +<code>
 +@{
 +
 +# ID used to uniquely identify this document
 +GUID = '4f5a61b7-ed51-4475-9abb-f520ca32f813'
 +
 +# Author of this document
 +Author = 'sad22'
 +
 +# Description of the functionality provided by these settings
 +# Description = ''
 +
 +# Company associated with this document
 +CompanyName = 'Unknown'
 +
 +# Copyright statement for this document
 +Copyright = '(c) sad22. All rights reserved.'
 +
 +# Modules to import when applied to a session
 +ModulesToImport = 'Hyper-V'
 +
 +# Aliases to make visible when applied to a session
 +# VisibleAliases = 'Item1', 'Item2'
 +
 +# Cmdlets to make visible when applied to a session
 +VisibleCmdlets = @('Start-VM', 'Stop-VM', 'Get-VM', 'Get-Command', 'Restart-VM', 'Suspend-VM', 'Resume-VM')
 +
 +# Functions to make visible when applied to a session
 +# VisibleFunctions = 'Invoke-Function1', @{ Name = 'Invoke-Function2'; Parameters = @{ Name = 'Parameter1'; ValidateSet = 'Item1', 'Item2' }, @{ Name = 'Parameter2'; ValidatePattern = 'L*' } }
 +
 +# External commands (scripts and applications) to make visible when applied to a session
 +# VisibleExternalCommands = 'Item1', 'Item2'
 +
 +# Providers to make visible when applied to a session
 +# VisibleProviders = 'Item1', 'Item2'
 +
 +# Scripts to run when applied to a session
 +# ScriptsToProcess = 'C:\ConfigData\InitScript1.ps1', 'C:\ConfigData\InitScript2.ps1'
 +
 +# Aliases to be defined when applied to a session
 +# AliasDefinitions = @{ Name = 'Alias1'; Value = 'Invoke-Alias1'}, @{ Name = 'Alias2'; Value = 'Invoke-Alias2'}
 +
 +# Functions to define when applied to a session
 +# FunctionDefinitions = @{ Name = 'MyFunction'; ScriptBlock = { param($MyInput) $MyInput } }
 +
 +# Variables to define when applied to a session
 +# VariableDefinitions = @{ Name = 'Variable1'; Value = { 'Dynamic' + 'InitialValue' } }, @{ Name = 'Variable2'; Value = 'StaticInitialValue' }
 +
 +# Environment variables to define when applied to a session
 +# EnvironmentVariables = @{ Variable1 = 'Value1'; Variable2 = 'Value2' }
 +
 +# Type files (.ps1xml) to load when applied to a session
 +# TypesToProcess = 'C:\ConfigData\MyTypes.ps1xml', 'C:\ConfigData\OtherTypes.ps1xml'
 +
 +# Format files (.ps1xml) to load when applied to a session
 +# FormatsToProcess = 'C:\ConfigData\MyFormats.ps1xml', 'C:\ConfigData\OtherFormats.ps1xml'
 +
 +# Assemblies to load when applied to a session
 +# AssembliesToLoad = 'System.Web', 'System.OtherAssembly, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
 +}
 +</code>
 +</WRAP>
 + 
 +После правки файла, нам нужно зарегистрировать конфигурацию:
 +
 +   Register-PSSessionConfiguration –Name hyperv-power -Path 'C:\Program Files\WindowsPowerShell\hpv_manage.pssc'
 +
 +На всякий случай перезапускаем службу WinRM
 +
 +   Restart-Service WinRM
 +Убрать созданную регистрацию конфигурации можно следующей командой:
 +   UnRegister-PSSessionConfiguration –Name hyperv-power
 +После перезапуска службы WinRM - пользователь, с ограниченными правами, входящий в группу, которую мы указали в файле //hpv_manage.pssc// - может войти в созданную сессию командой с указанием конфигурации:
 +
 +   Enter-PSSession -ComputerName localhost -ConfigurationName hyperv-power
 +Если он выполнит //get-command//, то получит вот такой список:
 +
 +<code>
 +CommandType     Name                                               Version    Source
 +-----------     ----                                               -------    ------
 +Function        Clear-Host
 +Function        Exit-PSSession
 +Function        Get-Command
 +Function        Get-FormatData
 +Function        Get-Help
 +Function        Measure-Object
 +Function        Out-Default
 +Function        Select-Object
 +Cmdlet          Get-Command                                        7.2.11.500 Microsoft.PowerShell.Core
 +Cmdlet          Get-VM                                             2.0.0.0    Hyper-V
 +Cmdlet          Restart-VM                                         2.0.0.0    Hyper-V
 +Cmdlet          Resume-VM                                          2.0.0.0    Hyper-V
 +Cmdlet          Start-VM                                           2.0.0.0    Hyper-V
 +Cmdlet          Stop-VM                                            2.0.0.0    Hyper-V
 +Cmdlet          Suspend-VM                                         2.0.0.0    Hyper-V
 +</code>
 +
 +Как видим, пользователю доступны командлеты, позволяющие управлять виртуальными машинами хоста, но создавать или удалять он их не может.
 +
 +Если нам требуется запстить определенное действие одной командой (без интерактивной сесии), то можно использовать //Invoke-Command//. Например, такой командой можно посмотреть статус виртуальных машин:
 +
 +   Invoke-Command -ComputerName localhost -ConfigurationName hyperv-power -ScriptBlock {get-vm}
 +=== Материалы по теме ===
 +
 +https://winitpro.ru/index.php/2020/09/29/powershell-just-enough-administration-jea-delegirovaniye-admin-prav-polzovatelyam/ \\
 +https://4sysops.com/archives/just-enough-administration-jea-part-2-an-example/ \\
 +https://secops.one/2019/11/05/hyper-v-just-enough-administration-jea/
 +{{tag>Microsoft PowerShell HYPER-V}}
выдача_прав_с_помощью_jea.1687524107.txt.gz · Last modified: 2023/06/23 12:41 by jp