Леннарт Поттеринг (Lennart Poettering) представил выпуск системного менеджера systemd 214, примечательный интеграцией некоторых новых механизмов для организации изоляции сервисов и минимизации привилегий фоновых процессов, обеспечением поддержки сетевых интерфейсов "veth", GRE и VTI в systemd-networkd, средствами для формирования типовой начинки создаваемых tmpfs-разделов (например, воссоздать базовую структуру /var).

Systemd сочетает в себе функции системы инициализации, механизм для контроля за выполнением фоновых процессов, службу для журналирования событий и средства для управления сервисами, сеансами пользователей и подключаемыми устройствами. Для определения параметров сервисов в 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", который вызывается до конфигурации сети, что может быть полезно, например для скриптов межсетевых экранов.


Источник: http://www.opennet.ru/opennews/art.shtml?num=39985