При проведении аудита безопасности мы выявили критические уязвимости, типичные для Docker-инфраструктур. Основная из них: доступ к Docker daemon эквивалентен root-доступу к хосту. Достаточно одной команды, чтобы получить полный доступ к файловой системе сервера:
# Так НЕ должно быть в продакшене:
docker run --rm -it -v /:/rootfs ubuntu bash
# Вы получаете root-доступ ко всей ФС хоста через /rootfs
У клиента все разработчики имели доступ к Docker socket, что фактически давало каждому из них привилегии суперпользователя. Кроме того, большинство образов из Docker Hub запускали процессы от root без возможности изменить это поведение.
Наша команда внедрила многоуровневую систему защиты:
1. Непривилегированные контейнеры. Каждый Dockerfile мы переписали с явным указанием пользователя:
FROM python:3.11-slim
RUN groupadd -r appuser && useradd -r -g appuser -d /app appuser
WORKDIR /app
COPY --chown=appuser:appuser . .
USER appuser
CMD ["python", "main.py"]
2. Ограничение capabilities. В docker-compose мы явно ограничили привилегии каждого контейнера:
services:
payment-api:
image: registry.internal/payment-api:2.1.0
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
3. Контроль доступа к Docker socket. Мы убрали прямой доступ к socket и внедрили Portainer с RBAC для управления контейнерами.
4. Использование --mount вместо -v. Флаг -v автоматически создаёт каталоги с правами root, а --mount требует существования целевого каталога, что позволяет контролировать права.
5. Приватный registry. Мы развернули Harbor как приватный registry с автоматическим сканированием образов на уязвимости через Trivy.
Оставить комментарий