Безопасность Docker: Rootless режим, сброс Linux Capabilities и Seccomp
- Уязвимость Breakout/Container Escape из-за запуска демона Docker от пользователя root.
- Процессы внутри контейнера имеют избыточные привилегии ядра (
CAP_SYS_ADMIN,CAP_NET_RAW). - Претензии аудита безопасности и CIS Docker Benchmark.
1. Сброс всех привилегий ядра и выдача только необходимых
# Сброс всех возможностей и выдача только разрешения привязки портов < 1024
docker run -d \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--read-only \
--security-opt=no-new-privileges:true \
nginx2. Запрет повышения привилегий через SUID
Добавьте флаг no-new-privileges для предотвращения эскалации через утилиты sudo/suid:
docker run --security-opt=no-new-privileges:true my_untrusted_app3. Применение кастомного профиля фильтрации системных вызовов Seccomp
docker run --security-opt seccomp=/etc/docker/seccomp/custom_profile.json my_app4. Установка и запуск Rootless Docker (без прав root на хосте)
# Установка пакетов
apt-get install -y uidmap dbus-user-session
# Запуск скрипта настройки от обычного пользователя (не root!)
dockerd-rootless-setuptool.sh install
# Экспорт переменных окружения
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock Частые вопросы (FAQ)
Чем опасен флаг --privileged?
Флаг --privileged передает контейнеру все возможности ядра (Linux Capabilities) и отключает профили AppArmor/Seccomp. С ним root в контейнере имеет полный доступ к хосту и дисковым накопителям.
Каких ограничений требует флаг --read-only?
Он монтирует корневую ФС контейнера только на чтение. Если приложению нужны временные каталоги для работы, их монтируют через tmpfs: --tmpfs /tmp --tmpfs /run.