Вопрос или проблема
Я обнаружил, что официальные образы mariadb на Docker Hub имеют большое количество уязвимостей (включая 3 с критической степенью опасности). Большинство из них вызваны пакетом golang / stdlib / 1.18.2
.
Я наблюдал за статистикой несколько месяцев и надеялся на временную проблему (и что со временем количество уязвимостей снизится). Однако, ситуация не стала значительно лучше (согласно данным). Это действительно не дает мне уверенности в том, что я могу это использовать и спокойно спать ночью. Также официальные контейнеры mysql имеют эту проблему, так что это тоже не вариант. Поэтому я попробовал создать очень простой кастомный контейнер для MariaDB самостоятельно и посмотреть, что сообщит docker scout quickview
.
Я создал очень простой Dockerfile:
FROM ubuntu:24.04
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get -y install --no-install-recommends mariadb-server
CMD [ "/bin/sh", "-c", "sleep", "infinity" ]
выполнил docker build .
и docker scout quickview
:
Я хотел использовать ОС, официально поддерживаемую MariaDB (ubuntu 24.04 поддерживается, 24.10 – нет согласно Политике инжиниринга MariaDB PLC, опубликованной 2025-02-17). Но, если мы будем немного более смелыми, то могли бы использовать Ubuntu 24.10 и иметь 0 CVE (тот же Dockerfile, просто заменив FROM ubuntu:24.04
на FROM ubuntu:24.10
):
Конечно, контейнер Docker может потребовать некоторые изменения в конфигурационных файлах для использования. И порт mariadb нужно будет выставить и так далее. Но, я полагаю, мне не понадобятся дополнительные пакеты только для запуска сервиса mariadb, которые могли бы ввести дополнительные уязвимости безопасности.
ИДЕЯ: Я мог бы создать собственный docker-образ для mariaDB и отслеживать его с помощью результатов docker scout
(автоматически каждую ночь) и, возможно, время от времени пересобирать его (возможно, также тестировать внешне и публиковать его в реестр Docker, либо самохостинговый, либо приватный репозиторий на hub.docker.com).
Поскольку MariaDB должна была быть протестирована поддерживающими ее разработчиками для работы с этой ОС, не должно быть реальных проблем с Ubuntu 24.04.
ВОПРОСЫ:
Это оставляет меня с следующими вопросами:
- Я не упустил что-то важное?
- Является ли запуск этого контейнера (вместо готового) более безопасным вариантом? Пожалуйста, объясните почему…
- Почему пакет
golang / stdlib / 1.18.2
вообще присутствует в официальном образе mariadb? Возможно, мы могли бы легко изменить образ и удалить эту часть, удалив необязательный пакет?
Спасибо за ваше время и поддержку!
.
Ответ или решение
Теоретическая часть
Использование кастомных Docker-образов — это вполне распространённая практика в сфере IT, особенно когда речь идёт об обеспечении безопасности и минимизации потенциальных уязвимостей. Основная идея заключается в том, что пользователь создаёт свой образ, который включает только те компоненты и зависимости, которые необходимы для выполнения конкретной задачи. Таким образом, уменьшается поверхность атаки и риск возникновения уязвимостей.
В вашем случае кастомный образ MariaDB создан на базе Ubuntu 24.04, который является официально поддерживаемым дистрибутивом компанией MariaDB. Работая с кастомными образами, важно проводить регулярные проверки на наличие уязвимостей (используя инструменты вроде Docker Scout) и обновлять систему безопасности путем пересборки образов.
Теперь давайте рассмотрим ваши вопросы.
Пример
Вы создали очень минимальный Dockerfile для MariaDB, который использует Ubuntu 24.04. Ваш подход показывает, что кастомный образ имеет меньше уязвимостей по сравнению с официальным образом из Docker Hub. Это указывает на то, что вы можете контролировать среду и гарантировать, что в неё не установлены лишние и потенциально уязвимые пакеты.
Вы также предложили более авантюрный вариант с использованием Ubuntu 24.10, который привел к нулевым уязвимостям, но не является официально поддерживаемым. Такая стратегия может быть применима в тестовых средах, но для производственных систем стоит придерживаться поддерживаемых дистрибутивов.
Применение
-
Неупущенные важные моменты: Вы упомянули, что планируете мониторить образ через Docker Scout и периодически его пересобирать. Это важный момент. Однако, убедитесь, что вы также тестируете обновления и внимательно мониторите любые изменения в списках поддерживаемых ОС со стороны MariaDB. Не забывайте о документации и проверке конфигурационных файлов MariaDB — это может потребовать дополнительных настроек в контейнере.
-
Безопасность кастомного образа: Ваша стратегия создания кастомного образа, вероятно, является более безопасной по сравнению с использованием официальных образов, которые могут содержать лишние пакеты и, соответственно, больше уязвимостей. Ваш подход позволяет вам контролировать, какие компоненты и версии устанавливаются.
-
Почему golang/stdlib в официальном образе: Ответ на этот вопрос может быть связан с зависимостями в самом разработанном MariaDB или инструментах, вокруг него. Хотя Golang может быть не обязательным для самого MariaDB, он может быть частью других инструментов или скриптов для администрирования. С осторожностью экспериментируя, вы можете попробовать удалить этот пакет, но это требует тщательного тестирования, чтобы убедиться, что другие компоненты не полагаются на него.
Заключение
Создание кастомных образов MariaDB представляется обоснованным шагом для снижения уязвимостей и повышения безопасности вашего стека приложений. При этом важно оставаться внимательным к изменениям в поддержке Операционных Систем и следить за тем, как ведутся зависимости и версияция пакетов.
Эти шаги помогут вам обеспечить безопасную и стабильную работу MariaDB в контейнеризованном окружении. Не забывайте о важности автоматизации мониторинга безопасности и перетестировании после каждого важного обновления компонентов образа.