Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленными оперативными обновлениями (версия пакета lxc-astra не ниже 1.0.0+ci10)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12.33 (версия пакета lxc-astra не ниже 1.0.0+ci10)


Общая информация

LXC — это система контейнерной изоляции на уровне операционной системы для запуска нескольких изолированных экземпляров операционной системы на одном узле.

  • LXC не использует виртуальные машины, а создаёт виртуальное окружение с собственным пространством процессов и сетевым стеком;
  • Все экземпляры LXC используют один экземпляр ядра операционной системы;
  • LXC основана на технологии cgroups, входящей в ядро ОС;

Известная проблема доступа к ядру ОС, когда root-пользователь LXC-контейнера может выполнить произвольный код в родительской операционной системе (за счёт того, что uid 0 внутри контейнера совпадает с uid 0 базовой системы) решена введением (в версиях LXC начиная с 1.0) «непривилегированных контейнеров», где uid 0 в контейнере соответствует непривилегированному пользователю снаружи, и имеет расширенные права только на свои ресурсы.

Механизм cgroups (control group) — механизм ядра ОС, который ограничивает и изолирует вычислительные ресурсы (процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода) для групп процессов.
Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами, и обеспечивает программное управление ими.

Механизм cgroups предоставляет единый программный интерфейс к целому спектру средств управления процессами,
начиная с контроля единичного процесса (таких как, например, утилита nice),
и вплоть до полной виртуализации на уровне системы LXC.

Механизм cgroups предоставляет следующие возможности:

  • ограничение ресурсов (resource limiting): использование памяти, в том числе виртуальной;

  • приоритизациюустановка приоритетов: разным группам можно выделить разное количество процессорного ресурса и пропускной способности подсистемы ввода-вывода;

  • учёт: подсчёт затрат тех либо иных ресурсов группой;

  • изоляцию: разделение пространств имён для групп таким образом, что одной группе недоступны процессы, сетевые соединения и файлы другой;

  • управление: приостановку (freezing) групп, создание контрольных точек (checkpointing) и их перезагрузку.

Работа с LXC-контейнерами в ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

Предупреждение

Использование механизмов LXC в Astra Linux Special Edition возможно только на нулевом уровне конфиденциальности

Установка пакетов

Установить комплект пакетов для запуска контейнеров LXC можно с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) или из командной строки командами:

Информацияcommand
sudo apt install lxc lxc-astra

Для установки следует использовать пакет lxc-astra версии не ниже 1.0.0.

Информация

После установки пакетов шаблоны lxc контейнеров будут располагаться по пути: /usr/share/lxc/templates/.


Настройка сети под LXC-контейнеры

Информация
Перед установкой пакетов необходимо правильно настроить пути к репозиториям в файле /etc/apt/sources.list: в нём должны быть указаны в качестве источников установочный диск (репозиторий) и диск (репозиторий) со средствами разработки, при этом установочный диск (репозиторий установочного диска) должен быть указан в файле /etc/apt/sources.list первым. В Astra Linux Special Edition некоторые пакеты, нужные для работы  lxc, находятся на втором диске дистрибутива (диск со средствами разработки).
  1. Создать файл /etc/default/lxc-net со следующим содержимым:

    Блок кода
    USE_LXC_BRIDGE="true"
    LXC_BRIDGE="lxcbr0"
    LXC_ADDR="10.0.3.1"
    LXC_NETMASK="255.255.255.0"
    LXC_NETWORK="10.0.3.0/24"
    LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
    LXC_DHCP_MAX="253"
    LXC_DHCP_CONFILE=""
    LXC_DOMAIN=""


  2. В файле /etc/lxc/default.conf строчку:

    Блок кода
    lxc.net.0.type = empty

    заменить на текст:

    Блок кода
    lxc.net.0.type = veth
    lxc.net.0.link = lxcbr0
    lxc.net.0.flags = up


  3. Перезапустить службу lxc-net:

    Command

    sudo systemctl restart lxc-net


  4. Создать контейнер:

    Предупреждение
    Так как в качестве ядра гостевой ОС контейнера используется ядро хост-машины, на хост-машине с Astra Linux Special Edition (x.7 на любом уровне защищенности или 1.6) обязательно нужно использовать шаблон astralinux-se, а для Astra Linux Common Edition – шаблон astralinux-ce. Следует также помнить, что в качестве источника пакетов для сборки контейнера используется репозиторий хост-машины, указанный первым в файле /etc/apt/sources.list.


    Command

    # для Astra Linux Specail Edition:
    sudo lxc-create -t astralinux-se -n container-1

    для Astra Linux Common Edition:
    sudo lxc-create -t astralinux-ce -n container-1

    Для контейнера использовано имя container-1, здесь и далее в командах управления контейнерами имя контейнера задаётся опцией -n;

  5. При работе в Astra Linux Special Edition добавить к параметрам контейнера монтирование файловой системы  /parsecfs. Для этого в конфигурационный файл контейнера (файл /var/lib/lxc/<имя_контейнера>/config) добавить строку с указанием монтируемого ресурса и точки монтирования (все пути указываются относительно хост-системы):

    Command
    echo "lxc.mount.entry = /parsecfs parsecfs none bind 0 0" | sudo tee -a /var/lib/lxc/container-1/config


  6. Запустить созданный контейнер:

    Command

    sudo lxc-start -n container-1


  7. Дождаться, когда в контейнере заработает сетевой интерфейс, т.е. когда команда:

    Command
    sudo lxc-info -n container-1 -iH

    станет выдавать IP-адрес контейнера.

  8. Войти в контейнер, используя полученный адрес (имя пользователя - admin - задано в команде, для входа указать пароль пользователя, устанавливаемый по умолчанию - astralinux):

    Command
    ssh -l admin `sudo lxc-info -n container-1 -iH`


