Sortie du gestionnaire système systemd 252 avec prise en charge UKI (Unified Kernel Image)

Après cinq mois de développement, la version du gestionnaire de système systemd 252 a été présentée. Le changement clé dans la nouvelle version a été l'intégration de la prise en charge d'un processus de démarrage modernisé, qui vous permet de vérifier non seulement le noyau et le chargeur de démarrage, mais également les composants. de l'environnement système de base à l'aide de signatures numériques.

La méthode proposée implique l'utilisation d'une image de noyau unifiée UKI (Unified Kernel Image) lors du chargement, qui combine un gestionnaire de chargement du noyau depuis UEFI (UEFI boot stub), une image de noyau Linux et l'environnement système initrd chargé en mémoire, utilisé pour l'initialisation initiale à l'étape précédant le montage du FS racine. L'image UKI est présentée sous la forme d'un fichier exécutable unique au format PE, qui peut être chargé à l'aide de chargeurs de démarrage traditionnels ou appelé directement à partir du micrologiciel UEFI. Lorsqu'il est appelé depuis l'UEFI, il est possible de vérifier l'intégrité et la fiabilité de la signature numérique non seulement du noyau, mais également du contenu de l'initrd.

Pour calculer les paramètres des registres TPM PCR (Trusted Platform Module Platform Configuration Register) utilisés pour surveiller l'intégrité et générer une signature numérique de l'image UKI, un nouvel utilitaire systemd-measure est inclus. La clé publique et les informations PCR associées utilisées dans la signature peuvent être intégrées directement dans l'image de démarrage UKI (la clé et la signature sont enregistrées dans un fichier PE dans les champs « .pcrsig » et « .pcrkey ») et extraites de celle-ci par un outil externe. ou des utilitaires internes.

