Microsoft опубликовал дистрибутив Azure Linux 3.0.20241101

Компания Microsoft опубликовала обновление дистрибутива Azure Linux 3.0.20241101, продолжающее развитие сформированной в августе стабильной ветки 3.0. Дистрибутив развивается в качестве универсальной базовой платформы для Linux-окружений, используемых в облачной инфраструктуре, edge-системах и различных сервисах Microsoft. Собственные наработки проекта распространяются под лицензией MIT. Сборки пакетов формируются для архитектур aarch64 и x86_64. Размер установочного образа 751 МБ.

Среди изменений в новой версии:

  • Для систем на базе архитектуры ARM добавлена поддержка спецификации FF-A (Firmware Framework for Arm A-profile).
  • Включён модуль ядра intel_ifs (In-Field Scan), позволяющий запускать на процессорах Intel низкоуровневые диагностические тесты CPU, способные выявлять проблемы, не определяемые штатными средствами на основе кодов коррекции ошибок (ECC) или битов чётности.
  • В загрузчик GRUB2 добавлены SBAT-записи для Fedora Linux.
  • При сборке ядра включена настройка CONFIG_X86_AMD_PLATFORM_DEVICE, при которой специфичные для чипов AMD устройства ACPI обрабатываются как типовые устройства платформы, такие как I2C, UART и GPIO.
  • Обеспечена работа команд iptables через трансляцию правил в байткод nftables (помимо iptables-legacy задействован пакет iptables-nft).
  • Обновлены версии пакетов, среди которых ядро Linux 6.6.57, Go 1.23, OpenIPMI 2.0.36, libpcap 1.10.5, vim 9.1.0791, mysql 8.0.40, clamav 1.0.7, cloud-init 24.3.1, php 8.3.12, mdadm 4.3, libarchive 3.7.7.

Дистрибутив Azure Linux предоставляет небольшой типовой набор основных пакетов, выступающих универсальной основой для создания начинки контейнеров, хост-окружений и сервисов, запускаемых в облачных инфраструктурах и на edge-устройствах. Более сложные и специализированные решения могут создаваться путём добавления дополнительных пакетов поверх Azure Linux, но основа для всех подобных систем остаётся неизменной, что упрощает сопровождение и подготовку обновлений.

Azure Linux применяется в качестве основы мини-дистрибутива WSLg, в котором предоставляются компоненты графического стека для организации запуска GUI-приложений Linux в окружениях на базе подсистемы WSL2 (Windows Subsystem for Linux). Расширенная функциональность в WSLg реализуется через включение дополнительных пакетов с композитным сервером Weston, XWayland, PulseAudio и FreeRDP.

Для управления сервисами и загрузкой применяется системный менеджер systemd. Для управления пакетами поставляются пакетные менеджеры RPM и DNF. SSH-сервер по умолчанию не включается. Для установки дистрибутива предоставляется инсталлятор, который может работать как в текстовом, так и в графическом режимах. В инсталляторе предоставляется возможность установки с полным или базовым набором пакетов, предлагается интерфейс для выбора дискового раздела, выбора имени хоста и создания пользователей.

Система сборки Azure Linux позволяет генерировать как отдельные RPM-пакеты на основе SPEC-файлов и исходных текстов, так и монолитные системные образы, формируемые при помощи инструментария rpm-ostree и обновляемые атомарно без разбивки на отдельные пакеты. Соответственно, поддерживается две модели доставки обновлений: через обновление отдельных пакетов и через перестроение и обновление всего системного образа. Доступен репозиторий, включающий около 3000 уже собранных RPM-пакетов, который можно использовать для компоновки собственных образов на основе файла конфигурации.

Базовая платформа включает только самые необходимые компоненты и оптимизирована для минимального потребления памяти и дискового пространства, а также для высокой скорости загрузки. В проекте применяется подход "максимальная безопасность по умолчанию", подразумевающий включение различных дополнительных механизмов для повышения защиты:

  • Фильтрация системных вызовов при помощи механизма seccomp.
  • Шифрование дисковых разделов.
  • Верификация пакетов по цифровой подписи.
  • Рандомизация адресного пространства.
  • Защита от атак, связанных с символическими ссылками, mmap, /dev/mem и /dev/kmem.
  • Режим только для чтения и запрет исполнения кода в областях памяти, в которых размещаются сегменты с данными ядра и модулей.
  • Опция для запрета загрузки модулей ядра после инициализации системы.
  • Использование iptables для фильтрации сетевых пакетов.
  • Включение при сборке режимов защиты от переполнения стека, переполнений буфера и проблем с форматированием строк (_FORTIFY_SOURCE, -fstack-protector, -Wformat-security, relro).