В конце июня Виш Абрамс (Vish Abrams), архитектор облачного подразделения Oracle, анонсировал открытие исходного трёх своих проектов для контейнеров, используемых в облачных окружениях корпорации: smith, crashcart, railcar.
При работе с контейнерами Docker в Oracle выявили ряд проблем (большие образы, превышение привилегий, Overlayfs и др.), обобщённое решение которых привело к созданию новой концепции под названием «микроконтейнеры» (см. Microcontainer Manifesto). Как подчёркивают в Oracle, эта концепция не приносит новый формат контейнеров, потому что она о методе создания контейнеров, который призван сделать их более безопасными и стабильными. Особенности микроконтейнера Oracle таковы:
содержит единственный исполняемый файл и его зависимости (нет shell’а, нет процесса init);
корневая файловая система — в режиме только для чтения (записи изолированы и обслуживаются примонтированными томами);
у файловой системы нет пользователя или группы-владельца (всем владеет единственный пользователь, у него есть доступ на чтение всего);
отключены timestamps и capabilities для файловой системы;
сборка воспроизводится и каждый раз создаёт только такой же образ.
Для работы с такими контейнерами — микроконтейнерами Oracle — и предназначены утилиты, исходный код которых был открыт:
smith — написанная на Go утилита для сборки микроконтейнеров из пакетов RPM (и репозиториев yum) или готовых контейнеров Docker, результатом становится образ в формате OCI (Open Container Initiative), а также поддерживается работа с образами из репозиториев Docker;
crashcart — написанная на Rust утилита для загрузки (sideload) в существующий контейнер образа с Linux-приложениями (бинарными файлами) для отладки приложения внутри контейнера;
railcar — написанная на Rust реализация спецификации исполняемой среды контейнера (oci-runtime), т.е. аналог эталонного решения runC, но позиционируемый авторами как более безопасный.
Исходный код всех проектов распространяется под двумя Open Source-лицензиями: Universal Permissive License 1.0 и Apache License 2.0.
Неделю назад в GitHub проекта systemd стало известно о проблеме #6237, которая приводила к неожиданному поведению этой init-системы для Linux, если имя системного пользователя начинается с цифры.
При конфигурации сервиса в systemd таким образом, чтобы он запускался из-под пользователя «0day» (или любого другого, имеющего цифру в начале имени, но не являющегося полностью числом), init-система вела себя некорректно, подменяя пользователя на администратора (root). По утверждению Леннарта Поттеринга (Lennart Poettering), автора systemd, такое поведение является правильным, поскольку подобные имена пользователей в Linux формально недопустимы и systemd отклоняет их, но продолжает запуск сервиса «для совместимости».
Впрочем, многие из Linux-сообщества не смогли согласиться с разработчиком, считая, что более правильным результатом «валидации» (как называет это сам Леннарт) такой конфигурации должна стать ошибка при запуске сервиса (как случается, например, в случае отсутствия указанного системного пользователя), а не его запуск из-под другого пользователя (и особенно — root). Леннарт, закрывший тикет с примечанием «not-a-bug», таких взглядов не разделяет.
Своеобразной кульминацией этого спора стала реакция в сообществе другой свободной операционной системы — OpenBSD. В почтовую рассылку openbsd-tech был отправлен патч для «совместимости doas с systemd» с примечанием: «Если имя пользователя начинается с цифры, но не является числом, считать его root».