Безопасная контейнеризация: запуск контейнеров от имени пользователя без полномочий root

Контейнеризация произвела революцию в мире разработки и развертывания программного обеспечения, предоставив легкий и эффективный способ упаковки приложений. Однако при запуске контейнеров от имени пользователя root по умолчанию возникают потенциальные угрозы безопасности. Чтобы снизить эти риски, крайне важно запускать контейнеры с правами пользователя без полномочий root. В этой статье мы рассмотрим несколько способов запуска контейнеров от имени пользователя без полномочий root, а также приведем примеры кода.

Методы запуска контейнеров от имени пользователя без полномочий root:

Метод 1: использование директивы USER в Dockerfile
Директива USER в Dockerfile позволяет указать пользователя и группу, от имени которых должен запускаться контейнер. Создав в контейнере пользователя без полномочий root и переключившись на него, вы можете повысить безопасность.

Пример файла Docker:

FROM ubuntu:latest
RUN groupadd -r myuser && useradd -r -g myuser myuser
USER myuser
...

Метод 2: использование флага –user в команде запуска Docker.
При запуске контейнера с помощью команды docker runвы можете указать флаг --user, за которым следует идентификаторы пользователя и группы пользователя без полномочий root.

Пример:

docker run --user 1001:1001 myimage

Метод 3. Использование контекста безопасности Kubernetes
Если вы используете Kubernetes для оркестровки контейнеров, вы можете использовать функцию контекста безопасности, чтобы определить идентификаторы пользователей и групп для контейнера.

Пример:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  securityContext:
    runAsUser: 1001
    runAsGroup: 1001
    ...

Метод 4. Изменение прав доступа к файлам в контейнере.
Вы также можете изменить права доступа к файлам в контейнере, чтобы гарантировать, что пользователь без полномочий root имеет достаточный доступ к необходимым файлам и каталогам.

Пример:

FROM ubuntu:latest
RUN groupadd -r myuser && useradd -r -g myuser myuser
RUN chown -R myuser:myuser /app
USER myuser
...