Rilascio del gestore di sistema systemd 252 con supporto UKI (Unified Kernel Image)

Dopo cinque mesi di sviluppo, è stato presentato il rilascio del 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 del kernel unificata (UKI - Unified Kernel Image) durante l'avvio, che combina il gestore per l'avvio del kernel dall'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 del filesystem radice. L'immagine UKI è formattata come un singolo file eseguibile in formato PE, che può essere avviato tramite tradizionali loader o chiamato direttamente dal firmware UEFI. Se chiamato da UEFI, consente la verifica dell'integrità e dell'affidabilità tramite la firma digitale non solo del kernel, ma anche del contenuto di initrd.

Per calcolare i parametri dei registri TPM PCR (Trusted Platform Module Platform Configuration Register), utilizzati per il controllo dell'integrità e la realizzazione della firma digitale dell'immagine UKI, è stata inclusa una nuova utility chiamata systemd-measure. La chiave pubblica utilizzata nella firma e le informazioni associate sui PCR possono essere incorporate direttamente nell'immagine di avvio UKI (la chiave e la firma vengono salvate in un file in formato PE nei campi ‘.pcrsig’ e ‘.pcrkey’) e possono essere estratte da utility esterne o interne.

Incluso per l'utilizzo di queste informazioni ci sono le utility systemd-cryptsetup, systemd-cryptenroll e systemd-creds, con cui è possibile garantire l'associazione delle partizioni disco crittografate al kernel autenticato tramite firma digitale (in questo caso, l'accesso alla partizione crittografata è consentito solo se l'immagine UKI ha superato la verifica tramite la firma digitale basata sui parametri memorizzati nel TPM).

