След пет месеца разработка, бе представено издание на системния мениджър systemd 250. В новото издание бе добавена възможността за съхраняване на данни за достъп в криптиран вид, реализирана бе проверка на автоматично разпознатите GPT разпределения по цифров подпис, подобрено е информирането за причините за забавяне при стартиране на услуги, добавени са опции за ограничаване на достъпа на услугата до определени файлови системи и мрежови интерфейси, осигурена е поддръжка за контрол на целостта на разпределенията с помощта на модула dm-integrity, добавена е поддръжка за автоматично обновяване на sd-boot.
Основни промени:
- Добавена е поддръжка за криптирани и аутентифицирани данни за достъп, което може да е полезно за безопасно съхраняване на конфиденциални материали, като SSL-ключове и пароли за достъп. Декриптирането на данните за достъп се извършва само при необходимост и свързано с локалната инсталация или оборудване. Данните се криптират автоматично, използвайки симетрични алгоритми за криптиране, ключът за които може да бъде разположен във файловата система, в чипа TPM2 или с комбинирана схема. При стартиране на услугата данните за достъп автоматично се декриптират и стават налични за услугата в обикновен вид. За работа с криптирани данни за достъп е добавен инструментът ‘systemd-creds’, а за услугите са предложени настройки LoadCredentialEncrypted и SetCredentialEncrypted.
- В sd-stub, изпълняем файл за EFI, чрез който EFI фърмуера зарежда ядрото на Linux, е добавена поддръжка за зареждане на ядрото с използване на протокола LINUX_EFI_INITRD_MEDIA_GUID EFI. Също така в sd-stub е добавена възможността за опаковане на данните за достъп и файловете sysext в архив cpio и предаване на този архив на ядрото заедно с initrd (допълнителните файлове се намират в каталога \/extra\/). Указаната възможност позволява използването на проверимо неизменно окружение initrd, допълнено с помощта на sysexts и криптирани данни за аутентификация.
- Съществено е разширена спецификацията на Discoverable Partitions, предоставяща средства за определяне, монтиране и активиране на системни разпределения, използващи GPT (GUID Partition Tables). В сравнение с предишните издания за повечето архитектури в спецификацията е реализирана поддръжка на кореновото разпределение и разпределението \/usr, включително за платформи, които не използват UEFI.
В Discoverable Partitions също беше добавена поддръжка на секции, чиято целостност се верифицира от модула dm-verity с помощта на цифрови подписи PKCS#7, което улеснява създаването на напълно аутентифицирани дискови образи. Поддръжката за верификация е интегрирана в различни утилити, манипулиращи дискови образи, включително systemd-nspawn, systemd-sysext, systemd-dissect, услуги с RootImage, systemd-tmpfiles и systemd-sysusers.
- За дълго стартирани или спирани единици, в допълнение към показването на анимиран индикатор за изпълнение на операция, е предоставена възможност за извеждане на информация за състоянието, позволяваща да се разбере какво точно се случва със службата в момента и коя служба изчаква да завърши системният мениджър.
- В /etc/systemd/system.conf и /etc/systemd/user.conf беше добавен параметър DefaultOOMScoreAdjust, позволяващ корекция на прага на задействане на OOM-killer при недостиг на памет, приложим за процесите, които systemd стартира за системата и потребителите. По подразбиране теглото на системните услуги е по-високо от това на потребителските, т.е. при недостиг на памет вероятността за прекратяване на потребителските услуги е по-висока от тази на системните.
- Добавена е настройка RestrictFileSystems, позволяваща ограничаване на достъпа на услугите до определени типове файлови системи. За преглед на наличните типове ФС може да се използва командата „systemd-analyze filesystems“. По аналогия е реализирана опция RestrictNetworkInterfaces, позволяваща ограничаване на достъпа до определени мрежови интерфейси. Реализацията се основава на BPF-модула LSM, който ограничава достъпа на група процеси до обекти на ядрото.
- Добавен е нов конфигурационен файл /etc/integritytab и утилита systemd-integritysetup, настройващи модула dm-integrity за контрол на целостта на данните на ниво отделни сектори, например, за гарантиране на неизменността на криптираните данни (Authenticated Encryption, гарантира, че блок данни не е бил модифициран по заобиколен начин). Форматът на файла /etc/integritytab е аналогичен на файловете /etc/crypttab и /etc/veritytab, с изключение на това, че вместо dm-crypt и dm-verity се използва dm-integrity.
- Добавен нов unit-файл systemd-boot-update.service, при активиране на който и наличието на инсталиран загрузчик sd-boot, systemd автоматично ще обновява версията на загрузчика sd-boot, поддържайки кода на загрузчика винаги актуален. Самият sd-boot сега по подразбиране се компилира с поддръжка на механизма SBAT (UEFI Secure Boot Advanced Targeting), който решава проблемите с отзоваване на сертификатите за UEFI Secure Boot. Освен това, в sd-boot е осигурена възможността за разбиране на конфигурационните настройки на Microsoft Windows за коректно генериране на наименования на загрузъчните дялове с Windows и показване на версията на Windows.
В sd-boot също така е предоставена възможност за определяне на цветова схема на етапа на сглобяване. В процеса на зареждане е добавена поддръжка за смяна на резолюцията на екрана с натискане на клавиша «r». Добавена е комбинация от клавиши «f» за прехвърляне в интерфейса за конфигуриране на фърмуера. Добавен е режим на автоматично зареждане на системата, отговарящ на елемента от менюто, избран при предишно зареждане. Добавена е възможността за автоматично зареждане на EFI-драйвери, разположени в каталога /EFI/systemd/drivers/ в дяла ESP (EFI System Partition).
- Включен е нов unit-файл factory-reset.target, който се обработва в systemd-logind аналогично на операциите reboot, poweroff, suspend и hibernate, и се използва за създаване на обработчици за изпълнение на фабричен рестарт.
- Процесът systemd-resolved сега създава допълнителен слушащ сокет на адрес 127.0.0.54 в допълнение на 127.0.0.53. Постъпващите на адрес 127.0.0.54 заявки винаги се пренасочват към по-висшия DNS-сървър и не се обработват локално.
- Предоставена е възможност за сглобяване на systemd-importd и systemd-resolved с библиотеката OpenSSL вместо libgcrypt.
- Добавена е начална поддръжка на архитектурата LoongArch, прилагана в процесорите Loongson.
- В systemd-gpt-auto-generator е реализирана възможност за автоматична настройка на системните дялове за подкачка, криптирани с подсистемата LUKS2.
- В кода за разбиране на GPT-образи, използван в systemd-nspawn, systemd-dissect и подобни утилити, е реализирана способност за декодиране на образи за други архитектури, което позволява използването на systemd-nspawn за стартиране на образи в емулатори на други архитектури.
- При инспектиране на дискови образи в systemd-dissect сега се извеждат сведения за целта на дяла, например пригодността за зареждане чрез UEFI или стартиране в контейнер.
- В папките system-extension.d е добавено полето «SYSEXT_SCOPE», което позволява да се обозначи поле на приложение на системния образ — «initrd», «system» или «portable».
- В файла os-release е добавено полето «PORTABLE_PREFIXES», което може да се използва в преносими образи за определяне на поддържаните префикси на unit-файлове.
- В systemd-logind са реализирани нови настройки HandlePowerKeyLongPress, HandleRebootKeyLongPress, HandleSuspendKeyLongPress и HandleHibernateKeyLongPress, които могат да се използват за определяне на действия при задържане на определени клавиши за повече от 5 секунди (например, при бързо натискане на клавиша Suspend може да се настрои преминаване в режим на готовност, а при задържане — в режим на спане).
- За unit-ите са реализирани настройки StartupAllowedCPUs и StartupAllowedMemoryNodes, които се различават от аналогичните настройки без префикс Startup, тъй като се прилагат само на етапа на зареждане и завършване на работа, което позволява да се наложат различни ограничения на ресурсите при стартиране.
- Добавени са проверки [Condition|Assert][Memory|CPU|IO]Pressure, позволяващи да се пропусне или да се завърши с грешка активирането на unit-а в случай на установяване чрез механизма PSI на голямо натоварване на паметта, CPU и вход/изход в системата.
- По подразбиране ограничението за максималния брой inode е увеличено за дяла /dev от 64k до 1M, а за /tmp от 400k до 1M.
- За услугите е предложена настройка ExecSearchPath, даваща възможност за промяна на пътя за търсене на изпълними файлове, стартирани чрез подобни настройки на ExecStart.
- Добавена е настройка RuntimeRandomizedExtraSec, позволяваща въвеждането на случайни отклонения в таймаута RuntimeMaxSec, ограничавящ времето за изпълнение на юнита.
- Разширен е синтаксисът на настройките RuntimeDirectory, StateDirectory, CacheDirectory и LogsDirectory, в които чрез указване на допълнително значение, разделено с двоеточие, вече може да се организира създаването на символична връзка към зададен каталог за организиране на достъп по няколко пътища.
- За услугите са предложени настройки TTYRows и TTYColumns за задаване на броя редове и колони в устройството TTY.
- Добавена е настройка ExitType, позволяваща промяна на логиката за определяне на завършването на услугата. По подразбиране systemd проследява приключването само на основния процес, но при задаване на ExitType=cgroup, системният мениджър ще изчака приключването на последния процес в cgroup.
- Поддръжката на TPM2/FIDO2/PKCS11 в systemd-cryptsetup вече може да се изгражда и като плъгин към cryptsetup, което позволява използването на стандартната команда cryptsetup за отключване на криптиран дял.
- В обработчика на TPM2 в systemd-cryptsetup/systemd-cryptsetup е добавена поддръжка за основни RSA ключове, в допълнение към ECC ключовете, за подобряване на съвместимостта с чипове, които не поддържат ECC.
- В /etc/crypttab е добавена опция token-timeout, позволяваща задаване на максимално време за изчакване на свързването на PKCS#11/FIDO2 токен, след което ще бъде изведен запитване за въвеждане на парола или възстановяващ ключ.
- В systemd-timesyncd е реализирана настройка SaveIntervalSec, позволяваща периодично записване на текущото системно време на диска, например за реализиране на монотонни часовници на системи без RTC.
- В утилитата systemd-analyze са добавени опции: «—image» и «—root» за проверка на unit-файлове вътре в зададен образ или коренов каталог, «—recursive-errors» за отчитане на зависими юнити при установяване на грешка, «—offline» за проверка на отделно запазени unit-файлове, «—json» за извеждане във формат JSON, «—quiet» за изключване на незначителни съобщения, «—profile» за свързване с преносим профил. Също така е добавена команда inspect-elf за анализ на core-файлове в ELF формат и възможност за проверка на unit-файлове със зададено име на юнит, независимо от това дали това име съвпада с името на файла.
- В systemd-networkd е разширена поддръжката на CAN шина (Controller Area Network). Добавени са настройки за управление на режимите на CAN: Loopback, OneShot, PresumeAck и ClassicDataLengthCode. В секцията [CAN] на .network файловете са добавени опции TimeQuantaNSec, PropagationSegment, PhaseBufferSegment1, PhaseBufferSegment2, SyncJumpWidth, DataTimeQuantaNSec, DataPropagationSegment, DataPhaseBufferSegment1, DataPhaseBufferSegment2 и DataSyncJumpWidth за управление на битовата синхронизация на интерфейса CAN.
- В systemd-networkd за клиента DHCPv4 е добавена опция Label, позволяваща задаване на етикет на адресите, използвани при конфигуриране на IPv4 адреси.
- В systemd-udevd за «ethtool» е реализирана поддръжка на специални стойности «max», задаващи размера на буфера в максималната стойност, поддържана от хардуера.
- В .link файловете за systemd-udevd вече могат да се настройват различни параметри за свързване на мрежови адаптери и свръхчувствителни обработчици на хардуер (offload).
- В systemd-networkd по подразбиране са предложени нови .network файлове: 80-container-vb.network за определяне на мрежови моста, създадени при стартиране на systemd-nspawn с опции «—network-bridge» или «—network-zone»; 80-6rd-tunnel.network за определяне на тунели, автоматично създадени при получаване на DHCP-отговор с опция 6RD.
- В systemd-networkd и systemd-udevd е добавена поддръжка на проброс на IP върху интерфейси InfiniBand, за която в файловете systemd.netdev е добавена секция «[IPoIB]», а в настройката Kind е реализирана обработка на стойността «ipoib».
- В systemd-networkd е осигурена автоматична настройка на маршрути за адреси, указани в параметъра AllowedIPs, която може да бъде настроена чрез параметрите RouteTable и RouteMetric в секции [WireGuard] и [WireGuardPeer].
- В systemd-networkd е осигурена автоматична генерация на неизменяеми MAC адреси за интерфейси batadv и bridge. За деактивиране на това поведение може да се зададе стойност MACAddress=none в .netdev файловете.
- В файловете .link в секция «[Link]» е добавена настройка WakeOnLanPassword, за определяне на пароля при работа с WoL в режим «SecureOn».
- В секция «[CAKE]» на файловете .network са добавени настройки AutoRateIngress, CompensationMode, FlowIsolationMode, NAT, MPUBytes, PriorityQueueingPreset, FirewallMark, Wash, SplitGSO и UseRawPacketSize за определяне на параметрите на механизма за управление на мрежовите опашки CAKE (Common Applications Kept Enhanced).
- В секция «[Network]» на файловете .network е добавена настройка IgnoreCarrierLoss, позволяваща да се определи колко време да се изчака, преди да се реагира на загуба на носещ сигнал.
- В systemd-nspawn, homectl, machinectl и systemd-run е разширен синтаксисът на параметъра «—setenv» — ако е посочено само името на променливата (без «=»), стойността ще бъде взета от съответната променлива на околната среда (например, при посочване на «—setenv=FOO» ще бъде взета стойността от променливата на околната среда $FOO и ще бъде използвана в зададеното в контейнера променлива с одноименното име).
- В systemd-nspawn е добавена опция «—suppress-sync» за деактивиране на изпълнението на системни повици sync()/fsync()/fdatasync() при създаване на контейнер (полезно, когато скоростта е приоритет, а запазването на сборни артефакти при срив не е важно, тъй като те могат да бъдат създадени отново по всяко време).
- Добавена нова база данни hwdb, в която са включени различни типове анализатори на сигнали (мултиметри, анализатори на протоколи, осцилографи и т.н.). Информацията за камерите в hwdb е разширена с поле за информация за типа камера (обикновена или инфрачервена) и разположението на обектива (отпред или отзад).
- Осигурена е генерация на неизменяеми имена на мрежови интерфейси за устройства netfront, използвани в Xen.
- Анализът на core файлове с утилитата systemd-coredump, базирана на библиотеките libdw/libelf, сега се извършва в отделен процес, изолиран в sandbox среда.
- В systemd-importd е добавена поддръжка на променливи на средата $SYSTEMD_IMPORT_BTRFS_SUBVOL, $SYSTEMD_IMPORT_BTRFS_QUOTA, $SYSTEMD_IMPORT_SYNC, с помощта на които може да се деактивира генерирането на подпапки Btrfs, както и да се настроят квоти и синхронизация на дискове.
- В systemd-journald на файлови системи с поддръжка на режим copy-on-write е осигурено повторно включване на режима COW за архивни журнали, което позволява тяхното компресиране чрез Btrfs.
- В systemd-journald е реализирана дедупликация на еднакви полета в едно съобщение, която се извършва на етапа преди поставянето на съобщението в журнала.
- В командата shutdown е добавена опция „—show“ за показване на планираното завършване на работа.
Източник: opennet.ru
