Вопрос или проблема
Обратите внимание на эту ситуацию
lxcunpriv@nas:~$ id
uid=1001(lxcunpriv) gid=1001(lxcunpriv) gruppi=1001(lxcunpriv)
lxcunpriv@nas:~$ virsh -c qemu:///system list
==== АУТЕНТИФИКАЦИЯ ДЛЯ org.libvirt.unix.manage ====
Системная политика предотвращает управление локализованными виртуализированными системами
Аутентификация как: myuser
Пароль:
Если “lxcunpriv” знает пароль “myuser”, он может остановить виртуальную машину, вывести список или получить доступ к ней через консоль.
Мой вопрос: возможно ли принудить аутентификацию для группы libvirt?
Должно работать так
член группы “libvirt” = может получить доступ к виртуальной машине
нечлен группы “libvirt” = не может получить доступ к виртуальной машине, даже если знает пароль другого пользователя.
Возможно ли это?
Ответ или решение
Политика доступа к виртуальным машинам с использованием Polkit: отказ в доступе для пользователей, не входящих в группу
Вопрос о возможности управления доступом к виртуальным машинам с использованием Polkit
является весьма актуальным для системных администраторов и специалистов в области информационных технологий. В предложенной ситуации мы видим, что пользователь с именем lxcunpriv
пытается получить доступ к системе управления виртуальными машинами через virsh
, но его доступ несанкционирован — он не принадлежит к группе libvirt
.
Проблема
На основании предоставленных данных, когда пользователь lxcunpriv
, который не входит в группу libvirt
, пытается выполнить команду для получения списка виртуальных машин, система требует аутентификации и предоставляет доступ, если у данного пользователя есть пароль другого пользователя (в данном случае — myuser
). Это поведение может привести к потенциальным рискам безопасности, так как любой, кто знает пароль пользователя с правами, может получить доступ к системе.
Использование Polkit для управления доступом
Polkit (PolicyKit) — это фреймворк, который позволяет управлять привилегиями для программ в Linux. Поскольку virsh
использует внутренние механизмы аутентификации, мы можем настроить Polkit
таким образом, чтобы пользователи, не входящие в группу libvirt
, не могли получить доступ к функциям виртуализации, даже если они знают пароли других пользователей.
Настройка правил Polkit
Для того чтобы ограничить доступ для пользователей, не входящих в группу libvirt
, необходимо создать или изменить правила в Polkit.
-
Создание нового правила Polkit:
Вам нужно создать файл, например/etc/polkit-1/localauthority/50-local.d/libvirt-access.conf
. -
Добавление правил:
В этом файле вам нужно прописать следующие правила:[Allow members of the libvirt group to manage virtualization] Identity=unix-group:libvirt Action=org.libvirt.unix.manage Result=auth_admin
Это правило разрешает доступ к управлению виртуализацией только для пользователей, входящих в группу
libvirt
. -
Запрет доступа для остальных:
Чтобы запретить доступ пользователям, не входящим в группу, вам нужно добавить дополнительное правило:[Deny non-libvirt users access to virtualization] Identity=unix-group:! Action=org.libvirt.unix.manage Result=deny
Здесь используется
unix-group:!
для обозначения всех пользователей, которые не находятся в группеlibvirt
, что полностью заблокирует их доступ.
Результаты настройки
После настройки правил Polkit
, пользователи, которые не входят в группу libvirt
, не смогут получить доступ к командам управления виртуализацией, даже если они знают пароли других пользователей. Это значительно повысит уровень безопасности вашей системы управления виртуальными машинами.
Заключение
Таким образом, с помощью корректной настройки Polkit
можно эффективно управлять доступом к виртуальным машинам, обеспечивая минимизацию рисков, связанных с возможностью несанкционированного доступа. Настройка политики доступа позволит избежать ситуаций, когда пользователь, не имеющий соответствующих прав, получает возможность управлять виртуальными системами. Если у вас возникнут дополнительные вопросы по этому процессу или вы нуждаетесь в помощи с настройкой, пожалуйста, обратитесь к эксперту в области системной безопасности или администрирования.