> Приложите глаза вот сюда: http://git.altlinux.org/gears/c/chrooted.git Приложил. Вижу какие-то заброшенные шеллскрипты, кажется творчества Led'а. Может быть я глупый, но я не понимаю что там хорошего, интересного и правильного. На systemd.exec по уровню умений вроде не похоже, да и фанатом системных тулсов на шелле я не являюсь.
> Потребные _кому_? Себе любимому?
Да, вы знаете, когда для запуска сервиса требуется доступ к туче утилит и либ нужных для работы утилит - мне это не нравится. К тому же большинство утилит предполагают что доступ полный, а поскольку контекст частично урезан - это не так. И придется закатывать основательное исследование до того как это заработает в желаемом виде. Многовато возни для типовой хотелки.
А потуги сетевого сервиса запустить шелл - отличный индикатор того что в системе орудует хаксор. Поэтому большинство сетевых сервисов перебьются вообще без возможности запускать шелл.
> А сервису от этого холодно или жарко?..
Сервису то пофиг, а вот ограничиваемому контексту приходится иметь уйму доступа во все закоулки системы. Иначе не запустятся утилиты которые его будут формировать. Да еще это привилегированные операции, угодить на все утилсы - долбательно. Особенно если кто не считает что линукс заканчивается на ulimit и nice и хочет посвежее и помощнее.
А системд - он в правильном месте, в правильное время, с нужными правами - уже запущен, либы вгрузил, совсем-полные права. И поэтому он может орудовать при формировании контекста значительно более вольно, не боясь обломать себе свои же операции. Если не накосячит с последовательностью сисколов, конечно. А если накосячит - получит жирный баг!
> Вы бы всё-таки посмотрели на прикладной privsep, что ли.
Это та неведома зверушка на питоне? Или я что-то не то нашел?
> может требуемую инициализацию (например, сокета) выполнить от рута,
Это какое-то очень первобытное понимание Linux вообще и CAPSов в частности. Чтобы инициализировать сокет, даже на нижних портах - в линуксе не надо быть рутом. Надо чтобы были CAPSы на это. А вот тут выезжает системд на белом коне и оставляет проге только те капсы которые требовались. И никаких рутов. Будет у проги капс на создание сокетов - и хватит с нее. Единственный урон системе через это - порт занять можно. Если это проблема, можно и net ns отдельный дать. И пусть занимает там хоть все порты.
> затем бросить лишние привилегии (включая setreuid'ы) и работать дальше -- возможно,
> и не под одним псевдопользователем, а под несколькими.
Я вот так с наскока не возьмусь допатчить взятый наобум сервис до уровня умений systemd .exec + .resource_control хотя-бы. И как я вижу - Led и сотоварищи тоже к подобному уровню фич тоже и близко не стояли, так что я себя даже позорником не ощущаю признаваясь в этом :).
> Как-то можно оформить и снаружи, но если в контексте не остаётся рута и способа его вернуть.
Ну вот прелесть системды в том что он может довольно много чего оформлять "снаружи", да еще и головняк как правильно вызвать при этом сисколы - у него. И если им переключить юзера, отобрать капсы и отключить явно лишние системные вызовы и порубить доступ к ФС, а то и namespace'ы повключать - не совсем понимаю как рута возвращать предлагается? Системд может и не идеален, но умеет в разы больше всего этого чем типичный сервис, в чем можно убедиться почитав ман на .exeс и .resource-control. А поскольку для майнтайнера это сводится к нескольким строкам конфига, дебианщики стали местами гайки своим сервисам и подтягивать даже. Что по-моему полезное начинание. И до системд что-то такое если и практиковалось то эпизодически и лайтово по сравнению с тем что можно делать через системд. Теоретически то можно и без системд. А практически - без системд можно и подзадолбаться.