Выполнение команды от имени другого пользователя
На этом шаге вы узнаете, как выполнять команды внутри работающего контейнера от имени конкретного пользователя. По умолчанию docker exec
выполняет команды от имени root внутри контейнера, но вы можете указать другого пользователя с помощью флага -u
или --user
. Это важно для безопасности и соблюдения принципа минимальных привилегий.
Продолжим использовать контейнер my-nginx
. Сначала посмотрим, от имени какого пользователя выполняется команда ls /
по умолчанию.
docker exec my-nginx whoami
Скорее всего, вывод будет root
, так как это пользователь по умолчанию для docker exec
.
Теперь попробуем выполнить команду от имени другого пользователя. Образ Nginx обычно запускает процесс Nginx от имени непривилегированного пользователя, часто с именем nginx
. Выполним команду whoami
от имени пользователя nginx
.
docker exec -u nginx my-nginx whoami
Вы должны увидеть вывод nginx
, что подтверждает выполнение команды от имени этого пользователя.
Можно также указать ID пользователя (UID) вместо имени. Чтобы найти UID пользователя nginx
внутри контейнера, посмотрим файл /etc/passwd
.
docker exec my-nginx cat /etc/passwd | grep nginx
Вывод покажет запись для пользователя nginx
, включая его UID и GID (Group ID). Например, это может выглядеть как nginx:x:101:101:nginx user,,,:/nonexistent:/bin/false
. В этом примере UID равен 101
.
Теперь выполним команду whoami
, используя UID. Замените 101
на фактический UID, если он отличается в вашем случае.
docker exec -u 101 my-nginx whoami
Вывод снова должен быть nginx
, что демонстрирует возможность использования как имени пользователя, так и его UID для указания пользователя в docker exec
.
Выполнение команд от имени непривилегированного пользователя — это хорошая практика безопасности, особенно при работе с конфиденциальными файлами или выполнении операций, не требующих прав root.