ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как выполнить установку Docker без рута (в Ubuntu и Debian)

Как выполнить установку Docker без рута (в Ubuntu и Debian)

Узнайте, как установить Docker в режиме без рута, чтобы демон работал от имени пользователя root, а контейнеры работали от имени обычного пользователя.

 

Что такое безрутовый Docker?

Обычно, когда вы устанавливаете Docker, ему требуются полные права доступа (root) в хост-системе. Это создает потенциальную проблему безопасности, поскольку и контейнеры, и (демон) служба Docker будут работать от имени пользователя root. При установке Docker без рута только демон Docker работает от имени пользователя root, а контейнеры работают от имени обычных пользователей.

Почему это имеет значение? Потому что, если служба, работающая в контейнере, скомпрометирована, злоумышленник может получить доступ и к системным файлам. Нет реальной изоляции контейнеров.

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

Эта установка без рута теперь доступна в самом Docker, и вам не нужно использовать Podman только для этой функции.

В этой статье мы объясним, как установить Docker без root-доступа. Но прежде чем я покажу вам эти шаги, давайте сначала обсудим недостатки этого режима.

 

Недостаток запуска Docker в режиме без рута

Самым большим недостатком этого режима является сеть, и эти проблемы также присутствуют в Podman.

По умолчанию Docker использует сеть без рута.

Потому что он самый быстрый, со скоростью до 30 Гбит/с и поддерживает IPv4 и IPv6.

Но у него есть проблемы.

У контейнеров не будет внешнего IP-адреса запроса, и все запросы будут появляться с адреса 127.0.0.1.

Это большая проблема, особенно если вы хотите установить защиту, которая ограничивает распределенные атаки типа «отказ в обслуживании» (DDOS), потому что все запросы будут исходить с одного и того же адреса.

Использование режима Slirp4netns решает эту проблему и показывает исходный адрес запроса. Но у него также есть две проблемы.

 

Предпосылки

Безрутовый режим не использует липкие биты. Им нужны newuidmap и newgidmap.

Вот почему вы должны убедиться, что пакеты newuidmap и newgidmap установлены (через пакет uidmap) и что существует 65 536 дочерних идентификаторов.

newuidmap проверяет, что вызывающий объект является владельцем процесса, указанного pid.

id -u
1001
whoami
testuser

 

Затем убедитесь, что у пользователя есть 65 536 дополнительных UID:

grep ^$(whoami): /etc/subuid
testuser:231072:65536
grep ^$(whoami): /etc/subgid
testuser:231072:65536

 

Что означают эти цифры? Первое число — это первый идентификатор, который разрешено использовать, а следующее указывает, сколько идентификаторов у вас есть. Например, он начинается с 231072, идентификатор 0 означает 231072, а идентификатор 1000 означает 241072.

Установите пакеты dbus-user-session и fuse-overlayfs.

Для Debian используйте команду для установки dbus-user-session:

sudo apt install -y dbus-user-session

 

А затем установите fuse-overlayfs:

sudo apt install -y fuse-overlayfs

 

Рекомендуется использовать ядро ​​5.11 или более позднюю версию.

 

Установка докера в безрутовом режиме

Теперь вы подошли к основной части. Первая часть — это обычная установка Docker, а затем переходите к части без рута.

Мы покажем шаги для Ubuntu.

 

Установите обычные пакеты Docker

Сначала удалите любой существующий пакет Docker:

 sudo apt remove docker docker-engine docker.io containerd runc

 

Затем установите Docker на Ubuntu:

 sudo apt update
 sudo apt install docker-ce docker-ce-cli containerd.io

 

Убедитесь, что Docker Engine установлен правильно, запустив образ hello-world.

sudo docker run hello-world

 

Учитывая, что демон Docker уже запущен, сначала отключите его.

sudo systemctl disable --now docker.service docker.socket

 

Установите безрутовый пакет

Теперь установите пакет docker-ce-rootless-extras, загрузив официальный скрипт с помощью команды curl:

curl -fsSL https://get.docker.com/rootless | sh

 

Следуйте инструкциям на экране, и у вас будет установлен Docker без рута.

В конце этого экрана установки будут написаны две вещи: export=xxx

Скопируйте и вставьте их в последний файл .bashrc или, если вы используете ZSH, в файл .zshrc. Исходные файлы rc, которые вы только что изменили.

После завершения установки запустите демон docker без рута:

 systemctl --user start docker

Автоматически запускать докер без рута при каждом запуске:

systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
Exit mobile version