Установка блеска внутри работающего контейнера не работает (добавлены все возможности)

Мы пытаемся смонтировать файловую систему lustre внутри работающего контейнера и успешно сделали это через контейнеры, работающие в привилегированном режиме.

Однако для тех контейнеров, которые работают в непривилегированном режиме, не удалось установить lustre, даже если Linux предоставляет все возможности -- десятки возможностей -- были включены!

затем

  1. в чем разница между priviledged: True и cap_add: все возможности?
  2. Почему монтирование блеска по-прежнему не удается, когда в контейнер добавлены все возможности?

Ошибка монтирования введите здесь описание изображения

Контейнер непривилегированного режима:

version: "3"
services:
aiart:
cap_add:
  - AUDIT_CONTROL
  - AUDIT_READ
  - AUDIT_WRITE
  - BLOCK_SUSPEND
  - CHOWN
  - DAC_OVERRIDE
  - DAC_READ_SEARCH
  - FOWNER
  - FSETID
  - IPC_LOCK
  - IPC_OWNER
  - KILL
  - LEASE
  - LINUX_IMMUTABLE
  - MAC_ADMIN
  - MAC_OVERRIDE
  - MKNOD
  - NET_ADMIN
  - NET_BIND_SERVICE
  - NET_BROADCAST
  - NET_RAW
  - SETGID
  - SETFCAP
  - SETPCAP
  - SETUID
  - SYS_ADMIN
  - SYS_BOOT
  - SYS_CHROOT
  - SYS_MODULE
  - SYS_NICE
  - SYS_PACCT
  - SYS_PTRACE
  - SYS_RAWIO
  - SYS_RESOURCE
  - SYS_TIME
  - SYS_TTY_CONFIG
  - SYSLOG
  - WAKE_ALARM

image: test_lustre:1.1
#privileged: true
ports:
  - "12345:12345"
volumes:
  - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

person Wallace    schedule 18.02.2021    source источник
comment
Загружены ли у вас модули ядра Lustre перед попыткой монтирования внутри контейнера? Какие-нибудь сообщения в консоли?   -  person LustreOne    schedule 21.02.2021
comment
Да, монтирование успешно выполнено с хоста и из контейнеров, работающих в привилегированном режиме. Это не удается только для контейнеров, работающих в обычном режиме. Я разместил на картинке, содержащей сообщение об ошибке. @LustreOne   -  person Wallace    schedule 22.02.2021
comment
Пожалуйста, добавьте точную команду, которую вы используете для непривилегированного вызова контейнера. Трудно оценить, что на самом деле означают десятки возможностей.   -  person Olesya Bolobova    schedule 22.02.2021
comment
добавлен yaml файл @OlesyaBolobova   -  person Wallace    schedule 22.02.2021


Ответы (2)


Разница между --privileged и all-capabilities заключается в том, что аргумент --privileged снимает все ограничения, налагаемые контроллером cgroup, и отключает чары безопасности, предоставляя доступ для всех устройств. Привилегированный контейнер действительно становится частью операционной системы хоста и имеет доступ даже к конфигурациям AppArmor и SELinux, которые могут не применяться, например, к меткам SELinux.

Когда используется флаг --privileged, он не обеспечивает дополнительной безопасности для базового контейнера, а файловая система ядра не монтируется в контейнер как доступная только для чтения. Фильтрация SECCOMP также отключена. Тем не менее, вы не можете получить больше мощности, чем позволяет текущее пространство имен, например, если вы используете безрутовый демон.

Возможности — это способ настроить мощность root, но все же некоторые защитные чары применяются при выполнении контейнера.

Одна замечательная запись в блоге Red Hat доступна здесь.

Как указано в другом ответе, AppArmor, вероятно, является проблемой в этом случае, и при использовании флага --security-opt apparmor:unconfined при запуске контейнера может быть возможно монтирование. Тем не менее, это следует использовать только временно.

person Niklas    schedule 23.02.2021

Вы пробовали apparmor: unconfined?

version: "3"
services:
  aiart:
    cap_add:
    - SYS_ADMIN
    image: test_lustre:1.1
    security_opt:
    - apparmor:unconfined
    ports:
    - "12345:12345"
    volumes:
      - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

Если это сработает, попробуйте написать собственный профиль apparmor, который соответствует вашим потребностям, потому что unconfined будет менее безопасным, я думаю: https://docs.docker.com/engine/security/apparmor/

person zsolt    schedule 22.02.2021
comment
Ваш ответ правильный, apparmor:unconfined config работает. Но я до сих пор не знаю ответов на свои вопросы, а между тем посты никласа ответили. Поэтому я принял его ответ. - person Wallace; 26.02.2021