En particulier, les utilitaires systemd-cryptsetup, systemd-cryptenroll et systemd-creds ont été adaptés pour utiliser ces informations, avec lesquelles vous pouvez garantir que les partitions de disque cryptées sont liées à un noyau signé numériquement (dans ce cas, l'accès à la partition cryptée n'est fourni que si l'image UKI a réussi la vérification par signature numérique basée sur les paramètres situés dans le TPM).

De plus, l'utilitaire systemd-pcrphase est inclus, qui vous permet de contrôler la liaison de différentes étapes de démarrage aux paramètres situés dans la mémoire des cryptoprocesseurs prenant en charge la spécification TPM 2.0 (par exemple, vous pouvez rendre la clé de déchiffrement de partition LUKS2 disponible uniquement dans l'image initrd et en bloquer l'accès lors des téléchargements ultérieurs).

Quelques autres changements :

  • Garantit que les paramètres régionaux par défaut sont C.UTF-8, sauf si des paramètres régionaux différents sont spécifiés dans les paramètres.
  • Il est désormais possible d'effectuer une opération complète de préréglage de service (« systemctl preset ») lors du premier démarrage. L'activation des préréglages au moment du démarrage nécessite la construction avec l'option "-Dfirst-boot-full-preset", mais il est prévu qu'elle soit activée par défaut dans les prochaines versions.
  • Les unités de gestion des utilisateurs impliquent un contrôleur de ressources CPU, ce qui a permis de garantir que les paramètres CPUWeight sont appliqués à toutes les unités de tranche utilisées pour diviser le système en parties (app.slice, background.slice, session.slice) pour isoler les ressources entre différents services utilisateur, en concurrence pour les ressources CPU. CPUWeight prend également en charge la valeur « idle » pour activer le mode de provisionnement des ressources approprié.
  • Dans les unités temporaires (« transitoires ») et dans l'utilitaire systemd-repart, le remplacement des paramètres est autorisé en créant des fichiers déroulants dans le répertoire /etc/systemd/system/name.d/.
  • Pour les images système, l'indicateur de fin de support est défini, déterminant ce fait en fonction de la valeur du nouveau paramètre « SUPPORT_END = » dans le fichier /etc/os-release.
  • Ajout des paramètres « ConditionCredential= » et « AssertCredential= », qui peuvent être utilisés pour ignorer ou faire planter des unités si certaines informations d'identification ne sont pas présentes dans le système.
  • Ajout des paramètres « DefaultSmackProcessLabel = » et « DefaultDeviceTimeoutSec = » à system.conf et user.conf pour définir le niveau de sécurité SMACK par défaut et le délai d'expiration de l'activation de l'unité.
  • Dans les paramètres « ConditionFirmware= » et « AssertFirmware= », la possibilité de spécifier des champs SMBIOS individuels a été ajoutée, par exemple, pour lancer une unité uniquement si le champ /sys/class/dmi/id/board_name contient la valeur « Custom Board", vous pouvez spécifier "ConditionFirmware=smbios" -field(board_name = "Custom Board")".
  • Lors du processus d'initialisation (PID 1), la possibilité d'importer des informations d'identification à partir des champs SMBIOS (Type 11, « Chaînes de fournisseur OEM ») a été ajoutée en plus de leur définition via qemu_fwcfg, ce qui simplifie la fourniture d'informations d'identification aux machines virtuelles et élimine le problème. besoin d'outils tiers tels que cloud -init et ignition.
  • Lors de l'arrêt, la logique de démontage des systèmes de fichiers virtuels (proc, sys) a été modifiée et les informations sur les processus bloquant le démontage des systèmes de fichiers sont enregistrées dans le journal.
  • Le filtre d'appel système (SystemCallFilter) permet d'accéder par défaut à l'appel système riscv_flush_icache.
  • Le chargeur de démarrage sd-boot ajoute la possibilité de démarrer en mode mixte, dans lequel le noyau Linux 64 bits s'exécute à partir du micrologiciel UEFI 32 bits. Ajout de la possibilité expérimentale d'appliquer automatiquement les clés SecureBoot à partir des fichiers trouvés dans ESP (partition système EFI).
  • De nouvelles options ont été ajoutées à l'utilitaire bootctl : « -all-architectures » pour installer les binaires pour toutes les architectures EFI prises en charge, « -root= » et « -image=" pour travailler avec un répertoire ou une image disque, « -install-source = » pour définir la source d'installation, « -efi-boot-option-description = » pour contrôler les noms des entrées de démarrage.
  • La commande 'list-automounts' a été ajoutée à l'utilitaire systemctl pour afficher une liste des répertoires montés automatiquement et l'option "--image=" pour exécuter des commandes en relation avec l'image disque spécifiée. Ajout des options "--state=" et "--type=" aux commandes 'show' et 'status'.
  • systemd-networkd a ajouté les options « TCPCongestionControlAlgorithm= » pour sélectionner l'algorithme de contrôle de congestion TCP, « KeepFileDescriptor= » pour enregistrer le descripteur de fichier des interfaces TUN/TAP, « NetLabel= » pour définir NetLabels, « RapidCommit= » pour accélérer la configuration via DHCPv6 (RFC3315). Le paramètre « RouteTable= » permet de préciser les noms des tables de routage.
  • systemd-nspawn permet l'utilisation de chemins de fichiers relatifs dans les options "--bind=" et "--overlay=". Ajout de la prise en charge du paramètre 'rootidmap' à l'option "--bind=" pour lier l'ID utilisateur root dans le conteneur au propriétaire du répertoire monté côté hôte.
  • systemd-resolved utilise OpenSSL comme backend de chiffrement par défaut (la prise en charge de gnutls est conservée en option). Les algorithmes DNSSEC non pris en charge sont désormais traités comme dangereux au lieu de renvoyer une erreur (SERVFAIL).
  • systemd-sysusers, systemd-tmpfiles et systemd-sysctl implémentent la possibilité de transférer des paramètres via un mécanisme de stockage d'informations d'identification.
  • Ajout de la commande 'compare-versions' à l'utilitaire systemd-analyze pour comparer les chaînes avec les numéros de version (similaire à 'rpmdev-vercmp' et 'dpkg --compare-versions'). Ajout de la possibilité de filtrer les unités par masque à la commande 'systemd-analyze dump'.
  • Lors de la sélection d'un mode veille à plusieurs étapes (suspension puis mise en veille prolongée), le temps passé en mode veille est désormais sélectionné en fonction de la prévision de la durée de vie restante de la batterie. La transition instantanée vers le mode veille se produit lorsqu'il reste moins de 5 % de charge de la batterie.
  • Un nouveau mode de sortie "-o short-delta" a été ajouté à 'journalctl', affichant la différence de temps entre les différents messages dans le journal.
  • systemd-repart ajoute la prise en charge de la création de partitions avec le système de fichiers Squashfs et de partitions pour dm-verity, y compris avec des signatures numériques.
  • Ajout du paramètre "StopIdleSessionSec=" à systemd-logind pour mettre fin à une session inactive après un délai d'attente spécifié.
  • Systemd-cryptenroll a ajouté une option "--unlock-key-file=" pour extraire la clé de déchiffrement d'un fichier plutôt que d'en informer l'utilisateur.
  • Il est désormais possible d'exécuter l'utilitaire systemd-growfs dans des environnements sans udev.
  • systemd-backlight a amélioré la prise en charge des systèmes dotés de plusieurs cartes graphiques.
  • La licence pour les exemples de code fournis dans la documentation a été modifiée de CC0 à MIT-0.

Modifications qui rompent la compatibilité :

  • Lors de la vérification du numéro de version du noyau à l'aide de la directive ConditionKernelVersion, une simple comparaison de chaînes est désormais utilisée dans les opérateurs '=' et '!=', et si l'opérateur de comparaison n'est pas du tout spécifié, la correspondance de masque global peut être utilisée à l'aide de l'option personnages '*', '?' Et '[', ']'. Pour comparer les versions de style stverscmp(), utilisez les opérateurs '<', '>', '<=' et '>='.
  • La balise SELinux utilisée pour vérifier l'accès à partir d'un fichier unité est désormais lue au moment du chargement du fichier, plutôt qu'au moment de la vérification de l'accès.
  • La condition "ConditionFirstBoot" est désormais déclenchée au premier démarrage du système uniquement directement au stade du démarrage et renvoie "false" lors de l'appel d'unités une fois le démarrage terminé.
  • En 2024, systemd prévoit de cesser de prendre en charge le mécanisme de limitation des ressources cgroup v1, qui était obsolète dans la version 248 de systemd. Il est conseillé aux administrateurs de faire preuve de prudence avant de migrer les services basés sur cgroup v2 vers cgroup v1. La principale différence entre les groupes de contrôle v2 et v1 réside dans l'utilisation d'une hiérarchie de groupes de contrôle commune pour tous les types de ressources, au lieu de hiérarchies distinctes pour l'allocation des ressources CPU, pour la régulation de la consommation de mémoire et pour les E/S. Des hiérarchies séparées entraînent des difficultés dans l'organisation des interactions entre les gestionnaires et des coûts supplémentaires en ressources du noyau lors de l'application de règles pour un processus référencé dans différentes hiérarchies.
  • Au cours du second semestre 2023, nous prévoyons de mettre fin à la prise en charge des hiérarchies de répertoires fractionnées, où /usr est monté séparément de la racine, ou /bin et /usr/bin, /lib et /usr/lib sont séparés.

Source: opennet.ru

Ajouter un commentaire