След четири месеца разработка беше представен релиз на системния мениджър systemd 248. В новото издание е осигурена поддръжка на образи за разширяване на системните директории, конфигурационния файл /etc/veritytab, утилитата systemd-cryptenroll, отключване на LUKS2 с помощта на чипове TPM2 и FIDO2 токени, стартиране на unit-ове в изолирано пространство на IPC идентификатори, протокола B.A.T.M.A.N. за mesh мрежи, бекенда nftables за systemd-nspawn. Стабилизиран е systemd-oomd.
Основни промени:
- Реализирана е концепцията за образи за разширение на системата (System Extension), които могат да се използват за разширяване на йерархията на директории /usr/ и /opt/, и добавяне на допълнителни файлове по време на работа, дори когато посочените директории са монтирани в режим само за четене. При свързването на образа за разширение, неговото съдържание се налага на йерархията /usr/ и /opt/ с помощта на OverlayFS.
За свързване, отключване, преглеждане и обновяване на образи на системни разширения е предложена нова утилита systemd-sysext. За автоматично свързване на вече инсталирани образи по време на зареждане е добавен сървис systemd-sysext.service. В конфигурационния файл os-release е добавен параметърът „SYSEXT_LEVEL=“ за определяне на нивото на поддържаните разширения на системата.
- За unit-ове е реализирана настройка ExtensionImages, която може да се използва за привързване на образи за разширение на системата към йерархията на пространство от имена на отделни изолирани услуги.
- Добавен е конфигурационен файл /etc/veritytab за настройка на верификация на данни на блоково ниво с помощта на модула dm-verity. Форматът на файла е аналогичен на /etc/crypttab — „името_на_раздела устройство_за_данни устройство_за_хешове хеш_проверка_на_корен опции“. За настройка на поведението на dm-verity за кореновото устройство е добавен параметър в командния ред на ядрото systemd.verity.root_options.
- В systemd-cryptsetup е добавена възможност за извличане на URI токена PKCS#11 и криптирания ключ от заглавката на метаданни LUKS2 в JSON формат, което позволява интегрирането на информация за отключване на криптираното устройство в самото устройство без нужда от външни файлове.
- В systemd-cryptsetup е предоставена поддръжка за отключване на криптирани раздели LUKS2 с помощта на чипове TPM2 и FIDO2 токени, в допълнение на вече поддържаните токени PKCS#11. Зареждането на libfido2 се извършва чрез dlopen(), т.е. наличието се проверява в реално време, а не под формата на стриктна зависимост.
- В /etc/crypttab за systemd-cryptsetup са добавени нови опции „no-write-workqueue“ и „no-read-workqueue“ за включване на синхронна обработка на вход/изход, свързана с криптиране и декриптиране.
- В утилитата systemd-repart е добавена възможност за активиране на криптирани раздели с помощта на чипове TPM2, например, за създаване на криптиран раздел /var при първоначално зареждане.
- Добавена утилита systemd-cryptenroll за свързване на токени TPM2, FIDO2 и PKCS#11 към LUKS дялове, както и за отключване и преглед на токени, свързване на резервни ключове и задаване на парола за достъп.
- Добавен е параметърът PrivateIPC, който позволява в unit файла да се настройва стартирането на процеси в изолирано IPC пространство със собствен идентификатор и опашка за съобщения. Предложена е опция IPCNamespacePath за свързване на unit-a с вече създадено IPC идентификаторно пространство.
- Добавени са настройки ExecPaths и NoExecPaths, позволяващи прилагането на флага noexec към отделни части от файлова система.
- В systemd-networkd е добавена поддръжка на mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking"), позволяващ създаването на децентрализирани мрежи, в които всеки възел е свързан чрез съседни възли. За конфигуриране са предложени секция [BatmanAdvanced] в .netdev, параметър BatmanAdvanced в .network файловете и нов тип устройство „batadv“.
- Стабилизирана е реализацията на механизма за ранно реагиране на недостатъчна памет в системата systemd-oomd. Добавена е опцията DefaultMemoryPressureDurationSec за настройка на времето на изчакване за освобождаване на ресурс преди да се предприеме действие върху unit. Systemd-oomd използва подсистемата на ядрото PSI (Pressure Stall Information) и позволява идентифицирането на началото на забавяния поради недостиг на ресурси и селективно завършване на ресурсоемки процеси в етап, когато системата все още не е в критично състояние и не започва интензивно да намалява кеша и да изхвърля данни в дяла за виртуална памет.
- Добавен е параметър в командния ред на ядрото — „root=tmpfs“, позволяващ монтиране на основния дял в временно хранилище, разположено в оперативната памет чрез Tmpfs.
- Параметърът в /etc/crypttab, определящ файл с ключ, сега може да указва сокети от тип AF_UNIX и SOCK_STREAM. Ключът в този случай трябва да бъде предоставен при свързване към сокета, което, например, може да се използва за създаване на услуги, динамично предоставящи ключове.
- Резервното име на хоста (fallback) за използване от системния мениджър и systemd-hostnamed сега може да бъде зададено по два начина: чрез параметъра DEFAULT_HOSTNAME в os-release и чрез променлива на средата $SYSTEMD_DEFAULT_HOSTNAME. В systemd-hostnamed също е реализирано обработването на указанието „localhost“ в името на хоста и е добавена възможността за експортиране на името на хоста, както и свойствата „HardwareVendor“ и „HardwareModel“ чрез DBus.
- Блокът с зададени променливи на средата сега може да бъде настроен чрез новата опция ManagerEnvironment в system.conf или user.conf, а не само чрез командния ред на ядрото и настройките на unit файловете.
- На етапа на компилация е предоставена възможност за използване на системен повик fexecve() вместо execve() за намаляване на забавянето между проверката на контекста за сигурност и неговото прилагане.
- За unit файлов бяха добавени нови условни операции ConditionSecurity=tpm2 и ConditionCPUFeature за проверка наличието на TPM2 устройства и конкретни функции на CPU (например, ConditionCPUFeature=rdrand може да се използва за проверка на поддържането на операцията RDRAND от процесора).
- За наличните ядра е реализирана автоматична генерация на таблици на системните повиквания за филтрите seccomp.
- Добавена е възможността за подмяна на нови свързвания (bind mounts) в съществуващи пространства за монтиране (mount namespace) на услуги, без да е необходимо рестартиране на услугите. Процесът на подмяна се извършва с командите ‘systemctl bind …’ и ‘systemctl mount-image …’.
- В настройките StandardOutput и StandardError е добавена поддръжка за указване на пътища във формата “truncate:” с цел почистване преди употреба.
- В sd-bus е добавена възможност за свързване към сесия на определен потребител в рамките на локален контейнер. Например “systemctl —user -M lennart@ start quux”.
- В файловете systemd.link в секция [Link] са реализирани параметри:
- Promiscuous — позволява да се постави устройството в промискуитетен режим за обработка на всички мрежови пакети, включително не адресирани на текущата система;
- TransmitQueues и ReceiveQueues за настройка на броя на опашките TX и RX;
- TransmitQueueLength за настройка на размера на опашката TX; GenericSegmentOffloadMaxBytes и GenericSegmentOffloadMaxSegment за задаване на лимити за приложение на технологията GRO (Generic Receive Offload).
- В файловете systemd.network са добавени нови настройки:
- [Network] RouteTable за избор на таблица за маршрутизиране;
- [RoutingPolicyRule] Type за типа маршрутизиране (“blackhole”, “unreachable”, “prohibit”);
- [IPv6AcceptRA] RouteDenyList и RouteAllowList за списъци с разрешени и забранени анонси на маршрути;
- [DHCPv6] UseAddress за игнориране на предоставения DHCP адрес;
- [DHCPv6PrefixDelegation] ManageTemporaryAddress;
- ActivationPolicy за определяне на политиката за активността на интерфейса (винаги да поддържа статуса UP или DOWN или да позволи на потребителя да променя статуса с командата “ip link set dev”).
- В файловете systemd.netdev са добавени опции [VLAN] Protocol, IngressQOSMaps, EgressQOSMaps и [MACVLAN] BroadcastMulticastQueueLength за настройка на обработката на VLAN пакети.
- Монтирането на директорията /dev/ в режим noexec е прекратено, тъй като това води до конфликт при използване на изпълнителния флаг с файлове /dev/sgx. За възстановяване на предишното поведение може да се използва настройката NoExecPaths=/dev.
- Правата за достъп до файла /dev/vsock са променени на 0o666, а файловете /dev/vhost-vsock и /dev/vhost-net са преместени в група. kvm.
- Базата с идентификатори на оборудването е разширена с USB устройства за четене на пръстови отпечатъци, които коректно поддържат прехода в спящ режим.
- systemd-resolved е добавил поддръжка за даване на отговори на DNSSEC запитвания през stub резолвер. Локалните клиенти могат да извършват DNSSEC валидация самостоятелно, а външните се проксират в неизменен вид към родителския DNS сървър.
- В resolved.conf добавена опция CacheFromLocalhost, при установке которой systemd-resolved ще използва кеширане дори за заявки към DNS-сървър по адрес 127.0.0.1 (по подразбиране кеширането на такива заявки е деактивирано, за да се избегне двойно кеширане).
- В systemd-resolved добавена поддръжка на RFC-5001 NSID в локалния DNS резолвер, позволяваща на клиентите да различават взаимодействието с локалния резолвер и друг. сървъра. DNS.
- В утилитата resolvectl реализирана е възможността за извеждане на информация за източника на данни (локален кеш, заявка по мрежата, отговор от локален обработчик) и прилагане на криптиране при предаване на данни. За управление на процеса на определяне на името са предложени опции –cache, –synthesize, –network, –zone, –trust-anchor и –validate.
- В systemd-nspawn добавена поддръжка за настройка на защитната стена с nftables в допълнение към съществуващата поддръжка на iptables. В настройката IPMasquerade в systemd-networkd добавена е възможността за използване на бекенд, базиран на nftables.
- В systemd-localed добавена е поддръжка за извикване на locale-gen за генериране на липсващи локали.
- В различни утилити добавени са опции –pager/–no-pager/–json= за включване/изключване на режим на постранично извеждане и за изход във формат JSON. Добавена е възможност за настройка на броя на използваните цветове в терминала чрез променливата на средата SYSTEMD_COLORS ("16" или "256").
- Обявени за остарели сборките с отделни йерархии на директории (разделяне на / и /usr) и поддръжката на cgroup v1.
- Основната клонка в Git е преименувана от 'master' на 'main'.
Източник: opennet.ru
