В ОС ОН Орёл 2.12 и ОС СН Смоленск 1.6 возможно использование механизмов Firejail (используется в графическом киоске) и LXC. При этом в ОС СН Смоленск эти механизмы позволяют создавать дополнительный уровень изоляции приложений на нулевом уровне конфиденциальности
Firejail
Firejail - это система изолированного выполнения графических и консольных приложений. Целью применения Firejail является:
Информация |
---|
Минимизация риска компрометации основной системы при запуске не заслуживающих доверия или потенциально уязвимых программ. |
Для изоляции в Firejail используются:
Информация |
---|
|
После запуска программа и все её дочерние процессы используют отдельные представления ресурсов ядра, таких как сетевой стек, таблица процессов и точки монтирования.
В отличие от LXC, Firejail проще в настройке, и не требует подготовки системного образа: состав контейнера формируется «на лету» на основе содержимого текущей ФС, и удаляется после завершения работы приложения.
Информация |
---|
Firejail можно применять и для запуска контейнеров LXC. |
Предоставляются гибкие средства задания правил доступа к файловой системе:
Информация |
---|
|
Профили изоляции системных вызовов подготовлены для большого числа популярных приложений, в том числе для:
Информация |
---|
|
Для выполнения программы в режиме изоляции достаточно указать имя приложения в качестве аргумента утилиты Firejail, например,
Command |
---|
firejail firefox |
LXC - система виртуализации "контейнеры"
LXC — это система виртуализации "контейнеров" на уровне операционной системы для запуска нескольких изолированных экземпляров операционной системы на одном узле.
- LXC не использует виртуальные машины, а создаёт виртуальное окружение с собственным пространством процессов и сетевым стеком
- ;
- Все экземпляры LXC используют один экземпляр ядра операционной системы
- ;
- LXC основана на технологии cgroups, входящей в ядро ОС
- ;
Известная проблема доступа к ядру ОС,
гдекогда root-пользователь LXC-контейнера
может выполнить произвольный код в родительской операционной системе
(за счёт того, что uid 0 внутри контейнера совпадает с uid 0 базовой системы)
решена введением (версии LXC начиная с ) «непривилегированных контейнеров»,
где uid 0 в контейнере соответствует непривилегированному пользователю снаружи,
и имеет расширенные права только на свои ресурсы.
Механизм cgroups (control group) — механизм ядра ОС, который ограничивает и изолирует вычислительные ресурсы (процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода) для групп процессов.
Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами, и обеспечивает программное управление ими.
Механизм cgroups предоставляет единый программный интерфейс к целому спектру средств управления процессами,
начиная с контроля единичного процесса (таких как, например, утилита nice),
и вплоть до полной виртуализации на уровне системы LXC.
Механизм cgroups предоставляет следующие возможности:
ограничение ресурсов (resource limiting): использование памяти, в том числе виртуальной;
приоритизацию: разным группам можно выделить разное количество процессорного ресурса и пропускной способности подсистемы ввода-вывода;
учёт: подсчёт затрат тех либо иных ресурсов группой;
изоляцию: разделение пространств имён для групп таким образом, что одной группе недоступны процессы, сетевые соединения и файлы другой;
управление: приостановку (freezing) групп, создание контрольных точек (checkpointing) и их перезагрузку.
Работа с LXC-контейнерами в ОС СН Смоленск 1.6
Предупреждение |
---|
Использование механизмов LXC в ОС СН Смоленск 1.6 возможно только на нулевом уровне конфиденциальности |
Установка пакетов
Установить комплект пакетов для запуска контейнеров LXC можно с помощью графического менеджера пакетов или из командной строки командами:
Информация |
---|
sudo apt install -y lxc lxc-dev bridge-utils cgroup-tools dnsmasq-base lxc-astra |
Для установки следует использовать пакет lxc-astra версии не ниже 1.0.0.
Настройка сети под LXC-контейнеры
Информация |
---|
Перед установкой пакетов необходимо правильно настроить пути к репозиториям в файле /etc/apt/sources.list. В частности, в ОС СН Смоленск некоторые пакеты, нужные для работы lxc, находятся на втором диске дистрибутива (диск для разработчиков). |
Создать файл /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=""
В файле /etc/lxc/default.conf строчку
Блок кода lxc.net.0.type = empty
заменить на текст:
Блок кода lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up
Запустить службу lxc-net:
Command sudo systemctl start lxc-net
Настроить macvlan-интерфейс для сети LXC-контейнеров.
Для этого нужно добавить в /etc/network/interfaces секцию вида
вместо 10.10.10.1/24 (маска сети 255.255.255.0) — указать сеть и маску сети, которые планируется использовать под контейнеры; mac-адреса также можно задать самостоятельно;Информация # 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Добавить в /etc/modules строчки
Информация dummy
macvlanЧтобы контейнеры не только могли взаимодействовать между собой,
но и имели доступ во внешние сети (например, для установки пакетов из сетевых репозиториев),
нужно добавить iptables-правило вида:
При необходимости доступа из внешнего мира к процессам внутри контейнера,Command sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
нужно добавить соответствующее DNAT-iptables-правило в PREROUTINGПерезагрузиться; проверить, что новые сетевые интерфейсы появились
(ip addr list)
Установка, создание и настройка LXC-контейнеров
Создать контейнер:
Предупреждение Так как качестве ядра контейнера и используется ядро хоста, на хосте с ОС СН Смоленск обязательно нужно использовать astralinux-se шаблон, а для ОС ОН Орёл – astralinux-ce шаблон;
Перед установкой пакетов правильно настроить пути к репозиториям в файле /etc/apt/sources.list:Command #для
В частности, в ОС СН Смоленск некоторые пакеты, нужные для работы lxc, находятся на втором диске дистрибутива (диск для разработчиков).Установить необходимые пакеты:
Command sudo apt install lxc lxc-dev bridge-utils cgroup-tools Дополнительно установить пакет с шаблонами для операционных систем Astra Linux:
Command sudo apt install lxc-astra Создать контейнер командами
важно: т. к. ядро контейнера и хоста одинаковое, на хосте с ОС СН Смоленск обязательно нужно использовать astralinux-se шаблон, а для ОС ОН Орёл – astralinux-ce шаблон;Command для ОС СН Смоленск:
или
sudo lxc-create -t astralinux-se -n container-1
#или для ОС ОН Орёл:
sudo lxc-create -t astralinux-ce -n container-1Для контейнера использовано имя container-1, в командах управления контейнерами имя контейнера задаётся опцией -n;
Запустить созданный контейнер:
Command sudo lxc-start -n container-1
Дождаться, когда в контейнере заработает сетевой интерфейс, т.е. когда команда:
Command sudo lxc-info -n container-1 -iH станет выдавать IP-адрес конейнера.
Войти в контейнер, используя полученный адрес (пароль пользователя, устанавливаемый по умолчанию - astralinux):
Command ssh -l admin `sudo lxc-info -n container-1 -iH` Настроить созданный контейнер container-1;
как минимум в нём нужно настроить сеть, для этого в файле /var/lib/lxc/container-1/config нужно заменить строкуИнформация lxc.network.type = empty секцией вида
в которой заданы ip-адрес контейнера (здесь 10.10.10.100), и шлюз (интерфейс, созданный на хосте в предыдущем пункте)Информация 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.address = 10.10.10.100/24
Типовые операции с LXC-контейнерами
Запуск:
Command sudo lxc-start -n container-1 Остановка:
Command sudo lxc-stop -n container-1 Просмотр всех контейнеров:
Command sudo lxc-ls -f Сетевой вход в контейнер:
Command ssh -l admin 10.10.10.100 (возможна задержка примерно в минуту, в течение которой ssh-сервер стартует внутри контейнера). Пароль по умолчанию — astralinux
важно: после первого логина нужно сменить пароль для пользователя admin на более надёжный командой passwd;Удаление контейнера:
Command sudo lxc-destroy -n container-1 Также, в случае использования контейнера в ОС ОН Орёл для входа можно использовать консоль:
Command sudo lxc-console -n container-1 Внутри контейнера, при правильно настроенной сети, можно устанавливать и настраивать программы так же, как и на обычном хосте
Замечание:
Информация Для корректной работы шаблонов astralinux-se и astralinux-ce должен быть правильно сконфигурирован файл /etc/apt/sources.list на хосте