GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Мария Алексеева}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} {{youtubelink|}} {{SlidesSectio…») |
StasFomin (обсуждение | вклад) |
||
;{{SpeakerInfo}}: {{Speaker|Мария Алексеева}}
<blockquote>
Анализ применяемых групповых политик является важным этапом в своевременной отладке проблем,
возникающих в доменной инфраструктуре. Утилита <tt>GPResult</tt>, разработанная для ALT Linux,
предоставляет системным администраторам возможность проведения подобного анализа.
Архитектурные особенности приложения и связанные с ним разработки изложены в докладе.
</blockquote>
{{VideoSection}}
{{vimeoembed||800|450}}
{{youtubelink|}}
{{SlidesSection}}
[[File:GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024).pdf|left|page=-|300px]]
{{----}}
== Thesis ==
* https://github.com/alxvmr/gpresult
Система управления групповыми политиками позволяет администраторам применять определённые
правила и ограничения, что обеспечивает стандартизированную безопасную вычислительную среду.
Однако в момент, когда инфраструктура разрастается и становится сложнее, определение применимости
политик к пользователям и машинам проходит через определённые трудности. В частности, такое
поведение обусловлено неочевидностью порядка применения групповых политик.
И в такой ситуации возникает необходимость эффективного устранения возникших неполадок.
Первоначально для этого требуется отчёт, отражающий сведения об объектах групповой политики:
имя политики, её ключи и значения, GUID, версия и прочее. Все эти данные отображает утилита
<tt>GPResult</tt>, аналога которой ранее не существовало в Linux.
=== Архитектурные особенности ===
Как показано на рисунке, работа <tt>GPResult</tt> связана с артефактами работы инструмента
применения групповых политик — утилиты <tt>GPUpdate</tt>.
[[File:ossdevconf-2024-alexeeva-alexeeva-ris1.png|center|640px|thumb|Взаимодействие GPResult и GPUpdate]]
<tt>GPUpdate</tt> (до версии 0.10.0-alt1) кэшировал обработанные объекты групповой политики (GPO) в базе данных SQLite. Позже архитектура сменилась —
с версии 0.10.0-alt1 ключи реестра, полученные из GPO, хранятся в базе <tt>Dconf</tt>. Такое решение позволило
внешним приложениям получить доступ к информации о применённых GPO.
<tt>GPUpdate</tt> применяет групповые политики как на системном уровне, так и для отдельных пользователей.
В результате, информация о применённых политиках (в виде списка ключей и значений) сохраняется в
неструктурированной бинарной базе данных формата GVDB — <tt>/etc/dconf/db/policy<UID></tt>, где UID —
идентификатор пользователя. Для машины информация сохраняется по пути <tt>/etc/dconf/db/policy</tt>.
Отличительной особенностью этих файлов является хранение записей об уже применённых групповых политиках
(в отличие, например, от <tt>.ini-файлов</tt>).
Указанные базы данных предоставляют два набора ключей, относящихся к одному ключу реестра — один
предоставляет метаданные, другой — значение ключа. Причём ключ с метаданными отличается от ключа со
значением добавлением префикса <tt>/Source</tt>. Так например, для ключа <tt>/Software/KeyName</tt> ключ
с метаданными будет иметь название <tt>/Source/Software/KeyName</tt>.
Ключи метаданных включают в себя необходимую информацию для GPResult:
* имя групповой политики (<tt>policy_name</tt>), к которой относится ключ;
* тип данных значения (<tt>type</tt>);
* сведения о перезаписи ключа (<tt>reloaded_with_policy_key</tt>);
* является ли значение ключа списком (<tt>is_list</tt>).
Фактически, для реализации основной задачи <tt>GPResult</tt> необходимо вычитать и правильно интерпретировать
информацию из указанных баз данных. Однако предоставляемое API для чтения базы GVDB применимо к проектам на C.
<tt>GPResult</tt> в свою очередь написан на Python. Решением возникшей проблемы стало использование GObject
Introspection, поскольку в реализации API используются объекты GObject.
Данный механизм является промежуточным слоем между библиотеками C (использующими GObject) и языковыми привязками.
Библиотеку можно сканировать во время компиляции и генерировать файлы метаданных в дополнение к ней.
Затем языковые привязки могут считывать полученные метаданные и автоматически предоставлять привязки
для вызова библиотеки C.
[[File:ossdevconf-2024-alexeeva-alexeeva-ris3.png|center|640px|thumb|Принцип взаимодействия языковой привязки и файлов самоанализа библиотеки]]
В результате, дополнительно был собран пакет, предоставляющий метаданные о проекте.
Первым шагом из исходного кода и заголовков генерируется <tt>.gir</tt>-файл, содержащий информацию о
самоанализе библиотеки. После, при помощи компилятора из этого файла генерируется бинарный файл <tt>.typelib</tt>,
предоставляющий метаданные для языковой привязки (PyGObject).
=== Функциональные возможности GPResult ===
Актуальная версия утилиты <tt>GPResult</tt> поддерживает сбор и отображение сведений о применённых групповых
политиках для текущего пользователя и локальной машины. Приложение является консольным и поддерживает следующий набор опций:
* выбор формата вывода: отображение применённых ключей и значений (raw);
** сводных данных, включающих только имена групповых политик (common); вывод списка,
** соотносящего имена GPO c их GUID (list); отображение подробных сведений о политиках (verbose);
* выдача информации о применённой групповой политике по её имени или GUID;
* указание типа объекта (<tt>user</tt> или <tt>machine</tt>).
Также утилита поддерживает два языка — русский и английский. Выбор языка происходит автоматически и зависит от языка системы.
=== Перспективы развития ===
На данный момент <tt>GPResult</tt> предоставляет возможность отображения данных о применённых групповых политиках
для текущего пользователя и локальной машины. Проект активно развивается, и в будущем планируется расширить функционал:
добавить поддержку удалённых пользователей и компьютеров; реализовать предоставление информации о перезаписанных ключах
и приоритетах политик; разработать механизм генерации html-отчёта.
{{----}}
[[File:{{#setmainimage:GPResult — реализация инструмента для отображения и анализа групповых политик (Мария Алексеева, OSSDEVCONF-2024)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->
<references/>
[[Категория:OSSDEVCONF-2024]]
[[Категория:Open-source projects]]
[[Категория:Draft]] | |||
Версия 02:12, 23 октября 2024
- Докладчик
- Мария Алексеева
Анализ применяемых групповых политик является важным этапом в своевременной отладке проблем, возникающих в доменной инфраструктуре. Утилита GPResult, разработанная для ALT Linux, предоставляет системным администраторам возможность проведения подобного анализа. Архитектурные особенности приложения и связанные с ним разработки изложены в докладе.
Содержание
Видео
Презентация
Thesis
Система управления групповыми политиками позволяет администраторам применять определённые правила и ограничения, что обеспечивает стандартизированную безопасную вычислительную среду. Однако в момент, когда инфраструктура разрастается и становится сложнее, определение применимости политик к пользователям и машинам проходит через определённые трудности. В частности, такое поведение обусловлено неочевидностью порядка применения групповых политик.
И в такой ситуации возникает необходимость эффективного устранения возникших неполадок. Первоначально для этого требуется отчёт, отражающий сведения об объектах групповой политики: имя политики, её ключи и значения, GUID, версия и прочее. Все эти данные отображает утилита GPResult, аналога которой ранее не существовало в Linux.
Архитектурные особенности
Как показано на рисунке, работа 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-отчёта.