ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Как выполнить установку 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