Docker

Версия 65.1 от omaltsev на 01.10.2021 16:10

Установка

$ sudo apt install docker.io
Добавить пользователя в группу docker, перелогиниться.
$ sudo usermod -aG docker ПОЛЬЗОВАТЕЛЬ

Работа в условиях ЗПС и MPROTECT

Особенности работы docker-контейнеров в ОС ОСнова с включенными механизмами защиты памяти PaX MPROTECT и/или замкнутой программной среды (ЗПС) состоят в следующем:

Если контейнер не базируется на ОС ОСнова, для работы в режиме ЗПС, все его содержимое должно быть подписано. Это возможно сделать через наложение дампа:
$ setfattr --restore=<файл дампа>
либо через подпись всех файлов экспортированного контейнера с последующей запаковкой (с учетом расширенных атрибутов) и импортом.
Например, рассмотрим Alpine Linux (выполнять при отключенной ЗПС):
$ docker run -it --rm --name alpine alpine ash
В отдельной консоли:
$ mkdir /tmp/alpine
$ cd /tmp/alpine
$ docker export - alpine | tar - -x
$ for f in `find . -type f`
do
sudo evmctl -k <закрытый ключ> ima_sign $f
done
$ sudo tar --xattrs-include=user.pax.flags --xattrs-include=security.ima
 --xattrs-include=security.NESSCTX
 -C /tmp/alpine -c . | docker import - alpine-signed

 

Если защита памяти PaX MPROTECT не отключена и контейнер не базируется на ОС ОСнова, некоторое ПО, например Java, не будет функционировать корректно в контейнере.
Возможна установка в контейнер paxrat или ручная разметка исключений через
sudo setfattr -n user.pax.flags -v m <filename>
или через наложение дампа
sudo setfattr --restore=<dump>

или ипользование (если в ОС образа отсутствует paxrat)

paxctl
chpax

или через запуск контейнера в контексте безопасности NESS, отключающем защиту памяти PaX MPROTECT.

Контейнер может иметь определенный установленный контекст безопасности NESS. По умолчанию контекст пустой.
Возможен запуск всех контейнеров с контекстом, отключающим защиту памяти PaX MPROTECT.
Для этого в файле  /lib/systemd/system/docker.service в конце секции [Service]  дописать:
NESSCTX=t=30,50
И перечитать конфигурацию, перезапустить Docker.
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Создание docker-образа на базе ОС ОСнова

Для создания docker-образа на базе ОС ОСнова требуется наличие первого установочного диска, или его iso образа, или доступ к сетевому репозиторию (в этом случае диск не монтируется, в приведенной команде debootstrap заменить /mnt на адрес репозитория, например https://dl.nppct.ru/onyx/stable/repos/).

$ sudo apt install debootstrap
$ sudo mount /dev/cdrom /mnt
(или $ sudo mount -o loop onyx-Version-disk1.iso /mnt)
$ mkdir /tmp/image
$ cd /tmp/image
$ sudo debootstrap --variant=minbase --keyring /usr/share/apt/osnova.gpg  --components=main,contrib,non-free onyx onyx /mnt
$ sudo tar --xattrs-include=user.pax.flags --xattrs-include=security.ima --xattrs-include=security.NESSCTX  -C onyx/ -c . | docker import - onyx
$ sudo umount /mnt

Запуск контейнера:
$ docker run -it --rm onyx bash