Изменения документа Docker

Редактировал(а) atsarkov 18.04.2025 10:04

От версии 68.1
отредактировано omaltsev
на 01.10.2021 16:10
Изменить комментарий: К данной версии нет комментариев
К версии 3.1
отредактировано Роман Воробьев
на 31.07.2021 18:07
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Родительский документ
... ... @@ -1,1 +1,1 @@
1 -Sandbox.WebHome
1 +ОСнова.Состав и ПО.WebHome
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.omaltsev
1 +XWiki.rvorobyev
Теги
... ... @@ -1,1 +1,1 @@
1 -docker|pax|mprotect|ЗПС|paxrat
1 +Docker|pax|mprotect|ЗПС
Содержимое
... ... @@ -1,69 +1,18 @@
1 -= Установка =
1 +Главной особенностью Docker в ОСнова является то, что контейнер работает в режимах [[защиты памяти PaX MPROTECT>>]] (ели не отключено) и [[замкнутой программной среды (ЗПС)>>]] (если включено).
2 2  
3 -{{code language="bash"}}$ sudo apt install docker.io{{/code}}
4 -Добавить пользователя в группу docker, перелогиниться.
5 -{{code language="bash"}}$ sudo usermod -aG docker ПОЛЬЗОВАТЕЛЬ{{/code}}
6 6  
7 -= Работа в условиях ЗПС и MPROTECT =
4 +Если защита памяти PaX MPROTECT не отключена и контейнер не ОСнова, некоторое ПО работать в нем не будет. Например Java. Возможна установка paxrat или ручная разметка исключений через setfattr -n user.pax.flags -v m <filename>.
8 8  
9 -Особенности работы [[docker>>https://ru.wikipedia.org/wiki/Docker]]-контейнеров в ОС ОСнова с включенными механизмами [[защиты памяти PaX MPROTECT>>]] и/или [[замкнутой программной среды (ЗПС)>>doc:ОСнова.СЗИ.Замкнутая программная среда (ЗПС).WebHome]] состоят в следующем:
10 10  
11 -Если контейнер не базируется на ОС ОСнова, для работы в режиме [[ЗПС>>doc:ОСнова.СЗИ.Замкнутая программная среда (ЗПС).WebHome]], все его содержимое должно быть подписано. Это возможно сделать через наложение дампа:
12 -{{code language="bash"}}$ setfattr --restore=<файл дампа>{{/code}}
13 -либо через подпись всех файлов экспортированного контейнера с последующей запаковкой (с учетом расширенных атрибутов) и импортом.
14 -Например, рассмотрим [[Alpine Linux>>https://alpinelinux.org/]] (выполнять при отключенной ЗПС):
15 -{{code language="bash"}}$ docker run -it --rm --name alpine alpine ash{{/code}}
16 -В отдельной консоли:
17 -{{code language="bash"}}$ mkdir /tmp/alpine
18 -$ cd /tmp/alpine
19 -$ docker export - alpine | tar - -x
20 -$ for f in `find . -type f`
21 -do
22 -sudo evmctl -k <закрытый ключ> ima_sign $f
23 -done
24 -$ sudo tar --xattrs-include=user.pax.flags --xattrs-include=security.ima \
25 - --xattrs-include=security.NESSCTX \
26 - -C /tmp/alpine -c . | docker import - alpine-signed{{/code}}
27 -
7 +Если контейнер не ОСнова, для работы в режиме ЗПС, его содержимое должно быть подписано.
28 28  
29 29  
30 -= Работа в условиях активных механизмов зашиты памяти MPROTECT =
10 +Контейнер может иметь определенный установленный контекст безопасности NESS. По умолчанию контекст пустой.
31 31  
32 контейнерах, которые не базируется на ОС ОСнова, некоторое ПО, например Java, не будет функционировать корректно на хосте под управлением ОС ОСнова с включенными механизмами [[защиты памяти PaX MPROTECT>>]]. Существует несколько способов решения данной проблемы:
12 +Возможен запуск всех контейнеров с контекстом, отключающим защиту памяти PaX MPROTECT.
33 33  
34 -1. Установка в контейнер **paxrat** или ручная разметка исключений через
35 -{{code language="bash"}}sudo setfattr -n user.pax.flags -v m <filename>{{/code}}
36 -или через наложение дампа
37 -{{code language="bash"}}sudo setfattr --restore=<dump>{{/code}}
38 -1. Использование (если в ОС образа контейнера отсутствует **paxrat**) устаревших утилит **paxctl** и/или **chpax**;
39 -1. Запуск контейнера в контексте безопасности **NESS**, отключающем защиту памяти **PaX MPROTECT**.
40 -КАК?
41 -1. Запуск **всех** контейнеров с контекстом, отключающим защиту памяти **PaX MPROTECT**.
42 -Для этого в файле **/lib/systemd/system/docker.service** в конце секции **[Service]** дописать:
43 -{{code language="bash"}}NESSCTX=t=30,50{{/code}}
44 -И перечитать конфигурацию, перезапустить Docker.
45 -{{code language="bash"}}$ sudo systemctl daemon-reload
46 -$ sudo systemctl restart docker{{/code}}
14 +Для этого в файле ** /lib/systemd/system/docker.service** в секции **[Service]**  дописать:
47 47  
48 -= Запуск docker-контейнера в контексте безопасности NESS =
49 -
50 -Контейнер может иметь определенный установленный контекст безопасности **NESS**, по умолчанию контекст пустой.
51 -КАК?
52 -
53 -= Создание docker-образа на базе ОС ОСнова =
54 -
55 -Для создания [[docker>>https://ru.wikipedia.org/wiki/Docker]]-образа на базе ОС ОСнова требуется наличие первого установочного диска, или его iso образа, или доступ к сетевому репозиторию (в этом случае диск не монтируется, в приведенной команде debootstrap заменить /mnt на адрес репозитория, например [[https:~~/~~/dl.nppct.ru/onyx/stable/repos/>>https://dl.nppct.ru/onyx/stable/iso/]]).
56 -
57 -{{code language="bash"}}
58 -$ sudo apt install debootstrap
59 -$ sudo mount /dev/cdrom /mnt
60 -(или $ sudo mount -o loop onyx-Version-disk1.iso /mnt)
61 -$ mkdir /tmp/image
62 -$ cd /tmp/image
63 -$ sudo debootstrap --variant=minbase --keyring /usr/share/apt/osnova.gpg --components=main,contrib,non-free onyx onyx /mnt
64 -$ sudo tar --xattrs-include=user.pax.flags --xattrs-include=security.ima --xattrs-include=security.NESSCTX -C onyx/ -c . | docker import - onyx
65 -$ sudo umount /mnt
16 +{{code language="none"}}
17 +NESSCTX=t=30,50
66 66  {{/code}}
67 -
68 -Запуск контейнера:
69 -{{code language="bash"}}$ docker run -it --rm onyx bash{{/code}}