Alterator on D-Bus
История создания
Альтератор является основным базовым компонентом для построения дистрибутивных решений «Альт» (используется как инсталлятор и конфигуратор системы). Реализация исходного проекта Альтератор написана в рамках модульного подхода Scheme (диалект языка Lisp, в реализации Guile), C и sh+awk. Архитектура проекта предполагает возможность парного расширения модулей на языке программирования Scheme для фронтендов (под графический интерфейс на базе Qt и под веб-интерфейс на базе встроенного, отдельно устанавливаемого веб-сервера) и на языке Bash для бэкендов (со взаимодействием через собственную шину передачи сообщений — woo-bus).
Недостатки решения
Разработка предыдущей версии Альтератора, в которой взаимодействие с бэкендами осуществлялось через службу alteratord, столкнулась со следующими проблемами:
- модули не предоставляют программный интерфейс для приложений (API);
- нетривиальность пользовательского интерфейса, вызванная ограничением связки quile/qt;
- ограниченность возможностей для реализации системной части:
- слабоспецифицированный интерфейс;
- сложность обработки ошибок бэкендов;
- отсутствие системного контроля доступа:
- отсутствует гибкая настройка контроля доступа в графическом интерфейсе;
- в параметрах доступа к модулю через веб-интерфейс возможно указание только локальных пользователей;
- запуск в графическом интерфейсе доступен только по паролю root'а;
- подверженность уязвимости code injection.
Перечисленные недостатки привели к решению о смене архитектуры проекта Альтератор - к переходу от взаимодействия с бэкендами посредством alteratord (который «под капотом» использует woo-bus) к общению через службу alterator-manager, обращающуюся к шине D-Bus.
Цели перехода на новую реализацию
- спецификация интерфейсов бэкендов для создания фронтендов в различных графических и консольных приложениях;
- возможность защищённого, контролируемого выполнения привилегированных действий из-под непривилегированного окружения (то есть команд из-под root’а в графических приложениях без необходимости ввода только root’ового пароля, что определяется настройками);
- интеграция шины D-Bus со всеми системными компонентами в современных Linux-дистрибутивах (начиная от systemd и заканчивая всеми графическими окружениями для управления, например, такими сервисами как UDisks2, NetworkManager, а также отдельными сервисами systemd);
- сохранить возможность традиционного управления в консоли через ручное редактирование конфигурационных файлов;
- расширение числа заинтересованных разработчиков (участников команды ALT Linux Team) в развитии проекта, позволяющего конфигурировать операционные системы «Альт» за счет реализации расширения модулей под декларативный сценарий;
- предоставление разработчикам широких возможностей в виде фреймфорка для создания собственных приложений, управляемых как локально, так и по сети;
- обобщение механизмов, используемых как для локального, так и удалённого управления, в том числе и через инструменты конфигурациями (такие как ssh, ansible и групповые политики, развиваемые в рамках проекта «Альт Домен»).
Архитектура проекта
Архитектура новой реализации проекта Альтератор опирается на опыт конфигурирования ОС «Альт» и концептуальный подход, заложенный в нем.
Alterator использует alterator-manager, который добавляет объекты и интерфейсы на шину D-Bus.
Alterator-manager это модульный сервис ("замена" alteratord). Его функционал реализуется в модулях (механизмах). Модули представлены в виде динамически подгружаемых библиотек (.so). Интерфейс описывается в специальных конфигурационных файлах. Сервис может работать в двух режимах: обычном и пользовательском. В первом случае сервис запускается из-под root'а и регистрирует имя (ru.basealt.alterator) на системной шине D-Bus, во втором - из-под обычного пользователя и имя регистрирует на сессионной шине D-Bus. После запуска сервис alterator-manager считывает конфигурационные файлы .backend и сохраняет информацию из них в собственную таблицу. Далее alterator-manager загружает модули, которые будут пользоваться информацией из этой таблицы.
На данный момент реализован модуль alterator-module-executor. Модуль alterator-module-executor предоставляет интерфейс на D-Bus для запуска исполняемых файлов. Подробнее.
Другие модули могут не пользоваться конфигурационными файлами .backend, а добавлять информацию о своих объектах и интерфейсах напрямую в базу данных alterator-manager'а.
Объектами и интерфейсами на D-Bus, предоставленными alterator-manager'ом, пользуются фронтенды (Alterator Browser, ADT, AMC, AMP).
Cхема различий реализаций Альтератора
Alterator (старый) | Alterator на D-Bus |
---|---|
Ключевым звеном является служба alteratord, реализующаяся как взаимодействие через шину woo-bus, так и запуск бэкендов в виде отдельных процессов, обрабатывающих запросы на шине. | Ключевым звеном является служба alterator-manager, обеспечивающая:
|
Реализация нового подхода
Alterator Manager и Executor
На текущий момент реализован базовый каркас в виде alterator-manager и alterator-module-executor. Пакеты доступны в хранилище «Сизиф» в ветке sisyphus и p11.
Данный каркас обеспечивает следующий набор возможностей:
- в рамках базового интерфейса ru.basealt.alterator.manager - поиск любых объектов Альтератор, предоставляющих заданный интерфейс, а также вывод перечня интерфейсов предоставляемых заданным объектом Альтератор;
- в рамках расширенного модуля executor - возможность создания любого количества объектов, реализующих заданные интерфейсы через Unixway на D-Bus;
- для всех создаваемых интерфейсов - генерировать базовый ограниченный набор правил PolicyKit;
- контролировать соответствие интерфейсов, создаваемых для объектов, заданному шаблону (имена методов и их сигнатуры).
Клиентские приложения
- alterator-browser,Alterator Browser - интерфейс добавления модулей Альтератора; графическое приложение, предназначенное для просмотра, запуска приложений для использования функционала объектов на D-Bus (замена Alterator Control Center). Разработка должна обеспечить прозрачный запуск как графических модулей Альтератора старой версии, так и новых графических интерфейсов, обращающихся к интерфейсам на D-Bus и управляемых через групповые политики.
- adt, ADT - графическое приложение для диагностики операционной системы: обеспечивает поиск и загрузку гибко расширяемого набора диагностических интерфейсов;
- alteratorctl, Alteratorctl (в разработке </>) - консольная утилита, позволяющая использовать функционал объектов на D-Bus без дополнительных приложений.
Планы и перспективы развития
Дальнейшее развитие решения конфигурирования без установки браузера и конфигурирования веб-протоколов при помощи удаленного управления модулями Альтератора может быть представлено в виде отдельного proxy-сервера для написания полноценного, расширяемого веб-интерфейса. Ключевым вопросом для конфигурирования через веб остается делегирование расширенных полномочий веб-серверу, делающее его дополнительной точкой уязвимости.
Важным шагом для расширения количества разрабатываемых модулей и клиентских приложений, а также повышения общей зрелости предлагаемой к рассмотрению реализации является подробное документирование как архитектурных особенностей, так и возможностей для разработчика.