Как обезопасить хост докера, чтобы не допустить рутирования
Я пытаюсь сделать докер на сервере более безопасным. Основная проблема заключается в том, что большинство людей говорят, что "если у человека есть доступ к докеру, он тоже может быть пользователем root" для нескольких администраторов это совсем не то, что вы хотели бы.
Чтобы уточнить, они могут использовать -v
и смонтировать /etc
на /mnt
в контейнере и измените теневой файл и получите доступ к хосту. Они могут использовать -d
или привилегированный вариант, чтобы сделать больше тоже.
В общем, есть несколько вещей, которые я хочу "попробовать" и ограничить.
- Объемные крепления
- привилегированный
--add-cap
-d
(определенные предметы?)
Мои идеи пока:
- Присвойте псевдоним bash-скрипту для docker, используйте на нем sudo и повторно выведите все, что они не должны делать.
- Включите удаленный API, защитите его и, возможно, измените прокси с помощью nginx и regex в nginx, чего они не должны делать.
- Использовать другие инструменты? Mesos/Marathon/Swarm/ Верфь / Безотносительно
Необязательными элементами могут быть контейнеры для коммита в git-коде и возможность "проверки" проверять содержимое Dockerfile
и создать образ для них. Затем подпишите это изображение и разверните его автоматически. (но это не дало бы им больше свободы)
Кроме того, удаление объема связывания не является самым хорошим. Было бы намного проще, если бы у нас был плагин для докера, который говорит: "Вы можете монтировать только на /data
, как пользователь X", где USER
в Dockerfile
это пользователь X.
Что-то вроде docker-novolume-plugin уже является хорошим началом для томов, однако не ограничивает объемы связывания.
В конце концов, вопрос будет в том, как я могу позволить пользователям создавать / извлекать / запускать образы докеров как своих собственных пользователей / докеров и не иметь возможности рутировать систему. Не должно быть идеальным, пока оно работает.
1 ответ
Обеспечение docker
Движок требует уделять внимание многим различным аспектам, а глубокая защита всегда связана с уровнями безопасности.
Одно из перечисленных вами требований ограничивает права пользователей docker
двигатель, чтобы сделать, вероятно, является одним из самых важных, так как, на данный момент, docker
Движок не реализует контроль авторизации.
Ваши альтернативы включают в себя:
решения с закрытым исходным кодом, такие как Twistlock, проект, который реализует RBAC и управление политиками для доступа к
docker
APIOpenShift Origin, проект с открытым исходным кодом, который реализует управление доступом на основе ролей в форме ограничений безопасности и детальных политик авторизации. Он довольно прост в развертывании и очень поможет получить готовое решение.
Я также предложил бы изучить различные операционные системы docker
Движок может быть развернут на и будет рекомендовать использовать не ОС общего назначения, а специализированную, такую как Atomic. И Atomic, и OpenShift вместе гарантируют, что вы также сможете:
- Сканируйте ваши изображения регулярно.
- Используйте доверенный реестр
- Определите профили seccomp для ваших контейнеров. Совершенствование этой технологии и ее внедрение - работа в
docker
мир в целом. - Удалите возможности, которые не нужны приложению в контейнере.
- Используйте SELinux. У многих других перечисленных мер безопасности есть ограничения, но SELinux очень хорошо обеспечивает безопасную сеть, когда все остальное терпит неудачу. Несколько примеров: это поможет ограничить доступ к
docker
сокет, он будет контролировать, разрешено ли совместное использование файловых дескрипторов между контейнерами, он может назначать разные уровни MCS для каждого контейнера / группы контейнеров, чтобы изолировать их от хоста и других контейнеров.