Какой 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. Это позволяет минимизировать потенциальные риски, связанные с эксплуатацией уязвимостей в приложениях, работающих внутри контейнера.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться