← Назад ко всем вопросам

Какой user будет при запуске контейнера

1️⃣ Как кратко ответить

По умолчанию контейнер Docker запускается от имени пользователя root, если в Dockerfile не указано иное с помощью инструкции USER. Это позволяет контейнеру иметь полный доступ к файловой системе контейнера, но может представлять риск безопасности.

2️⃣ Подробное объяснение темы

Когда контейнер Docker запускается, он наследует пользовательские права, которые определены в его образе. По умолчанию, если в Dockerfile не указано иное, контейнер запускается от имени пользователя root. Это означает, что процессы внутри контейнера имеют полный доступ к файловой системе контейнера и могут выполнять любые команды, которые разрешены пользователю root.

Зачем это нужно

Запуск контейнера от имени пользователя root может быть удобным для разработки и тестирования, так как это позволяет избежать проблем с правами доступа. Однако в производственной среде это может представлять риск безопасности, так как злоумышленник, получивший доступ к контейнеру, может использовать права root для выполнения вредоносных действий.

Как это работает

В Dockerfile можно указать, от имени какого пользователя должен запускаться контейнер, используя инструкцию USER. Это позволяет ограничить права доступа процессов внутри контейнера и повысить безопасность.

Пример Dockerfile

# Используем базовый образ Ubuntu
FROM ubuntu:latest
​
# Создаем нового пользователя с именем 'appuser'
RUN useradd -ms /bin/bash appuser
​
# Устанавливаем пользователя 'appuser' как текущего
USER appuser
​
# Указываем рабочую директорию
WORKDIR /home/appuser
​
# Копируем файл в контейнер
COPY script.sh .
​
# Делаем скрипт исполняемым
RUN chmod +x script.sh
​
# Запускаем скрипт
CMD ["./script.sh"]

Объяснение кода

  • FROM ubuntu:latest: Указывает базовый образ Ubuntu, который будет использоваться для создания контейнера.
  • RUN useradd -ms /bin/bash appuser: Создает нового пользователя с именем appuser и домашним каталогом.
  • USER appuser: Устанавливает appuser как текущего пользователя для выполнения последующих команд. Это ограничивает права доступа процессов, которые будут запущены в контейнере.
  • WORKDIR /home/appuser: Устанавливает рабочую директорию для последующих команд.
  • COPY script.sh .: Копирует файл script.sh из текущей директории на хосте в рабочую директорию контейнера.
  • RUN chmod +x script.sh: Делает скрипт script.sh исполняемым.
  • CMD ["./script.sh"]: Указывает команду, которая будет выполнена при запуске контейнера.

Применение

Указание конкретного пользователя для запуска контейнера является важной практикой безопасности в DevOps. Это позволяет минимизировать потенциальные риски, связанные с эксплуатацией уязвимостей в приложениях, работающих внутри контейнера.

Тема: Docker / Контейнеры
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки