Sobes.tech
Middle
95
questionbank

Почему запуск контейнера от пользователя root в Kubernetes считается плохой практикой?

Ответ от нейросети

sobes.tech AI

Запуск контейнеров от пользователя root в Kubernetes создает повышенные риски безопасности:

  • Высокий уровень привилегий: В случае компрометации контейнера злоумышленник получает root-права внутри контейнера. Это может позволить провести эскалацию привилегий на хост-системе или получить доступ к другим ресурсам кластера.
  • Доступ к файловой системе хоста: Без должных ограничений, root-процесс внутри контейнера может иметь доступ к файловой системе узла, на котором он запущен, что увеличивает вероятность несанкционированных изменений или утечки данных.
  • Уязвимости ядра: Root-пользователь в контейнере может использовать уязвимости ядра Linux для выхода из контейнера и получения контроля над хостом.
  • Сложность аудита: Отслеживать действия root-пользователя сложнее, что затрудняет выявление и расследование инцидентов безопасности.
  • Наследование привилегий: Если из корневого пользователя запускаются другие процессы, они также будут иметь высокий уровень привилегий.

Рекомендуется следовать принципу наименьших привилегий, запуская контейнеры от непривилегированного пользователя. Это можно настроить в манифесте пода с помощью securityContext:

securityContext:
  runAsUser: 1000  # Использование непривилегированного пользователя с ID 1000
  runAsGroup: 3000 # Принадлежность к группе с ID 3000 (опционально)
  allowPrivilegeEscalation: false # Запрет повышения привилегий
readOnlyRootFilesystem: true # Запрет записи в корневую ФС контейнера

Дополнительно можно использовать:

  • Pod Security Policies / Pod Security Admission: Для применения политик безопасности на уровне пода.
  • AppArmor / SELinux: Для дополнительной изоляции контейнеров.
  • Использование образов контейнеров с явно указанным непривилегированным пользователем: В Dockerfile с помощью инструкции USER.
# Пример Dockerfile с указанием пользователя
FROM ubuntu:latest
# Создание непривилегированного пользователя
RUN useradd -ms /bin/bash myuser
# Переключение на созданного пользователя
USER myuser
CMD ["/bin/bash"]