Inoltre, è stata inclusa l'utility systemd-pcrphase, che consente di gestire l'associazione delle diverse fasi di avvio ai parametri memorizzati nella memoria dei crittografi che supportano la specifica TPM 2.0 (ad esempio, è possibile rendere la chiave di decrittazione della partizione LUKS2 disponibile solo nell'immagine initrd e bloccare l'accesso ad essa nelle fasi successive dell'avvio).

Alcuni altri cambiamenti:

  • È garantito l'uso predefinito della locale C.UTF-8, a meno che non sia definita una locale diversa nelle impostazioni.
  • È stata implementata la possibilità di eseguire l'operazione di preimpostazione completa dei servizi («systemctl preset») durante il primo avvio. Per abilitare la preimpostazione all'avvio è necessaria una compilazione con l'opzione «-Dfirst-boot-full-preset», ma in future versioni si prevede di attivarla per impostazione predefinita.
  • Negli unit di gestione degli utenti è stato utilizzato un controller delle risorse CPU, il che ha permesso di applicare le impostazioni CPUWeight a tutti gli unit di tipo slice, utilizzati per suddividere il sistema in parti (app.slice, background.slice, session.slice) per l'isolamento delle risorse tra diversi servizi utente, che competono per le risorse CPU. In CPUWeight è anche stata implementata la supporto per il valore «idle» per attivare la modalità di assegnazione delle risorse corrispondente.
  • Negli unit temporanei («transient») e nell'utilità systemd-repart è consentita la sovrascrittura delle impostazioni attraverso la creazione di file drop-in nella directory /etc/systemd/system/nome.d/.
  • Per le immagini di sistema è stata garantita l'impostazione del flag di cessazione del supporto (‘support-ended’), definendo tale fatto sulla base del valore del nuovo parametro «SUPPORT_END=» nel file /etc/os-release.
  • Sono state aggiunte le impostazioni «ConditionCredential=» e «AssertCredential=», utilizzabili per ignorare o terminare un'unità in modo anomalo in caso di assenza di determinate credenziali 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à, applicati per impostazione predefinita.
  • Nelle impostazioni «ConditionFirmware=» e «AssertFirmware=» è stata aggiunta la possibilità di specificare singoli campi SMBIOS, ad esempio, per avviare l'unità solo quando il campo /sys/class/dmi/id/board_name contiene il valore «Custom Board», è possibile specificare «ConditionFirmware=smbios-field(board_name = «Custom Board»)».
  • Durante il processo di inizializzazione (PID 1) è stata aggiunta la possibilità di importare credenziali dai campi SMBIOS (Tipo 11, «stringhe venditore OEM») oltre alla loro definizione tramite qemu_fwcfg, semplificando così la fornitura delle credenziali. macchine virtuali e consentendo di evitare strumenti di terze parti, come cloud-init e ignition.
  • Durante lo spegnimento è stata modificata la logica di smontaggio dei file system virtuali (proc, sys) e sono state memorizzate nel log le informazioni sui processi che bloccano lo smontaggio dei file system.
  • Nel filtro delle chiamate di sistema (SystemCallFilter) l'accesso alla chiamata di sistema riservata riservata è consentito per impostazione predefinita.
  • Nel bootloader sd-boot è stata aggiunta la possibilità di avvio in modalità mista, in cui il kernel Linux a 64 bit viene avviato dal firmware UEFI a 32 bit. È stata aggiunta la possibilità sperimentale di applicare automaticamente le chiavi SecureBoot dai file trovati in ESP (partizione di sistema EFI).
  • L'utilità bootctl ha aggiunto nuove opzioni ‘—all-architectures’ per installare file binari per tutte le architetture EFI supportate, ‘—root=’ e ‘—image=’ per lavorare con una directory o un'immagine 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 automaticamente montate e l'opzione ‘—image=’ per eseguire comandi legati a una specifica immagine disco. Nei comandi ‘show’ e ‘status’ sono state aggiunte le opzioni ‘—state=’ e ‘—type=’.
  • In systemd-networkd sono state aggiunte opzioni ‘TCPCongestionControlAlgorithm=’ per scegliere l'algoritmo di controllo della congestione TCP, ‘KeepFileDescriptor=’ per mantenere il descrittore di file delle interfacce TUN/TAP, ‘NetLabel=’ per impostare etichette NetLabel, ‘RapidCommit=’ per accelerare la configurazione tramite DHCPv6 (RFC 3315). Nell'opzione ‘RouteTable=’ è ora consentito specificare i nomi delle tabelle di routing.
  • In systemd-nspawn è consentito l'uso di percorsi di file relativi nelle opzioni ‘—bind=’ e ‘—overlay=’. Nell'opzione ‘—bind=’ è stata aggiunta la supporto per il parametro ‘rootidmap’ per associare l'identificatore utente root nel container al proprietario della directory montata sul sistema host.
  • In systemd-resolved il pacchetto OpenSSL è stato attivato come backend predefinito per la crittografia (il supporto per gnutls viene mantenuto come opzione). Gli algoritmi DNSSEC non supportati vengono ora trattati come non sicuri, invece di restituire un errore (SERVFAIL).
  • In systemd-sysusers, systemd-tmpfiles e systemd-sysctl è stata realizzata la possibilità di passare impostazioni attraverso il meccanismo di archiviazione delle credenziali.
  • Nell'utilità systemd-analyze è stato aggiunto il comando ‘compare-versions’ per confrontare stringhe con numeri di versione (simile a ‘rpmdev-vercmp’ e ‘dpkg —compare-versions’). È stata aggiunta la possibilità di filtrare le unità in ‘systemd-analyze dump’ in base a una maschera.
  • Quando si seleziona la modalità di sonno a più fasi (suspend-then-hibernate, passaggio alla modalità sospesa dopo la modalità di attesa), il tempo trascorso in modalità di attesa viene ora determinato sulla base della previsione del tempo rimanente di autonomia. Il passaggio immediato alla modalità sospesa avviene quando resta 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 diversi messaggi nel registro.
  • In systemd-repart è stata aggiunta la supporto per la creazione di partizioni con FS Squashfs e partizioni per dm-verity, comprese quelle con firme digitali.
  • In systemd-logind è stata aggiunta l'impostazione «StopIdleSessionSec=» per terminare la sessione inattiva dopo il timeout specificato.
  • In systemd-cryptenroll è stata aggiunta l'opzione «—unlock-key-file=» per estrarre la chiave di decrittazione da un file, anziché tramite output di richiesta all'utente.
  • È stata garantita la possibilità di eseguire l'utilità systemd-growfs in ambienti senza udev.
  • In systemd-backlight è stato migliorato il supporto per i sistemi con più schede grafiche.
  • La licenza per i codici di esempio forniti nella documentazione è stata cambiata da CC0 a MIT-0.

Modifiche che rompono la compatibilità:

  • Quando si verifica il numero di versione del kernel utilizzando la direttiva ConditionKernelVersion, nei costrutti ‘=’ e ‘!=’ ora viene applicato un semplice confronto di stringhe, e se non è specificato alcun operatore di confronto, può essere applicato un confronto basato su glob con l'uso dei caratteri ‘*’, ‘?’ e ‘[‘, ‘]’. Per il confronto delle versioni in stile funzione stverscmp() si devono utilizzare gli operatori ‘’, ‘=’.
  • L'etichetta SELinux, utilizzata per verificare l'accesso dal file unit, ora viene letta nella fase di caricamento del file, piuttosto che al momento della verifica dell'accesso.
  • La condizione «ConditionFirstBoot» ora si attiva solo al primo avvio del sistema direttamente nella fase di avvio e restituisce «false» quando vengono chiamati unit dopo il completamento dell'avvio.
  • Nel 2024, si prevede che systemd interrompa il supporto per il meccanismo di limitazione delle risorse cgroup v1, dichiarato obsoleto nella versione systemd 248. Si raccomanda agli amministratori di occuparsi per tempo della migrazione a cgroup v2 per i servizi legati a cgroup v1. La principale differenza tra cgroups v2 e v1 è l'applicazione di un'unica gerarchia di cgroups per tutti i tipi di risorse, invece di gerarchie separate per la distribuzione delle risorse CPU, per la regolazione del consumo di memoria e per l'input/output. Gerarchie separate comportano difficoltà nell'organizzazione dell'interazione tra i gestori e costi aggiuntivi di risorse del kernel nell'applicazione delle regole per i processi menzionati in diverse gerarchie.
  • Nella seconda metà del 2023 è previsto l'interruzione del supporto per le gerarchie di directory separate, quando /usr è montato separatamente dalla root o le directory /bin e /usr/bin, /lib e /usr/lib sono separate.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster