Après cinq mois de développement la publication du gestionnaire système . Parmi les nouveautés, on note l'intégration dans le PID 1 d'un gestionnaire de manque de mémoire dans le système, la prise en charge de l'attachement de programmes BPF personnalisés pour le filtrage du trafic des unités, de nombreuses nouvelles options pour systemd-networkd, un mode de surveillance de la bande passante des interfaces réseau, l'utilisation par défaut sur les systèmes 64 bits de numéros de PID sur 22 bits au lieu de 16 bits, la transition vers une hiérarchie unifiée des cgroups, et l'inclusion dans systemd-network-generator.
Principales modifications :
- Le gestionnaire PID 1 a ajouté la reconnaissance des signaux générés par le noyau concernant le manque de mémoire (Out-Of-Memory, OOM) pour transférer des unités ayant atteint la limite de consommation de mémoire dans un état spécial, avec la possibilité optionnelle de les forcer à se terminer ou à s'arrêter;
- De nouveaux paramètres IPIngressFilterPath et
IPEgressFilterPath ont été implémentés pour permettre l'attachement de programmes BPF avec des gestionnaires arbitraires pour filtrer les paquets IP entrants et sortants générés par les processus liés à cette unité. Ces fonctionnalités offrent la possibilité de créer des pare-feu pour les services systemd. d'un simple filtre réseau basé sur BPF; - L'outil systemctl a ajouté la commande «clean» pour supprimer le cache, les fichiers d’exécution, les informations d’état et les répertoires de logs;
- systemd-networkd a ajouté la prise en charge des interfaces réseau MACsec, nlmon, IPVTAP et Xfrm;
- systemd-networkd a implémenté la configuration distincte des piles DHCPv4 et DHCPv6 via les sections «[DHCPv4]» et «[DHCPv6]» dans le fichier de configuration. L'option RoutesToDNS a été ajoutée pour ajouter une route séparée vers le serveur DNS indiqué dans les paramètres obtenus du serveur DHCP (pour que le trafic vers le DNS soit envoyé via le même lien que la route principale obtenue du DHCP). Pour DHCPv4, de nouvelles options ont été ajoutées : MaxAttempts — nombre maximal de requêtes pour obtenir une adresse, BlackList — liste noire des serveurs DHCP, SendRelease — activé l'envoi de messages DHCP RELEASE à la fin de la session;
- De nouvelles commandes ont été ajoutées à l'utilitaire systemd-analyze :
- «systemd-analyze timestamp» — analyse et conversion du temps;
- «systemd-analyze timespan» — analyse et conversion des intervalles de temps;
- «systemd-analyze condition» — analyse et test des expressions ConditionXYZ;
- «systemd-analyze exit-status» — analyse et conversion des codes de sortie comprenant des numéros dans les noms et vice-versa;
- «systemd-analyze unit-files» — affiche la liste de tous les chemins de fichiers pour les unités et les alias d'unités.
- Les options SuccessExitStatus, RestartPreventExitStatus et
RestartForceExitStatus prennent désormais en charge non seulement les codes de retour numériques, mais aussi leurs identifiants textuels (par exemple «DATAERR»). Vous pouvez consulter la liste de liaison des codes aux identifiants avec la commande «systemd-analyze exit-status»; - L'outil networkctl a ajouté la commande «delete» pour supprimer des dispositifs réseau virtuels, ainsi que l'option «—stats» pour afficher des statistiques sur les dispositifs;
- Des paramètres SpeedMeter et SpeedMeterIntervalSec ont été ajoutés à networkd.conf pour mesurer périodiquement la bande passante des interfaces réseau. Les statistiques obtenues grâce à ces mesures peuvent être consultées dans la sortie de la commande ‘networkctl status’;
- Un nouvel utilitaire systemd-network-generator a été ajouté pour générer des fichiers
.network, .netdev et .link en se basant sur les paramètres IP fournis lors du démarrage via la ligne de commande du noyau Linux au format des paramètres Dracut; - La valeur de sysctl «kernel.pid_max» sur les systèmes 64 bits est désormais par défaut fixée à 4194304 (PID de 22 bits au lieu de 16 bits), ce qui réduit la probabilité de collisions dans l'attribution des PID, augmente la limite du nombre de processus pouvant être exécutés simultanément et améliore la sécurité. Ce changement peut potentiellement entraîner des problèmes de compatibilité, mais en pratique, aucun problème de ce type n'a été signalé jusqu'à présent;
- Par défaut, lors de la compilation, un passage à une hiérarchie unifiée cgroups-v2 («-Ddefault-hierarchy=unified») a été effectué. Auparavant, le mode hybride était défini par défaut («-Ddefault-hierarchy=hybrid»);
- Le comportement du filtre d'appels système (SystemCallFilter) a été modifié, de sorte que toute tentative d'accès à un appel système interdit termine maintenant l'ensemble du processus, et non des fils individuels (thread), car la terminaison de fils individuels pourrait entraîner des problèmes imprévisibles. Ces modifications ne s'appliquent qu'en présence d'un noyau Linux 4.14+ et de libseccomp 2.4.0+;
- Les programmes non privilégiés ont la possibilité d'envoyer des paquets ICMP Echo (ping) grâce à la configuration sysctl «net.ipv4.ping_group_range» établie pour toute la plage de groupes (pour tous les processus);
- Pour accélérer le processus de compilation, la génération des manuels (pour compiler la documentation complète, utilisez l'option « -Dman=true » ou « -Dhtml=true » pour les manuels au format html) est désactivée par défaut. Pour simplifier la consultation de la documentation, deux scripts build/man/man et build/man/html sont inclus pour générer et prévisualiser les manuels d'intérêt ;
- Pour traiter les noms de domaine contenant des caractères d'alphabets nationaux, la bibliothèque libidn2 est utilisée par défaut (pour revenir à libidn, il faut utiliser l'option « -Dlibidn=true ») ;
- Le support de l'exécutable /usr/sbin/halt.local, qui offrait une fonctionnalité qui n'a pas été largement adoptée dans les distributions, a été interrompu. Pour exécuter des commandes lors de l'arrêt, il est recommandé d'utiliser des scripts dans /usr/lib/systemd/system-shutdown/ ou de définir une nouvelle unit dépendante de final.target ;
- À la dernière étape de l'arrêt, systemd augmente automatiquement le niveau des logs dans sysctl « kernel.printk », ce qui résout le problème d'affichage des événements dans le log qui se produisent aux dernières étapes de l'arrêt, lorsque les démons de journalisation standard sont déjà terminés ;
- Dans journalctl et d'autres outils de visualisation des logs, les avertissements sont désormais mis en surbrillance en jaune et les entrées d'audit en bleu pour leur distinction visuelle ;
- Dans la variable d'environnement $PATH, le chemin vers bin/ vient maintenant avant le chemin vers sbin/, c'est-à-dire qu'en cas de noms de fichiers exécutables identiques dans les deux répertoires, le fichier de bin/ sera exécuté ;
- Dans systemd-logind, l'appel de SetBrightness() a été ajouté pour changer en toute sécurité la luminosité de l'écran pour chaque session ;
- Un argument « —wait-for-initialization » a été ajouté à la commande « udevadm info » pour attendre la fin de l'initialisation du dispositif ;
- Au cours du processus de démarrage, le gestionnaire PID 1 affiche maintenant les noms des unités au lieu d'une ligne avec leur description. Pour revenir au comportement précédent, vous pouvez utiliser l'option StatusUnitFormat dans /etc/systemd/system.conf ou le paramètre du noyau systemd.status_unit_format ;
- Dans /etc/systemd/system.conf, une option KExecWatchdogSec a été ajoutée pour le watchdog dans PID 1, définissant le délai pour un redémarrage utilisant kexec. L'ancienne configuration
ShutdownWatchdogSec a été renommée en RebootWatchdogSec et définit le délai pour les travaux lors de l'arrêt ou du redémarrage normal ; - Une nouvelle option a été ajoutée pour les services , permettant de spécifier des commandes qui seront exécutées avant ExecStartPre. En fonction du code d'erreur retourné par la commande, une décision est prise sur la suite de l'exécution de l'unité — si le code 0 est retourné, le démarrage de l'unité se poursuit, si le code est compris entre 1 et 254, il se termine silencieusement sans indication d'échec, si le code est 255 — il se termine avec une indication d'échec ;
- Un nouveau service systemd-pstore.service a été ajouté pour extraire des données à partir de sys/fs/pstore/ et les sauvegarder dans /var/lib/pstore pour une analyse ultérieure ;
- De nouvelles commandes ont été ajoutées à l'utilitaire timedatectl pour configurer les paramètres NTP pour systemd-timesyncd en fonction des interfaces réseau ;
- L'affichage des locales autres que UTF-8 a été supprimé de la commande « localectl list-locales » ;
- Les erreurs d'attribution des variables dans les fichiers sysctl.d/ sont désormais ignorées si le nom de la variable commence par le symbole « - » ;
- Service est maintenant entièrement responsable de l'initialisation du pool d'entropie du générateur de nombres pseudo-aléatoires du noyau Linux. Les services qui nécessitent un /dev/urandom correctement initialisé doivent être lancés après systemd-random-seed.service ;
- Dans le chargeur systemd-boot, une option facultative a été mise en place pour maintenir avec une séquence aléatoire dans la partition de système EFI (ESP) ;
- De nouvelles commandes « bootctl random-seed » ont été ajoutées à l'utilitaire bootctl pour générer un fichier de seed dans l'ESP et « bootctl is-installed » pour vérifier l'installation du chargeur systemd-boot. bootctl affiche également des avertissements concernant une configuration incorrecte des entrées de démarrage (par exemple, lorsque l'image du noyau a été supprimée alors qu'une entrée pour son démarrage a été laissée) ;
- Un choix automatique de la partition d'échange a été assuré lors de la transition du système en mode veille. La partition est choisie en fonction de la priorité qui lui est assignée, et en cas de priorités identiques — de la taille de l'espace libre ;
- Une option keyfile-timeout a été ajoutée à /etc/crypttab pour déterminer le temps d'attente d'un dispositif avec une clé de chiffrement avant d'afficher une demande de mot de passe pour accéder à la partition chiffrée ;
- Une option IOWeight a été ajoutée pour définir le poids d'entrée/sortie pour le planificateur BFQ ;
- Un mode strict (‘strict’) a été ajouté à systemd-resolved pour DNS-over-TLS et la possibilité de mettre en cache uniquement les réponses DNS positives a été implémentée (« Cache no-negative » dans resolved.conf) ;
- Pour VXLAN dans systemd-networkd, une option GenericProtocolExtension a été ajoutée pour activer les extensions de protocole VXLAN. Pour VXLAN et GENEVE, une option IPDoNotFragment a été ajoutée pour définir le drapeau interdisant la fragmentation des paquets sortants ;
- Dans systemd-networkd, la section « [Route] » a introduit l'option FastOpenNoCookie pour activer le mécanisme d'ouverture rapide des connexions TCP (TFO - TCP Fast Open, RFC 7413) lié à des routes spécifiques, ainsi que l'option TTLPropagate pour configurer le TTL LSP (Label Switched Path). L'option « Type » prend en charge les modes de routage local, broadcast, anycast, multicast, any et xresolve ;
- Dans systemd-networkd, la section « [Network] » propose l'option DefaultRouteOnDevice pour configurer automatiquement la route par défaut pour un périphérique réseau donné ;
- Dans systemd-networkd, des options ProxyARP et
ProxyARPWifi ont été ajoutées pour configurer le comportement du proxy ARP, MulticastRouter pour définir les paramètres de routage en mode multicast, et MulticastIGMPVersion pour changer la version d'IGMP (Internet Group Management Protocol) pour le multicast ; - Dans systemd-networkd, pour les tunnels FooOverUDP, des options Local, Peer et PeerPort ont été ajoutées pour configurer les adresses IP des côtés local et distant, ainsi que le numéro de port réseau. Pour les tunnels TUN, l'option VnetHeader a été ajoutée pour configurer la prise en charge de GSO (Generic Segment Offload) ;
- Dans systemd-networkd, dans les fichiers .network et .link, la section [Match] a introduit l'option Property, permettant d'identifier les dispositifs en fonction de propriétés spécifiques à udev ;
- Dans systemd-networkd, pour les tunnels, une option AssignToLoopback a été ajoutée, contrôlant la liaison de l'extrémité du tunnel au dispositif loopback « lo » ;
- Dans systemd-networkd, l'activation automatique de la pile IPv6 est mise en œuvre en cas de blocage via sysctl disable_ipv6 - IPv6 est activé si des paramètres IPv6 (statique ou DHCPv6) sont définis pour l'interface réseau, sinon la valeur sysctl déjà définie reste inchangée ;
- Dans les fichiers .network, la configuration CriticalConnection a été remplacée par l'option KeepConfiguration, offrant plus d'outils pour définir les situations (« yes », « static », « dhcp-on-stop », « dhcp ») dans lesquelles systemd-networkd ne doit pas toucher aux connexions existantes lors du démarrage ;
- Vulnérabilité corrigée , causée par un manque de contrôle d'accès à l'interface D-Bus de systemd-resolved. Ce problème permet à un utilisateur non privilégié d'effectuer des opérations normalement réservées aux administrateurs, par exemple, il peut modifier les paramètres DNS et rediriger les requêtes DNS vers un serveur imposteur ;
- Vulnérabilité corrigée , liée à la non-activation de pam_systemd pour les sessions non interactives, qui permet d'organiser le spoofing de la session active.
Source : opennet.ru
