#ubuntu #docker #access-control
#ubuntu #docker #контроль доступа
Вопрос:
Я пытаюсь запустить контейнер docker для приложения на основе smack. Итак, добавили security=smack
в ubuntu host grub и перезагрузили.
Теперь на хосте ubuntu smack работает, выполняя эти две команды:
mkdir smackdir
mount -t smackfs smack smackdir
Цель состоит в том, чтобы иметь возможность запускать команду монтирования smackfs в контейнере.
Однако все контейнеры docker находятся в остановленном состоянии, и команда docker start ...
просто зависает. Создание нового контейнера также не работает, он просто зависает.
На странице docker run-command-reference упоминаются два варианта --cap-add MAC_OVERRIDE
и --cap-add MAC_ADMIN
. В нем также упоминается the Smack LSM
, что дизайн есть. Пробовал варианты с помощью команд docker run или docker start, безуспешно. Как заставить его работать?
Версия ubuntu — 16.04.1 LTS, а docker 1.10.3 от ubuntu.
Подробные шаги:
Вытащил образ ubuntu, и он нормально работал с безопасностью ядра по умолчанию:
$ docker pull ubuntu
$ docker run -it -d --privileged ubuntu /bin/bash
Измените /etc/default/grub
, чтобы это выглядело следующим образом, и запустите update-grub
, чтобы обновить меню grub. Затем перезагрузитесь.
# grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub
###GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX_DEFAULT="security=smack"
# update-grub
После перезагрузки смонтируйте smackfs на хосте ubuntu, все работает нормально.
# mkdir smk
# mount -t smackfs smack smk
Приведенные ниже команды docker работают хорошо. Это показывает, что контейнер cranky_roentgen
был остановлен:
$ docker images
$ docker ps -a
Запустите контейнер, он зависает навсегда:
$ docker start cranky_roentgen
Команда с --privileged
зависает тоже навсегда:
$ docker run -it -d --privileged ubuntu /bin/bash
Команда для использования --cap-add
тоже зависает навсегда:
$ docker run -it -d --cap-add=MAC_OVERRIDE --cap-add=MAC_ADMIN ubuntu /bin/bash
Использование strace
останавливается при вызове futex()
:
$ strace docker run -it -d --cap-add=MAC_OVERRIDE --cap-add=MAC_ADMIN ubuntu /bin/bash
Вот последние несколько строк strace
из приведенного выше, в которых показан фьютекс без закрывающих круглых скобок:
mmap(0xc81ffe0000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc81ffe0000
stat("/home/dkr/.docker/config.json", 0xc8203385e8) = -1 ENOENT (No such file or directory)
futex(0x12fe988, FUTEX_WAIT, 0, NULL
^Cstrace: Process 1603 detached
<detached ...>
Комментарии:
1. Пожалуйста, укажите подробную информацию о командах, которые вы выполняете, и образе, который вы используете.
2. обновлено с подробными шагами команд