[devel-distro] Интерфейсы для инсталлятора на базе альтератор 2.0

Leonid Krivoshein klark.devel at gmail.com
Tue Oct 15 00:23:21 MSK 2024


On 10/14/24 22:57, Evgeny Sinelnikov wrote:
> Доброй ночи,
>
> хотелось бы сконцентрироваться на конкретных вопросах. Хотелось бы 
> ориентироваться на конструктивные предложения. Архитектурных решений 
> не так много, на самом деле. Архитектурных решений реализуемых в 
> разумные сроки еще меньше.
>

Только здесь основная цель -- не сам конфигуратор, а множество 
работающих в нём модулей, т.е. если в разумные сроки мы сможем создавать 
несколько новых модулей, если к этому можно будет подключить множество 
разработчиков, если технология будет интересна не только нам, но и 
админам "на местах".


>
> 14.10.2024 11:17, Sergey V Turchin пишет:
>> On Thursday, 10 October 2024 00:52:00 MSK Leonid Krivoshein wrote:
>>
>> [...]
>>>> От
>>>> механизма, в котором нет, по сути, определенных интерфейсов, к
>>>> механизму, где их можно задавать, фиксировать, контролировать доступ
>>>> на уровне каждого отдельного метода и получать возможность написания
>>>> фронтендов, не требующих выполнения под рутом.
>>> При этом установить ОС можно только под рутом. И тогда непонятно, зачем
>>> нужны все эти интерфейсы, разделение прав и тому подобные усложнения.
>> Если помните, текущий aterator умееет и пользовательские 
>> настройки(реально
>> какой-то модуль был, забыл уже). Не знаю, насколько может быть сейчас
>> востребовано.
>>
>> [...]
>
> Удивительное дело. Давайте не будем путать. Общая тенденция создания 
> безопасных систем приводит к очень сложным в сопровождении решениям, 
> вроде SELinux. Проблема в том, что приложения под рутом невозможно 
> проконтролировать иначе. Любое приложение под рутом может всё. И 
> остаётся только доверять коду и надеяться на то, что этого кода будет 
> немного и в нем не будет критических уязвимостей.
>
> Текущий Альтератор построен на концепции общего набора механизмов 
> конфигуратора, как в инсталляторе, так и в установленной системе. 
> Недоработка текущей реализации в этом плане привела к тому, что 
> графический интерфейс мы вынуждены запускать под рутом. И это, я 
> полагаю, напрямую связано с тем, что кем-то тоже было сказано или 
> подумано нечто подобное:
>
> "При этом установить ОС можно только под рутом. И тогда непонятно, зачем
> нужны все эти интерфейсы, разделение прав и тому подобные усложнения."
>

Совершенно верно. Нет нужды разграничивать доступ в установщике. Нет 
необходимости запускать графическую часть установщика или конфигуратора 
под root'ом. Но разграничение прав внутри конфигуратора необходимо, и не 
только в пределах локальных пользователей хоста. Конфигуратор может не 
ограничиваться одним хостом.


> То есть упор был на инсталлятор, а конфигуратор остался как есть. А 
> концепт, одних и тех же модулей сохранился.
>
> Сейчас мы идём от обратного. Сначала конфигуратор, а потом 
> инсталлятор. Хоть под рутом, хоть не под рутом. С другой стороны, а в 
> чём, собственно, переусложнение?
>
> Один из вариантов запуска нашего текущего инсталлятора - это запуск 
> его, как приложения, в обычном livecd. В большинстве дистрибутивов оно 
> так и работает. В графическом виде. При этом консольного (не 
> графического) инсталятора у нас так пока и не было сделано.
>
> А, если нам нужен графический инсталлятор, то графику, в любом случае, 
> не стоит запускать под рутом.

Да.

Конфигуратор я бы рассматривал как веб-интерфейс, работающий не под 
root'ом, и не обязательно на том же хосте. Как фоновый агент, через 
который можно менять настройки системы, будучи администратором сети, у 
которого есть полномочия, а не только как локальный root. И одной из 
обязанностей этого фонового агента может быть периодическое обновление 
куска дерева конфигурации с какого-то условного контроллера домена.

Часть настроек может быть изначально в ведении обычного пользователя. В 
идеале иметь возможность как делегировать пользователям полномочия 
менять конкретные системные настройки, так и наоборот, забирать у 
обычного пользователя полномочия менять изначально пользовательские 
настройки. Всё это разделение прав решается в пределах одной программы 
конфигуратора без SELinux, Polkit и интроспекции dbus. Как вариант, в 
пределах иерархической БД конфигурации. К слову, в виндовом реестре, 
помимо древовидных "кустов" предусматривалась раздача ACL на целый "куст".


> ____________________
>
> Итого, по теме под рутом, не под рутом. Если будет графика, то не 
> понимаю что мы обсуждаем. Чем нам графика под рутом жизнь облегчит? 
> Тем, что shell-скрипты можно будет писать не только на bash, но и на C 
> или Python? На я имею в виду fork/exec консольных приложений.
>
> На текущий момент имеется dbus - не вижу ничего противоестественного 
> использовать его в инсталляторе.

Давно стоило акцентироваться, что dbus, прежде всего -- IPC, а зачем 
нужен IPC в инсталляторе? Это точно кажется противоестественным. И в 
конфигураторе-то он может быть нужен далеко не в каждом модуле.


> Кстати, как альтернативу, с недавних пор systemd рассматривает - 
> https://varlink.org/
>
> Systemd Looking At A Future With More Varlink & Less D-Bus For IPC
> https://www.phoronix.com/news/Systemd-Varlink-D-Bus-Future
>

Просто, по нужде люди работают много лет с этим dbus и понимают, что 
организовать взаимодействие можно намного проще. Причём там, где оно 
действительно нужно. Например, когда мы связываем фронт с бэком в UI/UX, 
JSON & Ко уместнее dbus, особенно, если мы выходим за пределы хоста, 
чего хотелось бы. Если конфигуратор -- одна программа, если наш тулкит 
уже позаботился о взаимодействии фронт и бэк частей модуля, нам даже не 
надо об этом думать и остаётся только решить, в каких случаях уместно 
использовать кем-то написанное с использованием dbus, чтобы подтянуть и 
этот дополнительный функционал.


> В выше приведенной статье указаны многие проблемы, с которыми 
> сталкиваются в systemd. Они там хорошо структурированы и технически 
> обоснованы. Возможно, нам тоже стоит к этому присмотреться к systemd 
> версии 257.
>
> И это, как раз, то, что предлагалось в рамках всех разумных 
> альтернатив для dbus. Но... ресурсов спроектировать всё на новом стеке 
> прямо сейчас пока не наблюдается.
>
> Предлагаю об этом подумать сразу после написания новых модулей. И, 
> главное, интерфейсов для них. В смысле бекендов. Сделать к ним 
> интерфейсы на varlink'е будет не сложно. И проблема необходимости dbus 
> перестанет быть.
>

-- 
WBR, Leonid Krivoshein.



More information about the devel-distro mailing list