"docker-compose up" как пользователь root или не пользователь root?
После прочтения некоторых статей я все еще не уверен, какой пользователь должен использовать для запуска контейнера Docker. Есть ли какие-либо проблемы с безопасностью при запуске Docker-контейнера от имени пользователя root? Можно ли запускать Docker-контейнеры от имени пользователя root ИЛИ использовать моего обычного пользователя, добавить его в группу "docker" и затем запускать свои контейнеры ИЛИ мне следует создать дополнительного пользователя только для управления / создания Docker-контейнеров?
root @myDockerHost:/opt/myDockerContainer# docker-compose up -d
В.С.
chris @myDockerHost:/opt/myDockerContainer# docker-compose up -d
В.С.
dockerusr @myDockerHost:/opt/myDockerContainer# docker-compose up -d
(Я говорю о пользователях на моем хосте докера, а не о пользователе внутри контейнера!)
3 ответа
r00tusr!
Я голосую за всегда работающие контейнеры как обычные пользователи.
В производственной системе ваши контейнеры не будут запускаться с правами root. Даже в непроизводственных системах пользователям, запускающим ваш контейнер, может быть запрещено запускать программы от имени пользователя root.
Поэтому мне нравится, чтобы они работали как непривилегированный пользователь, даже когда это сложно.
Также есть соображения безопасности. Общее правило, которому следуют профессиональные сисадмины: никогда не запускать что-либо от имени пользователя root, если это действительно, действительно необходимо. Как только программа запускается от имени пользователя root, она полностью контролирует компьютер и может делать с ним все, что ей говорят. Будь то добрые работы, предназначенные автором, или гнусные работы нерадивого, взломавшего авторскую программу из-за уязвимости, которую автор не думал закрывать.
Так как мы наконец-то узнали, что мы действительно не можем предсказать, какие программы имеют недостатки, мы просто больше не рискуем.
Спасибо! Майк
Это мало что меняет. docker-compose
Команда подключается к docker.sock, также известному как API докера, для запуска всех команд контейнера. По умолчанию этот API доступен только пользователю root в linux, поэтому вы часто видите людей, запускающих команды с помощью sudo.
Вы можете настроить docker так, чтобы пользователи без полномочий root имели доступ к этому API, просто убедитесь, что вы доверяете этим пользователям root-доступ на вашем хосте, так как API предоставляет этот уровень доступа. Посмотрите этот ответ, чтобы узнать, как предоставить пользователям такой доступ. Демон dockerd обычно настроен для запуска с правами root, пользователь, обращающийся к этому API, не имеет большого значения (в настоящее время в экспериментальном режиме есть режим без root).
Важной деталью является запуск приложений внутри вашего контейнера от имени пользователя без полномочий root. Это эквивалентно запуску systemd от имени пользователя root и запуску программы от имени пользователя без полномочий root. Вы настраиваете этого пользователя в Dockerfile, docker-compose.yml или в вашем docker run -u
CLI.
Причина, по которой я говорю "маленькая разница", заключается в том, что файл compose может настраивать монтирование хоста с относительным путем. Если вы бежите docker-compose
В качестве пользователя root или другого пользователя эти подключения к хосту могут иметь другой путь, а файлы могут принадлежать другому UID, который может соответствовать или не соответствовать UID вашего приложения внутри контейнера. Кроме того, я не могу думать о какой-либо разнице между бегом docker-compose
как пользователь или root.
В дополнение к ответу @BMitch .
Демон Docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только с помощью sudo.
Docker daemon always runs as the root user
.Если вы не хотите начинать команду docker с помощью sudo, создайте
Unix group
называетсяdocker
и добавьте в него пользователей. Когда демон Docker запускается, он создает сокет Unix, доступный членам группы docker.Группа докеров предоставляет привилегии, эквивалентные пользователю root...
sudo groupadd docker; sudo usermod -aG docker "$USER";
Источник: https://docs.docker.com/engine/install/linux-postinstall [изменено ]
Связано:
https://docs.docker.com/engine/security/#docker-daemon-attack-surface (Поверхность атаки демона Docker ...)
https://docs.docker.com/engine/security/rootless (Выполнить демон Docker как пользователь без полномочий root (режим Rootless) ...)