Rilascio del system manager systemd 252 con supporto UKI (Unified Kernel Image).

Dopo cinque mesi di sviluppo, è stato presentato il rilascio del gestore di sistema systemd 252. La modifica fondamentale nella nuova versione è stata l'integrazione del supporto per un processo di avvio modernizzato, che consente di verificare non solo il kernel e il bootloader, ma anche i componenti dell'ambiente di sistema di base utilizzando le firme digitali.

Il metodo proposto prevede l'utilizzo di un'immagine del kernel unificata UKI (Unified Kernel Image) durante il caricamento, che combina un gestore per il caricamento del kernel da UEFI (boot stub UEFI), un'immagine del kernel Linux e l'ambiente di sistema initrd caricato in memoria, utilizzato per l'inizializzazione iniziale nella fase precedente al montaggio del root FS . L'immagine UKI è confezionata come un singolo file eseguibile in formato PE, che può essere caricato utilizzando bootloader tradizionali o richiamato direttamente dal firmware UEFI. Quando viene chiamato da UEFI, è possibile verificare l'integrità e l'affidabilità della firma digitale non solo del kernel, ma anche del contenuto dell'initrd.

Per calcolare i parametri dei registri TPM PCR (Trusted Platform Module Platform Configuration Register) utilizzati per monitorare l'integrità e generare una firma digitale dell'immagine UKI, è inclusa una nuova misura di sistema di utilità. La chiave pubblica e le informazioni PCR di accompagnamento utilizzate nella firma possono essere incorporate direttamente nell'immagine di avvio UKI (la chiave e la firma vengono salvate in un file PE nei campi ".pcrsig" e ".pcrkey") ed estratte da essa tramite strumenti esterni. o utenze interne.

In particolare, le utility systemd-cryptsetup, systemd-cryptenroll e systemd-creds sono state adattate per utilizzare queste informazioni, con le quali è possibile garantire che le partizioni del disco crittografate siano legate a un kernel firmato digitalmente (in questo caso, l'accesso alla partizione crittografata viene fornito solo se l'immagine UKI ha superato la verifica tramite firma digitale basata su parametri situati in TPM).

Inoltre, è inclusa l'utilità systemd-pcrphase, che consente di controllare l'associazione di varie fasi di avvio ai parametri situati nella memoria dei crittoprocessori che supportano la specifica TPM 2.0 (ad esempio, è possibile rendere disponibile la chiave di decrittografia della partizione LUKS2 solo in l'immagine initrd e bloccarne l'accesso nelle fasi successive del download).

