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

This is an old revision of the document!


Выдача прав с помощью JEA

В ОС Windows возможно выдавать права на запуск отдельных командлетов с помощью концепции, которая называется Just Enough Administration (JEA). В данном примере мы рассмотрим - как делегировать права пользователю на управлениями машинами HYPER-V, не делая его ни локальным администратором, ни администратором HYPER-V. Все действия и редактируемые файлы находятся на одном локальном компьютере.

Пользователь сможет подключаться к локальной сессии и выполнить ограниченный администратором набор команд, даже если для этих команд требуются привилегии админа.

Сначала нам необходимо создать файл сессии. Сделаем это следующей командой:

 New-PSSessionConfigurationFile -Path 'C:\Program Files\WindowsPowerShell\hpv_manage.pssc'

Теперь нужно отредактировать файл сессии hpv_manage.pssc.

В типе сессии выбираем RestrictedRemoteServer. Эта опция создаст минимальное окружение доступных комманд. Если этого не сделать - комманды PS, без которых трудно работать в окружении - придется вручную перечислять в конфигурационном файле, который мы будем редактировать дальше.

Также, устанавливаем параметр TranscriptDirectory. В директории, заданной в параметре - будет храниться информация о конкретных действиях пользователей в рамках их сессий.

Устанавливаем опцию RunAsVirtualAccount. В этом случае команды будут выполняться под виртуализированныйм аккаунтом с привилегиями администратора, что нам и требуется.

В опции RoleDefinitions мы задаем имя группы (локального компьютера или Active Directory) и название роли JEA, которую мы сконфигурируем далее.

:!: Название роли здесь должно точно соответствовать имени файла ролей JEA (не hpv_manage.pssc)

Файл hpv_manage.pssc в нашем случае будет выглядеть следующим образом:

@{

# Version number of the schema used for this document
SchemaVersion = '2.0.0.0'

# ID used to uniquely identify this document
GUID = 'cabe6d8b-7204-672b-a135-f200b090fd44'

# Author of this document
Author = 'admin'

# Description of the functionality provided by these settings
# Description = ''

# Session type defaults to apply for this session configuration. Can be 'RestrictedRemoteServer' (recommended), 'Empty', or 'Default'
SessionType = 'RestrictedRemoteServer'

# Directory to place session transcripts for this session configuration
TranscriptDirectory = 'C:\PS\JEA_logs'

# Whether to run this session configuration as the machine's (virtual) administrator account
RunAsVirtualAccount = $true

# Scripts to run when applied to a session
# ScriptsToProcess = 'C:\ConfigData\InitScript1.ps1', 'C:\ConfigData\InitScript2.ps1'

# User roles (security groups), and the role capabilities that should be applied to them when applied to a session
RoleDefinitions = @{'.\Пользователи' = @{ RoleCapabilities = 'hyperv-power'}} 

}

Отсутствие ошибок в файле сессии можно проверить таким командлетом:

 Test-PSSessionConfigurationFile -Path  'C:\Program Files\WindowsPowerShell\hpv_manage.pssc'

Теперь нам нужно создать каталог, который будет содержать конфигурационные файлы JEA:

 New-Item -Path 'C:\Program Files\WindowsPowerShell\Modules\JEA\RoleCapabilities ' -ItemType Directory

:!: Папка, содержащая конфигурации, всегда должна называться RoleCapabilities

После того, как папка создана - самое время создать файл конфигурации ролей JEA, который и будет задавать - какие именно командлеты и модули можно использовать.

New-PSRoleCapabilityFile -Path 'C:\Program files\WindowsPowerShell\Modules\JEA\RoleCapabilities\HelpDesk_admins.psrc'

Отредактируем этот файл, поправив следующие директивы.

VisibleCmdlets - задает какие, собственно, командлеты и скакими параметрами можно использовать. В данном примере мы разрешаем командлеты, связанные с управлением HYPER-V.

ModulesToImport - в данном случае нам требуется подключить в сессию модуль HYPER-V, т.к. без него перечисленные командлеты вообще не будут запущены.

Пример файла psrc, в котором разрешается управление HYPER-V

@{

# 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'
}

После правки файла, нам нужно зарегистрировать конфигурацию:

 Register-PSSessionConfiguration –Name hyperv-power -Path 'C:\Program Files\WindowsPowerShell\hpv_manage.pssc'

На всякий случай перезапускаем службу WinRM

 Restart-Service WinRM

Убрать регистрацию конфигурации можно следующей командой:

 UnRegister-PSSessionConfiguration –Name hyperv-power

После перезапуска службы пользователь, с ограниченными правами, входящий в группу, которую мы указали в файле hpv_manage.pssc - может войти в созданную сессию командой с указанием конфигурации:

 Enter-PSSession -ComputerName localhost -ConfigurationName hyperv-power
выдача_прав_с_помощью_jea.1687525138.txt.gz · Last modified: 2023/06/23 12:58 by jp