GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024)

Материал из 0x1.tv

Докладчик
Мария Алексеева

Анализ применяемых групповых политик является важным этапом в своевременной отладке проблем, возникающих в доменной инфраструктуре. Утилита GPResult, разработанная для ALT Linux, предоставляет системным администраторам возможность проведения подобного анализа. Архитектурные особенности приложения и связанные с ним разработки изложены в докладе.

Видео

Презентация

GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf

Thesis

Система управления групповыми политиками позволяет администраторам применять определённые правила и ограничения, что обеспечивает стандартизированную безопасную вычислительную среду. Однако в момент, когда инфраструктура разрастается и становится сложнее, определение применимости политик к пользователям и машинам проходит через определённые трудности. В частности, такое поведение обусловлено неочевидностью порядка применения групповых политик.

И в такой ситуации возникает необходимость эффективного устранения возникших неполадок. Первоначально для этого требуется отчёт, отражающий сведения об объектах групповой политики: имя политики, её ключи и значения, GUID, версия и прочее. Все эти данные отображает утилита GPResult, аналога которой ранее не существовало в Linux.

Архитектурные особенности

Как показано на рисунке, работа GPResult связана с артефактами работы инструмента применения групповых политик — утилиты GPUpdate.

Взаимодействие GPResult и GPUpdate

GPUpdate (до версии 0.10.0-alt1) кэшировал обработанные объекты групповой политики (GPO) в базе данных SQLite. Позже архитектура сменилась — с версии 0.10.0-alt1 ключи реестра, полученные из GPO, хранятся в базе Dconf. Такое решение позволило внешним приложениям получить доступ к информации о применённых GPO.

GPUpdate применяет групповые политики как на системном уровне, так и для отдельных пользователей. В результате, информация о применённых политиках (в виде списка ключей и значений) сохраняется в неструктурированной бинарной базе данных формата GVDB — /etc/dconf/db/policy<UID>, где UID — идентификатор пользователя. Для машины информация сохраняется по пути /etc/dconf/db/policy. Отличительной особенностью этих файлов является хранение записей об уже применённых групповых политиках (в отличие, например, от .ini-файлов).

Указанные базы данных предоставляют два набора ключей, относящихся к одному ключу реестра — один предоставляет метаданные, другой — значение ключа. Причём ключ с метаданными отличается от ключа со значением добавлением префикса /Source. Так например, для ключа /Software/KeyName ключ с метаданными будет иметь название /Source/Software/KeyName.


Ключи метаданных включают в себя необходимую информацию для GPResult:

  • имя групповой политики (policy_name), к которой относится ключ;
  • тип данных значения (type);
  • сведения о перезаписи ключа (reloaded_with_policy_key);
  • является ли значение ключа списком (is_list).


Фактически, для реализации основной задачи GPResult необходимо вычитать и правильно интерпретировать информацию из указанных баз данных. Однако предоставляемое API для чтения базы GVDB применимо к проектам на C. GPResult в свою очередь написан на Python. Решением возникшей проблемы стало использование GObject Introspection, поскольку в реализации API используются объекты GObject.

Данный механизм является промежуточным слоем между библиотеками C (использующими GObject) и языковыми привязками. Библиотеку можно сканировать во время компиляции и генерировать файлы метаданных в дополнение к ней. Затем языковые привязки могут считывать полученные метаданные и автоматически предоставлять привязки для вызова библиотеки C.

Принцип взаимодействия языковой привязки и файлов самоанализа библиотеки

В результате, дополнительно был собран пакет, предоставляющий метаданные о проекте.

Первым шагом из исходного кода и заголовков генерируется .gir-файл, содержащий информацию о самоанализе библиотеки. После, при помощи компилятора из этого файла генерируется бинарный файл .typelib, предоставляющий метаданные для языковой привязки (PyGObject).

Функциональные возможности GPResult

Актуальная версия утилиты GPResult поддерживает сбор и отображение сведений о применённых групповых политиках для текущего пользователя и локальной машины. Приложение является консольным и поддерживает следующий набор опций:

  • выбор формата вывода: отображение применённых ключей и значений (raw);
    • сводных данных, включающих только имена групповых политик (common); вывод списка,
    • соотносящего имена GPO c их GUID (list); отображение подробных сведений о политиках (verbose);
  • выдача информации о применённой групповой политике по её имени или GUID;
  • указание типа объекта (user или machine).


Также утилита поддерживает два языка — русский и английский. Выбор языка происходит автоматически и зависит от языка системы.

Перспективы развития

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


GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024)!.jpg

Примечания и ссылки