Alcune altre modifiche:

  • Garantisce che la locale predefinita sia C.UTF-8 a meno che non venga specificata una locale diversa nelle impostazioni.
  • Ora è possibile eseguire un'operazione completa di preimpostazione del servizio (“systemctl preset”) durante il primo avvio. L'abilitazione delle preimpostazioni all'avvio richiede la creazione con l'opzione "-Dfirst-boot-full-preset", ma si prevede che sarà abilitata per impostazione predefinita nelle versioni future.
  • Le unità di gestione utente coinvolgono un controller delle risorse della CPU, che ha reso possibile garantire che le impostazioni CPUWeight siano applicate a tutte le unità slice utilizzate per dividere il sistema in parti (app.slice, background.slice, session.slice) per isolare le risorse tra diversi servizi utente, in competizione per le risorse della CPU. CPUWeight supporta anche il valore "idle" per attivare la modalità di provisioning delle risorse appropriata.
  • Nelle unità temporanee ("transitori") e nell'utilità systemd-repart, è consentito sovrascrivere le impostazioni creando file drop-in nella directory /etc/systemd/system/name.d/.
  • Per le immagini di sistema viene impostato il flag support-ended, determinando questo fatto in base al valore del nuovo parametro “SUPPORT_END=" nel file /etc/os-release.
  • Aggiunte le impostazioni "ConditionCredential=" e "AssertCredential=", che possono essere utilizzate per ignorare o bloccare le unità se determinate credenziali non sono presenti nel sistema.
  • Aggiunte le impostazioni "DefaultSmackProcessLabel=" e "DefaultDeviceTimeoutSec=" a system.conf e user.conf per definire il livello di sicurezza SMACK predefinito e il timeout di attivazione dell'unità.
  • Nelle impostazioni “ConditionFirmware=” e “AssertFirmware=” è stata aggiunta la possibilità di specificare singoli campi SMBIOS, ad esempio per avviare un'unità solo se 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 le credenziali dai campi SMBIOS (Tipo 11, “stringhe fornitore OEM”) oltre alla loro definizione tramite qemu_fwcfg, che semplifica la fornitura delle credenziali alle macchine virtuali ed elimina la necessità di necessità di strumenti di terze parti come cloud -init e ignition.
  • Durante lo spegnimento, la logica per lo smontaggio dei file system virtuali (proc, sys) è stata modificata e le informazioni sui processi che bloccano lo smontaggio dei file system vengono salvate nel registro.
  • Il filtro delle chiamate di sistema (SystemCallFilter) consente l'accesso alla chiamata di sistema riscv_flush_icache per impostazione predefinita.
  • Il bootloader sd-boot aggiunge la possibilità di eseguire l'avvio in modalità mista, in cui il kernel Linux a 64 bit viene eseguito dal firmware UEFI a 32 bit. Aggiunta la capacità sperimentale di applicare automaticamente le chiavi SecureBoot dai file trovati in ESP (partizione di sistema EFI).
  • Sono state aggiunte nuove opzioni all'utilità bootctl: "—all-architectures" per installare i file binari per tutte le architetture EFI supportate, "—root=" e "—image=" per lavorare con una directory o un'immagine disco, "—install-source =" per definire l'origine per l'installazione, "-efi-boot-option-description=" per controllare i nomi delle voci di avvio.
  • Il comando 'list-automounts' è stato aggiunto all'utilità systemctl per visualizzare un elenco di directory montate automaticamente e l'opzione "--image=" per eseguire comandi in relazione all'immagine del disco specificata. Aggiunte le opzioni "--state=" e "--type=" ai comandi 'show' e 'status'.
  • systemd-networkd ha aggiunto le opzioni “TCPCongestionControlAlgorithm=” per selezionare l'algoritmo di controllo della congestione TCP, “KeepFileDescriptor=” per salvare il descrittore di file delle interfacce TUN/TAP, “NetLabel=” per impostare NetLabels, “RapidCommit=” per velocizzare la configurazione tramite DHCPv6 (RFC3315). Il parametro “RouteTable=" consente di specificare i nomi delle tabelle di routing.
  • systemd-nspawn consente l'uso di percorsi di file relativi nelle opzioni "--bind=" e "--overlay=". Aggiunto il supporto per il parametro 'rootidmap' all'opzione "--bind=" per associare l'ID utente root nel contenitore al proprietario della directory montata sul lato host.
  • systemd-resolved utilizza OpenSSL come backend di crittografia per impostazione predefinita (il supporto gnutls viene mantenuto come opzione). Gli algoritmi DNSSEC non supportati vengono ora considerati non sicuri invece di restituire un errore (SERVFAIL).
  • systemd-sysusers, systemd-tmpfiles e systemd-sysctl implementano la capacità di trasferire le impostazioni attraverso un meccanismo di archiviazione delle credenziali.
  • Aggiunto il comando 'compare-versions' all'utilità systemd-analyze per confrontare le stringhe con i numeri di versione (simile a 'rpmdev-vercmp' e 'dpkg --compare-versions'). Aggiunta la possibilità di filtrare le unità per maschera al comando 'systemd-analyze dump'.
  • Quando si seleziona una modalità di sospensione a più fasi (sospensione, quindi ibernazione), il tempo trascorso in modalità standby viene ora selezionato in base alla previsione della durata rimanente della batteria. La transizione istantanea alla modalità di sospensione avviene quando rimane meno del 5% di carica della batteria.
  • Una nuova modalità di output "-o short-delta" è stata aggiunta a 'journalctl', mostrando la differenza di tempo tra i diversi messaggi nel registro.
  • systemd-repart aggiunge il supporto per la creazione di partizioni con il file system Squashfs e partizioni per dm-verity, anche con firme digitali.
  • Aggiunta l'impostazione "StopIdleSessionSec=" a systemd-logind per terminare una sessione inattiva dopo un timeout specificato.
  • Systemd-cryptenroll ha aggiunto un'opzione "--unlock-key-file=" per estrarre la chiave di decrittazione da un file anziché richiederla all'utente.
  • Ora è possibile eseguire l'utility systemd-growfs in ambienti senza udev.
  • systemd-backlight ha migliorato il supporto per i sistemi con più schede grafiche.
  • La licenza per gli esempi di codice forniti nella documentazione è stata modificata da CC0 a MIT-0.

Modifiche che interrompono la compatibilità:

  • Quando si controlla il numero di versione del kernel utilizzando la direttiva ConditionKernelVersion, viene ora utilizzato un semplice confronto di stringhe negli operatori '=' e '!=' e se l'operatore di confronto non è specificato affatto, è possibile utilizzare la corrispondenza glob-mask utilizzando l'operatore caratteri '*', '?' E '[', ']'. Per confrontare le versioni dello stile stverscmp(), utilizzare gli operatori '<', '>', '<=' e '>='.
  • Il tag SELinux utilizzato per controllare l'accesso da un file unit viene ora letto al momento del caricamento del file, anziché al momento del controllo dell'accesso.
  • La condizione "ConditionFirstBoot" viene ora attivata al primo avvio del sistema solo direttamente nella fase di avvio e restituisce "false" quando si richiamano le unità dopo l'avvio completato.
  • Nel 2024, systemd prevede di smettere di supportare il meccanismo di limitazione delle risorse di cgroup v1, che è stato deprecato nella versione 248 di systemd. Si consiglia agli amministratori di fare attenzione in anticipo alla migrazione dei servizi basati su cgroup v2 a cgroup v1. La differenza fondamentale tra cgroups v2 e v1 è l'uso di una gerarchia di cgroups comune per tutti i tipi di risorse, invece di gerarchie separate per l'allocazione delle risorse della CPU, per la regolazione del consumo di memoria e per l'I/O. Gerarchie separate portano a difficoltà nell'organizzare l'interazione tra gestori e a costi aggiuntivi per le risorse del kernel quando si applicano regole per un processo a cui si fa riferimento in gerarchie diverse.
  • Nella seconda metà del 2023, prevediamo di porre fine al supporto per le gerarchie di directory divise, in cui /usr è montato separatamente dalla root, oppure /bin e /usr/bin, /lib e /usr/lib sono separati.

Fonte: opennet.ru

Aggiungi un commento