Dopo cinque mesi di sviluppo, è stato rilasciato il gestore di sistema systemd 252. Il cambiamento principale nella nuova versione è stata l'integrazione del supporto per un processo di avvio modernizzato, che consente di verificare tramite firme digitali non solo il kernel e il bootloader, ma anche i componenti dell'ambiente di sistema di base.
Il metodo proposto prevede l'uso di un'immagine kernel unificata UKI (Unified Kernel Image) all'avvio, che unisce il gestore per il caricamento del kernel da UEFI (UEFI boot stub), l'immagine del kernel Linux e l'ambiente di sistema initrd caricato in memoria, utilizzato per l'inizializzazione iniziale prima del montaggio della radice. L'immagine UKI è presentata come un unico file eseguibile in formato PE, che può essere caricata tramite bootloader tradizionali o richiamata direttamente dal firmware UEFI. Richiamato da UEFI, offre la possibilità di verificare l'integrità e l'autenticità tramite firma digitale non solo del kernel, ma anche del contenuto di initrd.
Per il calcolo dei parametri dei registri TPM PCR (Trusted Platform Module Platform Configuration Register), utilizzati per il controllo dell'integrità e la formazione della firma digitale dell'immagine UKI, è stata inclusa una nuova utility systemd-measure. La chiave pubblica utilizzata nella firma e le informazioni correlate sui PCR possono essere incorporate direttamente nell'immagine di avvio UKI (chiave e firma sono conservate in un file in formato PE nei campi ‘.pcrsig’ e ‘.pcrkey’) ed estratte da utility esterne o interne.
Inoltre, per utilizzare queste informazioni, sono state adattate le utility systemd-cryptsetup, systemd-cryptenroll e systemd-creds, attraverso le quali è possibile garantire il legame delle partizioni disco criptate con il kernel certificato da una firma digitale (in questo caso, l'accesso alla partizione criptata è fornito solo se l'immagine UKI è stata verificata tramite firma digitale basata sui parametri archiviati nel TPM).
In aggiunta, è stata inclusa l'utility systemd-pcrphase, che consente di gestire il legame delle diverse fasi di avvio con i parametri memorizzati nei processori crittografici che supportano la specifica TPM 2.0 (ad esempio, è possibile rendere la chiave di decrittazione della partizione LUKS2 accessibile solo nell'immagine initrd e bloccare l'accesso ad essa nelle fasi successive di avvio).
Alcune altre modifiche:
- È stato assicurato l'uso predefinito della locale C.UTF-8, se non è stata specificata un'altra locale nelle impostazioni.
- È stata implementata la possibilità di eseguire l'operazione di preimpostazione completa dei servizi («systemctl preset») durante il primo avvio. Per attivare la preimpostazione all'avvio è necessaria una build con l'opzione «-Dfirst-boot-full-preset», ma per le future versioni è prevista l'attivazione per impostazione predefinita.
- Negli unit di gestione degli utenti è stato utilizzato un controller delle risorse CPU, che ha permesso l'applicazione delle impostazioni CPUWeight a tutti gli slice unit usati per frazionare il sistema (app.slice, background.slice, session.slice) per l'isolamento delle risorse tra i diversi servizi utente che competono per le risorse della CPU. In CPUWeight è stata anche implementata la supporto per il valore «idle» per attivare la relativa modalità di fornitura delle risorse.
- Negli unit temporanei («transient») e nell'utility systemd-repart è stato consentito il superamento delle impostazioni tramite la creazione di file drop-in nella directory /etc/systemd/system/nome.d/.
- Per le immagini di sistema è stato impostato il flag di cessazione del supporto (‘support-ended’), definendo questo fatto sulla base del valore del nuovo parametro «SUPPORT_END=» nel file /etc/os-release.
- Sono state aggiunte le impostazioni «ConditionCredential=» e «AssertCredential=», che possono essere utilizzate per ignorare o terminare forzatamente gli unit in assenza di determinati dati di accesso nel sistema.
- Nel file system.conf e user.conf sono state aggiunte le impostazioni «DefaultSmackProcessLabel=» e «DefaultDeviceTimeoutSec=» per definire il livello di sicurezza SMACK e il timeout di attivazione dell'unit, applicabili per impostazione predefinita.
- Nelle impostazioni «ConditionFirmware=» e «AssertFirmware=» è stata aggiunta la possibilità di specificare singoli campi SMBIOS, ad esempio per avviare un'unit solo nel caso in cui il campo /sys/class/dmi/id/board_name contenga il valore «Custom Board», si può specificare «ConditionFirmware=smbios-field(board_name = «Custom Board»)».
- Durante l'inizializzazione (PID 1) è stata aggiunta la possibilità di importare dati di accesso da campi SMBIOS (Tipo 11, «OEM vendor strings») oltre alla loro definizione tramite qemu_fwcfg, semplificando la fornitura di credenziali macchine virtuali e permettendo di evitare strumenti esterni, come cloud-init e ignition.
- Durante lo spegnimento, è stata modificata la logica di smontaggio dei filesystem virtuali (proc, sys) e sono state registrate nel log informazioni sui processi che bloccano lo smontaggio dei filesystem.
- Nel filtro delle chiamate di sistema (SystemCallFilter) è stato consentito per impostazione predefinita l'accesso alla chiamata di sistema riscv_flush_icache.
- Nel bootloader sd-boot è stata aggiunta la possibilità di avviarsi in modalità mista, in cui il kernel Linux a 64 bit viene avviato da un firmware UEFI a 32 bit. È stata aggiunta una funzione sperimentale per l'applicazione automatica delle chiavi SecureBoot dai file trovati nell'ESP (partizione di sistema EFI).
- L'utilità bootctl ha ricevuto nuove opzioni ‘—all-architectures’ per installare file binari per tutte le architetture EFI supportate, ‘—root=’ e ‘—image=’ per lavorare con directory o immagini disco, ‘—install-source=’ per specificare la fonte per l'installazione, ‘—efi-boot-option-description=’ per gestire i nomi delle voci di avvio.
- Nell'utilità systemctl è stato aggiunto il comando ‘list-automounts’ per mostrare un elenco delle directory montate automaticamente e l'opzione ‘—image=’ per eseguire comandi legati a un'immagine disco specificata. Nel comando ‘show’ e ‘status’ sono state aggiunte le opzioni ‘—state=’ e ‘—type=’.
- In systemd-networkd sono state aggiunte le opzioni ‘TCPCongestionControlAlgorithm=’ per selezionare l'algoritmo di controllo della congestione TCP, ‘KeepFileDescriptor=’ per mantenere il file descriptor delle interfacce TUN/TAP, ‘NetLabel=’ per impostare le etichette NetLabel, ‘RapidCommit=’ per accelerare la configurazione tramite DHCPv6 (RFC 3315). Nella variabile ‘RouteTable=’ è consentito specificare i nomi delle tabelle di routing.
- In systemd-nspawn è stato consentito l'uso di percorsi relativi nei parametri ‘—bind=’ e ‘—overlay=’. Nell'opzione ‘—bind=’ è stata aggiunta la possibilità di utilizzare il parametro ‘rootidmap’ per legare l'ID utente root nel contenitore al proprietario della directory montata sul lato della macchina host.
- In systemd-resolved, il pacchetto OpenSSL è stato attivato come backend predefinito per la crittografia (il supporto per gnutls è stato mantenuto come opzione). Gli algoritmi DNSSEC non supportati sono ora trattati come non sicuri, invece di restituire un errore (SERVFAIL).
- In systemd-sysusers, systemd-tmpfiles e systemd-sysctl è stata implementata la possibilità di passare le impostazioni attraverso il meccanismo di storage delle credenziali.
- Nell'utilità systemd-analyze è stato aggiunto il comando ‘compare-versions’ per confrontare le stringhe con i numeri di versione (simile a ‘rpmdev-vercmp’ e ‘dpkg —compare-versions’). Nel comando ‘systemd-analyze dump’ è stata aggiunta la possibilità di filtrare le unità in base a una maschera.
- Nella modalità di sospensione a più fasi (suspend-then-hibernate, passare alla modalità sospensione dopo la modalità di attesa), il tempo di attesa è ora selezionato in base alle previsioni sul tempo rimanente di autonomia. La sospensione immediata avviene quando rimane meno del 5% della carica della batteria.
- In ‘journalctl’ è stata aggiunta una nuova modalità di output ‘-o short-delta’, che mostra la differenza di tempo tra i vari messaggi nel log.
- In systemd-repart è stata aggiunta la supporto per la creazione di partizioni con FS Squashfs e partizioni per dm-verity, inclusi i sottoscritti digitali.
- In systemd-logind è stata aggiunta la configurazione ‘StopIdleSessionSec=’ per terminare una sessione inattiva dopo la scadenza di un timeout specificato.
- In systemd-cryptenroll è stata aggiunta l'opzione ‘—unlock-key-file=’ per estrarre la chiave di decrittazione da un file, invece che tramite un prompt all'utente.
- È stata fornita la possibilità di eseguire l'utilità systemd-growfs in ambienti privi di udev.
- In systemd-backlight è stato migliorato il supporto per i sistemi con più schede grafiche.
- La licenza per gli esempi di codice forniti nella documentazione è stata cambiata da CC0 a MIT-0.
Modifiche incompatibili:
- Nel controllo del numero di versione del kernel tramite la direttiva ConditionKernelVersion, nei confronti ‘=’ e ‘!=’ ora si applica un semplice confronto di stringhe, e se l'operatore di confronto non è specificato, può essere applicato un confronto tramite glob-mask utilizzando i simboli ‘*’, ‘?’ e ‘[‘, ‘]’. Per confronti di versioni in stile funzione stverscmp(), utilizzare gli operatori ‘’, ‘=’.
- L'etichetta SELinux utilizzata per controllare l'accesso dal file di unità è ora letta al momento del caricamento del file, e non al momento del controllo dell'accesso.
- La condizione ‘ConditionFirstBoot’ ora si attiva al primo avvio del sistema solo durante la fase di avvio e restituisce ‘false’ quando vengono invocate unità dopo il completamento dell'avvio.
- Nel 2024, systemd prevede di interrompere il supporto per il meccanismo di limitazione delle risorse cgroup v1, deprecato nella release systemd 248. Si consiglia agli amministratori di pianificare in anticipo la transizione a cgroup v2 per i servizi legati a cgroup v1. La principale differenza tra cgroups v2 e v1 è l'uso di una gerarchia comune di cgroups per tutti i tipi di risorse, anziché gerarchie separate per la distribuzione delle risorse CPU, per la regolazione della memoria e per l'input/output. Le gerarchie separate comportano difficoltà nell'organizzazione della cooperazione tra gestori e costi aggiuntivi per le risorse del kernel quando si applicano regole a un processo menzionato in gerarchie diverse.
- Nella seconda metà del 2023 si prevede di interrompere il supporto delle gerarchie delle directory separate, quando /usr è montato separatamente dalla radice o quando le directory /bin e /usr/bin, /lib e /usr/lib sono separate.
Fonte: opennet.ru
