Випуск системного менеджера systemd 243

Після п'яти місяців розробки представлений реліз системного менеджера systemd 243. З нововведень можна відзначити інтеграцію в PID 1 обробника нестачі пам'яті в системі, підтримку прикріплення власних BPF-програм для фільтрації трафіку unit-ів, численні нові опції для systemd-networkd, режим моніторингу пропускної спроможності мережевих інтерфейсів, використання за промовчанням на 64-розрядних 22-бітових номерів PID замість 16-бітових, перехід на уніфіковану ієрархію cgroups, включення до складу systemd-network-generator.

Основні зміни:

  • У обробник PID 1 додано розпізнавання генерованих ядром сигналів про нестачу пам'яті (Out-Of-Memory, OOM) для перекладу юнітів, що досягли ліміту в споживанні пам'яті, спеціальний стан з опціональною можливістю їх примусового завершення або зупинки;
  • Для unit-файлів реалізовано нові параметри IPIngressFilterPath та
    IPEgressFilterPath, що дозволяють підключити BPF-програми з довільними обробниками для фільтрації вхідних та вихідних IP-пакетів, що генеруються процесами, пов'язаними з цим unit-ом. Запропоновані можливості дозволяють створювати свого роду міжмережевий екран для сервісів systemd. Приклад написання простого мережевого фільтра з урахуванням BPF;

  • В утиліту systemctl додано команду «clean» для видалення кешу, runtime-файлів, інформації про стан та каталогів з логами;
  • У systemd-networkd додано підтримку мережевих інтерфейсів MACsec, nlmon, IPVTAP і Xfrm;
  • У systemd-networkd реалізовано роздільне налаштування стеків DHCPv4 та DHCPv6 через секції «[DHCPv4]» та «[DHCPv6]» у файлі конфігурації. Додано опцію RoutesToDNS для додавання окремого маршруту до DNS-сервера, вказаного в параметрах, отриманих від DHCP-сервера (щоб трафік до DNS відправлявся через ту саму лінк, що й основний маршрут, отриманий від DHCP). Для DHCPv4 додані нові опції: MaxAttempts - максимальне число запитів на отримання адреси, BlackList - чорний список DHCP-серверів, SendRelease - увімкнення відправки повідомлень DHCP RELEASE при завершенні сеансу;
  • В утиліту systemd-analyze додані нові команди:
    • "systemd-analyze timestamp" - розбір та перетворення часу;
    • "systemd-analyze timespan" - розбір та перетворення проміжків часу;
    • "systemd-analyze condition" - розбір та тестування виразів ConditionXYZ;
    • "systemd-analyze exit-status" - розбір та перетворення кодів завершення з номерів у назви та навпаки;
    • "systemd-analyze unit-files" - виведення списку всіх файлових шляхів для юнітів та псевдонімів юнітів.
  • Опції SuccessExitStatus, RestartPreventExitStatus та
    RestartForceExitStatus тепер підтримують не тільки числові коди повернення, але й текстові ідентифікатори (наприклад «DATAERR»). Переглянути список прив'язки кодів до ідентифікаторів можна за допомогою команди «sytemd-analyze exit-status»;

  • В утиліту networkctl додано команду "delete" для видалення віртуальних мережевих пристроїв, а також опцію "-stats" для виведення статистики по пристроях;
  • У networkd.conf додані налаштування SpeedMeter та SpeedMeterIntervalSec для періодичного вимірювання пропускної спроможності мережевих інтерфейсів. Статистику, отриману за результатами вимірювань, можна переглянути у висновку команди 'networkctl status';
  • Додано нову утиліту systemd-network-generator для генерації файлів
    .network, .netdev та .link на основі налаштувань IP, переданих при запуску через командний рядок ядра Linux у форматі налаштувань Dracut;

  • Значення sysctl «kernel.pid_max» на 64-розрядних системах тепер виставляється мовчанням в 4194304 (22-бітові PID замість 16-бітних), що зменшує ймовірність колізій при призначенні PID, підвищує ліміт на кількість одночасно запущених процесів і позитивно відбивається на. Потенційно зміна може призвести до проблем із сумісністю, але на практиці про подібні проблеми поки не повідомлялося;
  • За замовчуванням на етапі збирання здійснено перехід на уніфіковану ієрархію cgroups-v2 («-Ddefault-hierarchy=unified»). Раніше за умовчанням виставлявся гібридний режим («-Ddefault-hierarchy = hybrid»);
  • Змінено поведінку фільтра системних викликів (SystemCallFilter), який у разі звернення до забороненого системного виклику тепер завершує весь процес, а не окремі потоки (thread), оскільки завершення окремих потоків могло призводити до непередбачуваних проблем. Змін діє тільки за наявності ядра Linux 4.14+ і libseccomp 2.4.0+;
  • Непривілейованим програмам надано можливість надсилання пакетів ICMP Echo (ping) завдяки установці sysctl "net.ipv4.ping_group_range" для всього діапазону груп (для всіх процесів);
  • Для прискорення процесу складання за замовчуванням припинено генерацію man-посібників (для складання повної документації потрібно використовувати опцію "-Dman=true" або "-Dhtml=true" для посібників у форматі html). Для спрощення перегляду документації до складу включені два скрипти build/man/man і build/man/html для генерації та перегляду посібників, що цікавлять;
  • Для обробки доменних імен із символами національних алфавітів за замовчуванням задіяна бібліотека libidn2 (для повернення libidn слід використовувати опцію «-Dlibidn=true»);
  • Припинено підтримку виконуваного файлу /usr/sbin/halt.local, що надавав функціональність, що не набула належного поширення в дистрибутивах. Для організації запуску команд при завершенні роботи рекомендовано використовувати скрипти /usr/lib/systemd/system-shutdown/ або визначити новий unit, залежний від final.target;
  • На останній стадії завершення роботи systemd тепер автоматично збільшує рівень логів у sysctl "kernel.printk", що вирішує проблему з відображенням у лозі подій, що настали на пізніх стадіях завершення роботи, коли штатні демони ведення логів вже завершені;
  • У journalctl та інших відображають логи утилітах забезпечене підсвічування попереджень жовтим кольором, а записів аудиту синім для їх візуального виділення із загальної маси;
  • У змінної оточення $PATH шлях до bin/ тепер слідує раніше шляху до sbin/, тобто. за наявності однакових імен файлів, що виконуються в обох каталогах, буде виконаний файл з bin/;
  • У systemd-logind забезпечено виклик SetBrightness() для безпечного зміни яскравості екрана кожного сеансу;
  • До команди «udevadm info» додано прапор «—wait-for-initialization» для очікування завершення ініціалізації пристрою;
  • У процесі завантаження системи обробник PID 1 тепер виводить на екран назви юнітів замість рядка з їх описом. Для повернення минулої поведінки можна використовувати опцію StatusUnitFormat у /etc/systemd/system.conf або параметр ядра systemd.status_unit_format;
  • У /etc/systemd/system.conf для watchdog PID 1 додана опція KExecWatchdogSec, що визначає таймут для перезапуску з використанням kexec. Старе налаштування
    ShutdownWatchdogSec перейменована в RebootWatchdogSec і визначає тайм-аут для робіт у процесі завершення роботи або звичайного перезапуску;

  • Для сервісів додано нову опцію ExecCondition, що дозволяє встановити команди, які будуть виконані до ExecStartPre. На основі повернутих командою коду помилки приймається рішення про подальше виконання юніту - якщо повернутий код 0 запуск юніту триває, якщо з 1 до 254 мовчки завершується без позначки виникнення збою, якщо 255 - завершується з позначкою виникнення збою;
  • Додано новий сервіс systemd-pstore.service для вилучення даних з sys/fs/pstore/ та зі збереження в /var/lib/pstore для подальшого аналізу;
  • В утиліту timedatectl додані нові команди для настоянки параметрів NTP для systemd-timesyncd у прив'язці до мережних інтерфейсів;
  • У команді "localectl list-locales" припинено показ локалів, відмінних від UTF-8;
  • Забезпечено ігнорування помилок присвоєння змінних у файлах sysctl.d/, якщо ім'я змінної починається із символу "-";
  • Сервіс systemd-random-seed.service тепер повністю відповідає за ініціалізацію пулу ентропії генератора псевдовипадкових чисел ядра Linux. Сервіси яким потрібно коректно ініціалізовано /dev/urandom повинні запускатися після systemd-random-seed.service;
  • У завантажувачі systemd-boot забезпечено опціональну можливість підтримки seed-файлу з випадковою послідовністю у розділі EFI System Partition (ESP);
  • В утиліту bootctl додані нові команди bootctl random-seed для генерації seed-файлу в ESP і bootctl is-installed для перевірки установки завантажувача systemd-boot. bootctl також налагоджено виведення попереджень про некоректне налаштування завантажувальних записів (наприклад, коли образ ядра видалено, а запис для його завантаження залишено);
  • Забезпечено автоматичний вибір розділу підкачки при переході системи в режим сну. Розділ вибирається залежно від налаштованого йому пріоритету, а разі однакових пріоритетів — розміру вільного простору;
  • У /etc/crypttab додано опцію keyfile-timeout для завдання часу очікування пристрою з ключем шифрування перед виведенням запиту пароля для доступу до шифрованого розділу;
  • Додано опцію IOWeight для встановлення ваги вводу/виводу для планувальника BFQ;
  • У systemd-resolved доданий строгий ('strict') режим роботи для DNS-over-TLS і реалізована можливість кешування тільки позитивних DNS-відповідей ("Cache no-negative" в resolved.conf);
  • Для VXLAN до systemd-networkd додано опцію GenericProtocolExtension для включення розширень протоколу VXLAN. Для VXLAN і GENEVE додано опцію IPDoNotFragment для встановлення прапора заборони фрагментації вихідних пакетів;
  • У systemd-networkd у секції «[Route]» з'явилася опція FastOpenNoCookie для включення механізму швидкого відкриття TCP-з'єднань (TFO — TCP Fast Open, RFC 7413) у прив'язці до окремих маршрутів, а також опція TTLPropagate для налаштування TTL LSP (Label Switched Path ). У опції «Type» забезпечено підтримку режимів маршрутизації local, broadcast, anycast, multicast, any і xresolve;
  • У systemd-networkd у секції «[Network]» запропоновано опцію DefaultRouteOnDevice для автоматичного налаштування маршруту за замовчуванням для заданого мережного пристрою;
  • У systemd-networkd для мережних мостів додані опції ProxyARP та
    ProxyARPWifi для налаштування поведінки proxy ARP, MulticastRouter для встановлення параметрів маршрутизації в режимі multicast, MulticastIGMPVersion для зміни версії Internet Group Management Protocol (IGMP) для multicast;

  • У systemd-networkd для тунелів FooOverUDP додані опції Local, Peer і PeerPort для налаштування IP-адрес локальної та віддаленої сторін, а також номери мережного порту. Для тунелів TUN додано опцію VnetHeader для налаштування підтримки GSO (Generic Segment Offload);
  • У systemd-networkd у файлах.
  • У systemd-networkd для тунелів додано опцію AssignToLoopback, що управляє прив'язкою кінця тунелю до loopback пристрою «lo»;
  • У systemd-networkd автоматизована активація IPv6-стека у разі його блокування через sysctl disable_ipv6 - IPv6 активується, якщо для мережного інтерфейсу визначені настоянки IPv6 (статичні або DHCPv6), інакше вже виставлене значення sysctl не змінюється;
  • У файлах .network налаштування CriticalConnection замінено на опцію KeepConfiguration, що надає більше засобів для визначення ситуацій ("yes", "static", "dhcp-on-stop", "dhcp") у яких systemd-networkd не повинен чіпати вже наявні з'єднання при запуску;
  • Усунена вразливість CVE-2019-15718, Викликана відсутністю контролю доступу до D-Bus інтерфейсу systemd-resolved. Проблема дозволяє непривілейованому користувачеві виконати операції, доступні лише адміністраторам, наприклад, можна змінити налаштування DNS та направити DNS-запити на підставний сервер;
  • Усунена вразливість CVE-2019-9619пов'язана з невключенням pam_systemd для неінтерактивних сеансів, яка дозволяє організувати спуфінг активного сеансу.

Джерело: opennet.ru

Додати коментар або відгук