Типовые операции с LXC-контейнерами

  1. Запуск:

    Command
    sudo lxc-start -n <имя_контейнера>


  2. Остановка:

    Command
    sudo lxc-stop -n <имя_контейнера>


  3. Просмотр всех контейнеров:

    Command
    sudo lxc-ls -f


  4. Сетевой вход в контейнер:

    Command
    ssh -l admin 10.10.10.100

    (возможна задержка примерно в минуту, в течение которой ssh-сервер стартует внутри контейнера). Пароль по умолчанию — astralinux.

    Предупреждение
    важно
    Важно: после первого
    логина нужно
    входа в систему необходимо сменить пароль
    для
    пользователя admin
    на более надёжный командой passwd;
    .



  5. Удаление контейнера:

    Command
    sudo lxc-destroy -n  <имя_контейнера>


  6. Также, в случае использования контейнера в Astra Linux Common Edition для входа можно использовать консоль:

    Command
    sudo lxc-console -n  <имя_контейнера>


  7. Внутри контейнера по умолчанию команда ping запрещена для администратора (точнее, по умолчанию запрещено использование протокола ICMP). Для разрешения выполнения команды ping внутри контейнера:
    1. Определить идентификатор пользователя:

      Command
      Titleid
      uid=1000(admin) gid=1001(astra-admin) groups=1001(astra-admin),27(sudo),333(astra-console)


    2. Разрешить группе пользователя (в примере - группе astra-admin с идентификатором 1001) использование протокола ICMP:

      Command
      Titlesudo sysctl -w net.ipv4.ping_group_range="1001 1001"
      net.ipv4.ping_group_range = 1001 1001

      или разрешить использование протокола ICMP всем:

      Command
      Titlesudo sysctl -w net.ipv4.ping_group_range="0 2147483647"
      net.ipv4.ping_group_range = 0 2147483647


  8. Порядок действий при создании моментального снимка контейнера LXC-контейнера в Astra Linux Special Edition:

    1. Остановить контейнер:

      Command
      sudo lxc-stop -n container-1


    2. Включить параметр /parsecfs/unsecure_setxattr:

      Command
      echo 1 | sudo tee /parsecfs/unsecure_setxattr


    3. Создать моментальный снимок, используя привилегию PARSEC_CAP_UNSAFE_SETXATTR:

      Command
      sudo execaps -c 0x1000 -- lxc-snapshot -n <имя_контейнера>


    4. Выключить параметр /parsecfs/unsecure_setxattr:

      Command
      echo 0 | sudo tee /parsecfs/unsecure_setxattr

      Остальные команды работы с моментальными снимками (lxc-snapshot -L, lxc-snapshot -r) включения /parsecfs/unsecure_setxattr и наличия привилегии PARSEC_CAP_UNSAFE_SETXATTR не требует.

Внутри контейнера, при правильно настроенной сети (при доступных репозиториях), можно устанавливать и настраивать программы так же, как и на обычном компьютере.