Прежде всего, только доверенные пользователи должны иметь право управлять вашим демоном Docker.
Демон docker по умолчанию запускается от имени пользователя root при установке Debian Bullseye. Добавление пользователя в докер
group предоставляет этому пользователю псевдо-рут-доступ из-за того, что он контролирует демон docker, имеющий такой объем доступа. Каждый пользователь в группе докеров будет иметь полный контроль над хостом и другими контейнерами и может запускать контейнер, который --публиковать
любой порт.
Есть несколько вариантов обеспечения безопасности доступа пользователей к докеру.
- Докер без рута
судо
- API
1. Докер без рута
А настройка докера без рута позволит каждому пользователю запускать демона докеров. Для портов ниже 1024 необходимо соблюдать информация о непривилегированных портах bob, поскольку каждый пользователь будет «владеть» своим демоном. Докер также предоставляет соответствующее руководство. Это не помешает Анне взять порт Боба.
2. судо
Самый простой способ позволить пользователям запускать команды docker — предоставить скрипт, управляемый root, через sudo, который либо статичен, либо управляет пользовательским вводом для необязательных аргументов:
#!/бин/баш
docker run --detach --publish 1300:1300 anna/app-image
анна ALL=(root) NOPASSWD: /usr/local/bin/start-anna-image
Если вы хотите, чтобы пользователи могли добавлять свои собственные параметры, вам нужно быть очень осторожным при контроле их ввода, так как это очень легко сделать.
3. Плагин авторизации или API для Docker
Поскольку Docker не предоставляет никакого уровня авторизации для демона, вам нужно добавить что-то для управления доступом пользователей.
Docker предоставляет встроенный плагин авторизации фреймворк для этого. Некоторые примеры opa-docker-authz и casbin-authz-плагин
Вы можете предоставить пользователям доступ к форме прокси-API, которая обеспечивает аутентификацию и авторизацию того, что передается в Docker REST API. Существуют библиотеки докеров для большинства языков программирования.Kubernetes+RBAC — это пример API, который находится перед демоном Docker и контролирует доступ (просто очень большой/сложный, который делает гораздо больше).