Релиз systemd 231

Представлен выпуск системного менеджера systemd 231. Из новшеств можно отметить возможность указания ограничений в процентах, монтирование /tmp в режимах «nosuid» и «nodev», возможность блокировки групп системных вызовов в unit-файлах, запрет по умолчанию для сервисов systemd создания областей mmap, одновременно доступных на запись и исполнение, обработка в systemd-resolved локальных DNS-запросов через 53 порт, добавление в systemd-networkd средств для настройки VLAN, VTI/VTI6 и VRF.

Основные изменения:

  • В директиве «SystemCallFilter=» добавлена возможность использования предопределённого набора фильтров системных вызовов, что значительно упрощает настройку и позволяет управлять фильтрацией на уровне групп, а не отдельных системных вызовов. Например, для запрета доступа к системеным вызовам, связанным с манипуляцией временем, можно указать «SystemCallFilter=@clock». Фильтрация по системным вызовам включена для всех длительно работающих сервисов systemd;
  • Директивы «InaccessableDirectories=», «ReadOnlyDirectories=» и «ReadWriteDirectories=» переименованы в «InaccessablePaths=», «ReadOnlyPaths=» и «ReadWritePaths=», и теперь могут применяться не только для директорий, но и для любых других типов файлов, в том числе для unix-сокетов, FIFO, файлов символьных и блочных устройств, за исключением символических ссылок. Поддержка старых названий сохранена для обеспечения совместимости;
  • Для приёма DNS-запросов systemd-resolved теперь прикрепляется к локальному IP 127.0.0.53:53, что улучшает совместимость с приложениями, не использующими для резолвинга libc NSS и systemd-resolved API. В /usr/lib/systemd/resolv.conf по умолчанию в качестве DNS-сервера указывается только этот адрес. Предоставленная реализация DNS-сервера не предоставляет полной поддержки протокола DNS, но реализует часть, достаточную для работы локальных клиентов;
  • В systemd-networkd добавлена директива «VLANFiltering=» для настройки фильтрации VLAN. В файлы .network добавлена секция »[BridgeVLAN]» для настройки VLAN через директивы «VLAN=», «EgressUntagged=» и «PVID=»;
  • В systemd-networkd добавлена поддержка туннелей VTI/VTI6 (настройка через директивы «Key=», «InputKey=» и «OutputKey=»);
  • В systemd-networkd добавлена возможность настройки интерфейсов VRF («Virtual Routing Function»);
  • Для сервисов представлена новая директива «MemoryDenyWriteExecute=», при включении которой сервисам запрещается производить маппинг в память, одновременно доступный на запись и исполнение. Режим затрудняет проведение атак и включен по умолчанию для всех длительно работающих сервисов systemd
  • В директивах, подобных «MemoryLimit=», теперь можно указывать значение памяти в процентах, относительно имеющейся физической памяти или памяти, выделенной контейнеру, что позволяет гибко масштабировать настройки в зависимости от размера ОЗУ. Аналогично значения в процентах теперь допускаются в директиве «RuntimeDirectorySize=», применяемой в systemd-logind, и в директиве «TasksMax=» (процент высчитывается от заданного в настройках максимального числа процессов в системе (pid_max), для сервисов значение по умолчанию TasksMax теперь выставлено в 15%).
  • В юнитах ».timer» добавлена возможность определения диапазонов времени с использованием синтаксиса »…». Например,»5…7:10» можно использовать для создания таймера, вызываемого каждый день в 5:10, 6:10 и 7:10;
  • Обеспечено отражение в логе всех принудительно завершённых служебных процессов (через SIGKILL), что может применяться для диагностики некорректного завершения работы сервисов. При включении настройки «KillUserProcesses=» в systemd-logind, аналогичные логи создаются и для пользовательских процессов, принудительно завершённых в конце сеанса;
  • Для всех сервисов, стандартный вывод в которых ассоциирован с выводом в журнал systemd, теперь выставляется переменная окружения $JOURNAL_STREAM, в которой указано устройство и номер inode файлового дескриптора, используемого для потоков stdout/stderr. При помощи данной переменной приложения могут определить факт перенаправления в журнал systemd и использовать в этом случае прямую отправку в журнал структурированных метаданных. Поддержка JOURNAL_STREAM уже добавлена в функции отправки логов glibc;
  • В применяемом по умолчанию для монтирования /tmp юните tmp.mount задействованы опции «nosuid» и «nodev», препятствующие проведению атак при помощи suid-файлов и файлов устройств. Для отключения данных опций, например, при размещении образов контейнеров или overlayfs в /tmp, следует переопределить настройки в секции «Options=» или настроить монтирование /tmp через /etc/fstab;
  • В сервисных юнитах добавлена возможность переопределения привилегий через указание спецсимволов в первом аргументе директивы «ExecXYZ=». Например, при указании символа »+» команда будет запущена с полными привилегиями, независимо от значений, выставленных в таких опциях, как «User=», «Group=» и «CapabilityBoundingSet=»;
  • Сервисы теперь могут на лету изменять таймаут отслеживания работоспособности (watchdog) через отправку сообщения «WATCHDOG_USEC=» через sd_notify ();
  • Добавлена поддержка контроллера cgroup «memory», определённого в cgroup-v2;
  • В утилите systemd-cgtop добавлена возможность указания пути к cgroup в командной строке;
  • В сервисы добавлена новая настройка «RestrictRealtime=», позволяющая запретить выполнение заданий с использованием realtime-планировщика. Включение опции позволяет защититься от атак, направленных на инициирование отказа в обслуживании через утилизацию всех доступных ресурсов процессора;
  • В systemd-nspawn добавлена опция »--notify-ready=» при установке которой обеспечивающий запуск контейнера системный менеджер сообщит о завершении запуска вышестоящему системному менеджеру, что применить штатные средства упорядочивания запуска systemd при запуске нескольких контейнеров, когда определённый контейнер может быть запущен только после окончания запуска другого контейнера;
  • В machinectl добавлена команда «stop», по своим функциям аналогичная команде «terminate»;
  • В systemd-resolved добавлена обработка сигнала SIGUSR2, при поступлении которого осуществляется сброс всех кэшей. Операцию сброса кэшей также можно инициировать командой «systemd-resolve --flush-caches»;
  • В systemd-resolved добавлена опция »--status», приводящая к выводу сводки о настройках DNS в привязке к сетевым интерфейсам;
  • В файл конфигурации resolved.conf добавлена настройка «Cache=», которая включена по умолчанию. Через указание «Cache=Off» можно запретить использование локального кэша DNS;
  • В команде «systemctl edit» реализована возможность создания новых unit-файлов, указав опцию »--force»;
  • В пакет rpm добавлен макрос %systemd_ordering, который может быть использован вместо %systemd_requires в пакетах не использующих функциональность systemd и рассчитанных на использование в урезанных контейнерах без systemd. При наличии %systemd_ordering, в случае установки текущего пакета и systemd в рамках одной транзакции rpm, пакет с systemd будет установлен раньше скриптов текущего пакета, что позволяет корректно обработать преднастройки из unit-файлов;
  • В файл os-release добавлено поле VERSION_CODENAME, определеяющее кодовое имя версии дистрибутива (например, VERSION_CODENAME=woody);
  • В udev добавлено свойство UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG, при установке которого будет отключен разбор метаданных и создание постоянных символьных ссылок для устройства;
  • Расширено число компонентов systemd, которые собираются с использованием внутренней разделяемой библиотеки libsystemd-shared.so. Использование библиотеки позволяет сократить потребление памяти и уменьшить размер компонентов на диске;
  • Настройки для утилиты «mkosi» теперь размещаются в репозитории systemd, что позволяет сформировать актуальный образ для загрузки через «systemd-nspawn -b -i» или qemu-kvm, содержащий самые свежие изменения в systemd.

© OpenNet