Новая версия systemd 214

Леннарт Поттеринг (Lennart Poettering) представил выпуск системного менеджера systemd 214, примечательный интеграцией некоторых новых механизмов для организации изоляции сервисов и минимизации привилегий фоновых процессов, обеспечением поддержки сетевых интерфейсов «veth», GRE и VTI в systemd-networkd, средствами для формирования типовой начинки создаваемых tmpfs-разделов (например, воссоздать базовую структуру /var). Systemd сочетает в себе функции системы инициализации, механизм для контpроля за выполнением фоновых процессов, службу для журналирования событий и средства для управления сервисами, сеансами пользователей и подключаемыми устройствами. Для определения параметров сервисов в Systemd используется набор конфигурационных unit-файлов, вместо оформления сценариев запуска в виде shell-скриптов. Система нацелена на интенсивную параллелизацию выполнения сервисов на этапе загрузки системы, вобрав в себя лучшие черты таких систем, как launchd (Mac OS X), SMF (Solaris) и Upstart (Ubuntu, старые версии Fedora). В настоящее время на использование systemd уже перешли такие дистрибутивы, как Fedora, openSUSE, Mandriva и Arch Linux, одобрен переход дистрибутивов Debian и Ubuntu по умолчанию на systemd.

Наиболее существенные изменения:

В systemd-nspawn реализована опция »--tmpfs» для монтирования tmpfs-раздела к заданной директории, структура которой может быть воссоздана по специально определённому шаблону. Например, при запуске контейнера можно разместить /var в tmpfs и реконструировать базовое содержимое данного раздела. Для выполнения данной операции достаточно выполнить команду «systemd-nspawn -D /srv/mycontainer --read-only --tmpfs=/var -b», что создаст /var поверх доступной только на чтение основы контейнера и сформирует начинку для пустой директории /var. После остановки контнейнера, содержимое /var будет очищено. Указанный подход, позволяет упростить запуск множества типовых экземпляров контейнера на основе одного базового образа директорий и не заботиться об их изоляции друг от друга. В настоящее время в systemd-tmpfiles добавлен шаблон для воссоздания структуры иерархии /var, а для сервисов реализованы средства создания недостающих в /var директорий. В следующем выпуске ожидается появление возможности загрузки контейнеров с примонтированным через tmpfs пустым разделом /etc или корневым разделом, что позволит ограничиться подготовкой типового содержимого раздела /usr.

Нововведению также сопутствует несколько улучшений в systemd-tmpfiles: добавлена поддержка строк с типом операции «C», предназначенных для копирования в новый раздел файлов или целых директорий; строки с типами «m» и «z» теперь полностью эквиваленты (рекомендуется использовать «z»); при задании прав доступа теперь допустимо использовать префикс »~», который воспринимается как маска для существующих файлов и директорий.

Для сервисов обеспечена поддержка настроек «ReadOnlySystem» и «ProtectedHome», которые применены ко всем длительно работающим процессам systemd. При указании «ReadOnlySystem» разделы /usr и /boot для указанного сервиса будут примонтированы в режиме «только для чтения», что заблокирует возможность несанкционированного изменения системной части операционной системы. При указании «ProtectedHome» в режиме только для чтения будут примонтированы разделы /home и /run/user или данные разделы будут заменены на пустые директории, что позволит добиться ограничения доступа к конфиденциальным пользовательским данным. В сервисе «systemd-networkd», предназначенном для унификации компонентов дистрибутивов, используемых для настройки параметров сети, добавлена поддержка настройки виртуального ethernet (интерфейс «veth») для соединения контейнеров, а также поддержка туннелей GRE и VTI. В udev реализована экспериментальная возможность установки блокировок (flock (LOCK_SH|LOCK_NB)) на файл дисковлого устройства во время выполнения действия с дисковыми разделами. Приложения, такие как редакторы разделов, могут использовать данную особенность для установки flock (LOCK_EX) как признака временной занятости устройства, при котором udev приостановит выполнения всех действий по работе с диском и после освобождения блокировки перечитает таблицу разделов. Из демона systemd удалена поддержка скриптов инициализации SysV и LSB. Для обеспечения совместимости теперь применяется генерация unit-файлов на основе скриптов инициализации. Указанное изменение привело к заметной чистке обработчика PID 1 от устаревшего кода; Сокращены привилегии различных компонентов systemd: Определение доступных механизмов виртуализации теперь выполняется без получения повышенных привилегий, т.е. systemd-detect-virt не требует установки прав CAP_SYS_PTRACE. Systemd-networkd теперь запускается под непривилегированным пользователем «systemd-network» и получает доступ к необходимым возможностям через capabilities-режимы CAP_NET_ADMIN, CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST и CAP_NET_RAW, что подразумевает потерю возможности записи в файлы с правами root. Аналогичный сброс прав за счёт установки необходимых capabilities и запуска под непривилегированными пользователями обеспечен для systemd-resolved и systemd-bus-proxyd; В Socket-юнитах обеспечена поддержка новых опций: «SocketUser=» и «SocketGroup=» для установки владельца для файлов-сокетов AF_UNIX и FIFO. «RemoveOnStop=» для удаления FIFO и других привязанных к сокетам спецфайлов; «Symlinks=» для создания символических ссылок на файлы с сокетами и FIFO при заведении определённых unix-сокетов; В опцию «Restart=» добавлена поддержка свойства «on-abnormal», указывающего на необходимость автоматического перезапуска при любых ненормальных завершениях, включая нештатные сигналы, core-дампы, истечения таймаутов и срабатывание watchdog-таймеров. Перезапуск не производится только при выходе с кодами завершения или по явным сигналам. От «on-failure» свойство «on-abnormal» отличается допустимостью завершения по всем кодам возврата, в том числе сигнализирующим об ошибках; Если настройка «InaccessibleDirectories=» в сервисе ссылается на точку монтирования, то осуществляется попытка отмонтирования для данного сервиса; Настройка «ReadOnlyDirectories=» в сервисах и параметр »--read-only» в systemd-nspawn теперь рекурсивно применяются ко всем точкам монтирования; Юниты для монтирования теперь могут создаваться в прозрачном режиме через API; Прекращена зависимость от libattr, так как функции для работы с расширенными атрибутами файлов уже присутствуют в glibc. Добавлен новый пассивный целевой юнит «network-pre.target», который вызывается до конфигурации сети, что может быть полезно, например для скриптов межсетевых экранов.

© OpenNet