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