| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| выдача_прав_с_помощью_jea [2023/06/23 12:58] – jp | выдача_прав_с_помощью_jea [2025/02/11 09:16] (current) – jp |
|---|
| ===== Выдача прав с помощью JEA ===== | ===== Выдача прав с помощью JEA ===== |
| |
| В ОС Windows возможно выдавать права на запуск отдельных командлетов с помощью концепции, которая называется //Just Enough Administration (JEA)//. В данном примере мы рассмотрим - как делегировать права пользователю на управлениями машинами HYPER-V, не делая его ни локальным администратором, ни администратором HYPER-V. Все действия и редактируемые файлы находятся на одном локальном компьютере. | В ОС Windows возможно выдавать права на запуск отдельных командлетов с помощью концепции, которая называется **//Just Enough Administration (JEA)//**. |
| |
| Пользователь сможет подключаться к локальной сессии и выполнить ограниченный администратором набор команд, даже если для этих команд требуются привилегии админа. | В данном примере мы рассмотрим - как делегировать права пользователю на управлениями машинами HYPER-V, не делая его ни локальным администратором, ни администратором HYPER-V. Все действия и редактируемые файлы находятся на одном локальном компьютере. Пользователь, которого ограничиваем - сможет подключаться к локальной сессии и выполнить заданный администратором набор команд, даже если для этих команд требуются привилегии админа. |
| | |
| | //Можно ограничивать не только команды, но и их **параметры**.// |
| | |
| | Приступим к настройке. |
| |
| Сначала нам необходимо создать файл сессии. Сделаем это следующей командой: | Сначала нам необходимо создать файл сессии. Сделаем это следующей командой: |
| Теперь нужно отредактировать файл сессии //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// в нашем случае будет выглядеть следующим образом: |
| <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> |
| Отредактируем этот файл, поправив следующие директивы. | Отредактируем этот файл, поправив следующие директивы. |
| |
| //**VisibleCmdlets**// - задает какие, собственно, командлеты и скакими параметрами можно использовать. В данном примере мы разрешаем командлеты, связанные с управлением HYPER-V. | //**VisibleCmdlets**// - задает какие, собственно, командлеты и с какими параметрами можно использовать. В данном примере мы разрешаем командлеты, связанные с управлением HYPER-V. |
| |
| //**ModulesToImport**// - в данном случае нам требуется подключить в сессию модуль HYPER-V, т.к. без него перечисленные командлеты вообще не будут запущены. | //**ModulesToImport**// - в данном случае нам требуется подключить в сессию модуль HYPER-V, т.к. без него перечисленные командлеты вообще не будут запущены. |
| |
| Пример файла psrc, в котором разрешается управление HYPER-V | Пример файла //hyperv-power.psrc//, в котором разрешается управление HYPER-V: |
| <WRAP prewrap> | <WRAP prewrap> |
| <code> | <code> |
| |
| Restart-Service WinRM | Restart-Service WinRM |
| Убрать регистрацию конфигурации можно следующей командой: | Убрать созданную регистрацию конфигурации можно следующей командой: |
| UnRegister-PSSessionConfiguration –Name hyperv-power | UnRegister-PSSessionConfiguration –Name hyperv-power |
| После перезапуска службы пользователь, с ограниченными правами, входящий в группу, которую мы указали в файле //hpv_manage.pssc// - может войти в созданную сессию командой с указанием конфигурации: | После перезапуска службы WinRM - пользователь, с ограниченными правами, входящий в группу, которую мы указали в файле //hpv_manage.pssc// - может войти в созданную сессию командой с указанием конфигурации: |
| |
| Enter-PSSession -ComputerName localhost -ConfigurationName hyperv-power | Enter-PSSession -ComputerName localhost -ConfigurationName hyperv-power |
| {{tag>Microsoft PowerShell HYPER-V}} | Если он выполнит //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}} |