безопасность docker smack в ubuntu

#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. обновлено с подробными шагами команд