Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как повысить безопасность Docker-контейнеров: лучшие практики

Виталий Богданов
Виталий Богданов
Технический писатель
12 мая 2023 г.
775
5 минут чтения
Средний рейтинг статьи: 5

Docker–контейнеры широко используются программистами. Они автономны, содержат необходимое для быстрого запуска приложения. Работа с containers ускоряет разработку приложений, повышает эффективность труда разработчика.

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

Основы безопасности при работе с Docker–контейнерами

Безопасность контейнеров зависит от встроенных программных компонентов, с которыми взаимодействует разработчик, операционной системы, а также настроек конфигурации. Правильная сборка и запуск позволят обеспечить надежную защиту Docker и наслаждаться всеми преимуществами контейнеров.

Еще один важный совет — регулярное обновление программного обеспечения. В каждом обновлении представлены улучшенные алгоритмы защиты, поэтому пользуйтесь только актуальными решениями.

Рекомендации по сборке образа

Всегда используйте проверенный образ из официальных источников. Оптимальным вариантом в роли базового дистрибутива является Alpine Linux. Эти простые рекомендации снижают вероятность поверхностных атак, а также атак, направленных на цепочки поставок.

Многих разработчиков интересует, что целесообразно выбрать: фиксированный тег либо latest? Указание в тегах определенной версии служит надежной защитой от внесения изменений, способных нарушить работу контейнеров. Но это мешает обновлению параметров безопасности при выходе обновлений, что может снизить уровень безопасности. Если принято решение указать в теге привязку к конкретной версии, следует выбирать самую стабильную.

Не назначайте пользователям полномочия root

Процессы в контейнерах изначально запускаются в режиме root. Для обеспечения безопасности лучше наделять юзера меньшими привилегиями. Для этого укажите перед произвольно назначенным идентификатором пользователя, отсутствующего в конкретном контейнере, символ -u. Выглядит это так:

Docker run -u 3000 <image>

Второй способ создания пользователя без полномочий root:

FROM <базовый образ>
RUN addgroup –S appgroup </span>
&& adduser –S appuser –G appgroup
USER appuser
…<продолжение Dockerfile>…

Такие настройки не позволяют злоумышленникам входить в систему через контейнер.

О возможностях и настройке привилегий

Нельзя запускать контейнеры как привилегированные, также целесообразно запретить добавление новых привилегий в процессе использования контейнера. Для этого задают такие настройки:

--security-opt=no-new-privileges

С целью безопасности не стоит использовать назначенные по умолчанию capabilities. Лучше удалить неактуальное.

Для отслеживания параметров доступа к ресурсам удобно создавать контрольные группы. Это дает возможность контролировать доступ к памяти, а также всем операциям. Для каждого контейнера автоматически выделяется собственная группа. Чтобы не повысить риск хакерских атак, никогда не указывайте атрибут --cgroup-parent.

Для обеспечения безопасности контейнеров Docker лучше ограничить доступ пользователей к памяти. Для этого нужно задать такие параметры:

--memory="400m"
--memory-swap="1g"
--cpus=0.5
--restart=on-failure:5
--ulimit nofile=5
--ulimit nproc=5

Хранение данных и система файлов

Корневая система файлов всех контейнеров не должна изменяться, выберите настройки только для чтения. Это делается так:

docker run --read-only <image>

Правильно реализуйте долговременное хранение информации. Для этого можно использовать тома либо смонтировать каталоги хоста. Какой бы вы не выбрали вариант, в настройках нужно выбрать «только для чтения». Это предотвратит несанкционированное изменение данных.

Если вы применяете временное хранилище для файлов, задайте опции:

Docker run --read-only --tmpfs /tmp:rw ,noexec, nosuid <image>

Параметры сети

Изначально в системе установлен docker0. Не рекомендуется использовать этот bridge-интерфейс. Чтобы отключить эту опцию, задайте параметр --bridge=none. Это исключит возможность взаимодействия контейнеров через сетевое подключение. Для соединений лучше создавать отдельные сети:

docker network create <network_name>
docker run --network=<network_name>

В целях безопасности изолируйте интерфейс хоста путем назначения параметра --net=host.

При работе с контейнерами нужно систематически отслеживать сетевые действия. Это позволит вовремя выявить аномальную активность и предотвратить атаку злоумышленников.

Используйте только доверенные реестры

Использование официального онлайн-реестра от Docker является безопасным решением. Также можно самостоятельно настроить реестр на собственном хосте. Установка реестра за брандмауэром служит дополнительным рычагом для укрепления системы безопасности.

Регулярное сканирование

Не пренебрегайте использованием программ для сканирования уязвимостей. Можно найти как бесплатные решения, так и более функциональный платный софт. Регулярное отслеживание позволит вовремя выявить проблемы и избежать серьезных последствий.

Не открывайте UNIX-сокет

Этот сокет является точкой для входа в API. Открыв сокет по адресу /var/run/docker.sock, вы предоставляете неограниченный доступ к хосту с правами root. Следите, чтобы остальные контейнеры не получили доступ, это очень важный параметр безопасности.

Не включайте секреты и учетные сведения

Изначально любой пользователь, который имеет доступ к образу, может получить сведения о секретах, записанные в Dockerfiles. Чтобы этого не произошло, для хранения секретной информации нужно использовать Docker BuildKit, а в командной строке указывать опцию --secret.

Теперь вы знаете, как защитить Docker от злоумышленников. Соблюдение простых правил позволит избежать серьезных проблем и сохранить информацию.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону