[Def] Security

Docker capabilities

У докер контейнеров есть возможность ограничивать или предоставлять доступ к какой-то функциональности (например, доступ к сетевым интерфейсам хоста, или дать возможность контейнеру работать с группами, менять их и тп).

В целях безопасности:

Обязательны для блокировки:

  • SYS_CHROOT

  • SYS_PTRACE

  • NET_RAW

  • NET_ADMIN

  • SYS_ADMIN

Опциональны для блокировки (рекомендуется для собственных сервисов, дополнение к обязательным):

  • FSETID

  • SETUID

  • SETGID

  • CHOWN

  • NET_BIND_SERVICE

Не надо использовать директиву privileged.

Во всех образах должны быть созданы отдельные пользователи, т.е. запрещено использование пользователя root (uid=0)

Часть капабилити будут выключены в принудительном порядке, поэтому сервис надо разрабатывать с учетом этого. Вы обязательно должны дропнуть (cap_drop) следующие капабилити: FSETID, SETUID, SETGID, SYS_CHROOT, SYS_PTRACE, CHOWN, NET_RAW, NET_ADMIN, SYS_ADMIN, NET_BIND_SERVICE, подробнее: https://docs.docker.com/compose/compose-file/compose-file-v3/#cap_add-cap_drop

Безопасность Docker-контейнеров

Хороший материал об обеспечении безопасности Docker'а. Начиная от правильной конфигурации самого демона, и заканчивая настройкой seccomp (позволяет ограничить список системных вызовов, доступных конкретному приложению) и Docker secrets.

https://0x00sec.org/t/securing-docker-containers/16913

Last updated