Выложена в открытый доступ утилита start-stop-parsec-daemon, пропатченная версия обычного start-stop-daemon для Astra Linux Special Edition. В отличии от стандартной версии умеет запускать процессы с привилегиями PARSEC под любым пользователем.
Зачем нужна?
Штатные возможности Astra Linux Special Edition не позволяют запускать процессы (демоны) со сменой UID/GID и при этом ставить привилегии PARSEC. Невозможно, например, запускать немодифицированные программы с привилегией PRIVSOCK (возможность подключения пользователей с ненулевой мандатной меткой) с UID/GID отличными от 0 (root).
Столь плачевное положение возможно имеет причиной: а) забывчивость Русбитеха; б) вера в то, что все привилегированные процессы должны запускаться от рута. Как бы то ни было, вся обвязка связанная с запуском процессов с привилегиями PARSEC, полна тлена и баш-скриптов и порой приводит к потере работоспособности скриптов запуска.
Посему мы это все решили прекратить и сделать свой start-stop-daemon с PARSEC привилегиями, но без скриптов.
Как это работает
Пакет устанавливает команду start-stop-parsec-daemon
, полностью совместимую со штатным start-stop-daemon
, но позволяющую указывать привилегии PARSEC с помощью параметра --capability
. Для совместимости со штатным механизмом Астры privsock, если указана привилегия 0x100
(PRIVSOCK), то команда дополнительно сверяется с файлом /etc/parsec/privsock.conf
на предмет наличия запускаемого бинарника в оном списке.
В остальном, все как обычно.
Как это всё прикрутить к собственному проекту?
- Добавьте в зависимости вашего пакета с init.d скриптом наш пакет (parsec-daemon).
- В скрипте используйте
start-stop-parsec-daemon
вместоstart-stop-daemon
. - Укажите привилегии с помощью параметра
--capability
.
Пакеты можно собрать самостоятельно из исходников, а можно взять готовые для Astra Linux Special Edition 1.3/1.4 из нашего репозитория.
Рекомендация: если вы хотите таким образом адаптировать сторонние пакеты, то наилучшим способом будет создание пакета <пакет>-parsec
, в котором будет правильный LSB скрипт запуска. А postints/postrm скрипты будут отключать стандартный демон и работать с /etc/parsec/privsock.conf
.
Пример
Конкретного примера не будет, смотрите нашу обвязку для RabbitMQ.
P.S. Наша версия start-stop-daemon войдет в версию 1.5 Astra Linux Special Edition.
Спасибо большое за Ваш пакет!
Господа, а вот скажите мне как художник художнику.
Нужно мне использовать астровский apache (1.5 Смоленск) как frontend (или reverse proxy) к сервису, работающему на другом хосте.
Причем, apache работает в среде ALD с набором мандатных меток, а сервис — вообще вне мандатного контекста.
При этом web-юзеры работают в ALD и заходят с различными мандатными метками.
Если метка ненулевая, имеем Service unavailable. То есть apache не может достучаться до backend.
С нулевой меткой все работает.
Прописывал apache в privsock, запускал его через execaps -c 0x100.
Проверял эффективные capabilities через pscaps — все выставляется правильно.
Но с ненулевыми мандатными метками — не работает.
Предполагаю багу. Но все же есть еще надежда на мою криворукость.
Need help.