Дерево страниц

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 2 Следующий »

В ОССН Смоленск 1.6
для создания дополнительного уровня изоляции приложений
на нулевом уровне конфиденциальности
возможно использование механизмов Firejail (используется в графическом киоске) и LXC

Firejail

Firejail - это система изолированного выполнения графических и консольных приложений.

Целью применения Firejail является:

минимизация риска компрометации основной системы при запуске не заслуживающих доверия или потенциально уязвимых программ.


Для изоляции в Firejail используются:


механизм пространств имён (namespaces)

фильтрация системных вызовов (seccomp-bpf)


После запуска программа и все её дочерние процессы используют отдельные представления ресурсов ядра, таких как сетевой стек, таблица процессов и точки монтирования.

В отличие от LXC, Firejail проще в настройке, и не требует подготовки системного образа: состав контейнера формируется «на лету» на основе содержимого текущей ФС, и удаляется после завершения работы приложения.

Firejail можно применять и для запуска контейнеров LXC.


Предоставляются гибкие средства задания правил доступа к файловой системе:


можно определять к каким файлами и директориям разрешён или запрещён доступ,

подключать для данных временные ФС (tmpfs), ограничивать доступ к файлам или директориям только чтением,

совмещать директории через bind-mount и overlayfs.


Профили изоляции системных вызовов подготовлены для большого числа популярных приложений, в том числе для


Firefox,

Chromium,

VLC



Для выполнения программы в режиме изоляции достаточно указать имя приложения в качестве аргумента утилиты Firejail, например,

firejail firefox

LXC - система виртуализации "контейнеры"

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

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

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

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

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

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

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

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

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

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

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

Работа с LXC-контейнерами в ОССН Смоленск 1.6

Использование механизмов LXC в ОССН Смоленск 1.6 возможно только на нулевом уровне конфиденциальности

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

    1. Разрешить ip_forward, для чего раскомментировать

      net.ipv4.ip_forward=1

      в /etc/sysctl.conf, после чего выполнить в командной строке

      sudo sysctl -p
    2. Настроить macvlan-интерфейс для сети LXC-контейнеров.
      Для этого нужно добавить в /etc/network/interfaces секцию вида

      # LXC-related NIC's
      auto port0
      iface port0 inet manual
      pre-up /sbin/ip link add port0 type dummy
      up /sbin/ip link set port0 address 13:26:39:00:1a:12
      up /sbin/ip link set port0 mtu 9000
      auto macvlan0
      iface macvlan0 inet static
      address 10.10.10.1
      netmask 255.255.255.0
      pre-up ip link add macvlan0 link port0 type macvlan mode bridge
      pre-up ip link set macvlan0 address 14:28:44:00:1b:12

      вместо 10.10.10.1.24 — указать сеть, которую планируется использовать под контейнеры; mac-адреса также можно задать самостоятельно;

    3. Добавить в /etc/modules строчки

  • dummy

  • macvlan


  1. Чтобы контейнеры не только могли взаимодействовать между собой,
    но и имели доступ во внешние сети (например, для установки пакетов из сетевых репозиториев),
    нужно добавить iptables-правило вида:

    sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
  2. При необходимости доступа из внешнего мира к процессам внутри контейнера,
    нужно добавить соответствующее DNAT-iptables-правило в PREROUTING

  3. Перезагрузиться; проверить, что новые сетевые интерфейсы появились
    (ip addr list)

Установка, создание и настройка LXC-контейнеров

  1. Установить необходимые пакеты:

    sudo lxc lxc-dev bridge-utils cgroup-tools
  2. Создать контейнер командами (

    для ОССН Смоленск:
    sudo lxc-create -t astralinux-se -n container-1
    или для ОСОН Орёл:
    sudo lxc-create -t astralinux-ce -n container-1

    важно: т. к. ядро контейнера и хоста одинаковое, на хосте с ОССН Смоленск обязательно нужно использовать astralinux-se шаблон, а для ОСОН Орёл – astralinux-ce шаблон;

  3. Настроить созданный контейнер container-1;
    как минимум в нём нужно настроить сеть, для этого в файле /var/lib/lxc/container-1/config нужно заменить строку

    lxc.network.type = empty

    секцией вида

    lxc.network.type = macvlan
    lxc.network.macvlan.mode = bridge
    lxc.network.flags = up
    lxc.network.name = eth0
    lxc.network.link = macvlan0
    lxc.network.ipv4.gateway = 10.10.10.1
    lxc.network.ipv4 = 10.10.10.100/24

    в которой заданы ip-адрес контейнера (здесь 10.10.10.100), и шлюз (интерфейс, созданный на хосте в предыдущем пункте)

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

  1. Запуск:

    sudo lxc-start -n container-1
  2. Остановка:

    sudo lxc-stop -n container-1
  3. Просмотр всех контейнеров:

    sudo lxc-ls -f
  4. Сетевой вход в контейнер:

    ssh -l admin 10.10.10.100

    (возможна задержка примерно в минуту, в течение которой ssh-сервер стартует внутри контейнера). Пароль по умолчанию — astralinux
    важно: после первого логина нужно сменить пароль для пользователя admin на более надёжный командой passwd;

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

    sudo lxc-destroy -n container-1
  6. Также, в случае использования контейнера в ОСОН Орёл для входа можно использовать консоль:

    sudo lxc-console -n container-1
  7. Внутри контейнера, при правильно настроенной сети, можно устанавливать и настраивать программы так же, как и на обычном хосте

  8. Замечание:
    Для корректной работы шаблонов astralinux-se и astralinux-ce должен быть правильно сконфигурирован файл /etc/apt/sources.list на хосте


  • Нет меток