Lansarea managerului de sistem systemd 252 cu suport pentru UKI (Unified Kernel Image)

După cinci luni de dezvoltare, a fost lansată versiunea managerului de sistem systemd 252. Schimbarea cheie din noua versiune este integrarea suportului pentru un proces de boot modernizat, care permite verificarea prin semnături digitale nu doar a nucleului și a încărcătorului, ci și a componentelor mediului de bază al sistemului.

Metoda propusă implică utilizarea unei imagini unificate a nucleului UKI (Unified Kernel Image) în timpul încărcării, care combină un handler pentru încărcarea nucleului din UEFI (UEFI boot stub), imaginea nucleului Linux și mediul de sistem inițial initrd, utilizat pentru inițializarea inițială înainte de montarea sistemului de fișiere rădăcină. Imaginea UKI este realizată sub forma unui singur fișier executabil în format PE, care poate fi încărcat cu ajutorul încărcătoarelor tradiționale sau apelat direct din firmware-ul UEFI. Atunci când este apelat din UEFI, se oferă posibilitatea verificării integrității și autenticitații prin semnătura digitală nu doar a nucleului, ci și a conținutului initrd.

Pentru calcularea parametrilor registrelor TPM PCR (Trusted Platform Module Platform Configuration Register), utilizați pentru controlul integrității și formarea semnăturii digitale a imaginii UKI, a fost inclus un nou utilitar systemd-measure. Cheia publică utilizată în semnătură și informațiile aferente despre PCR pot fi integrate direct în imaginea de boot UKI (cheia și semnătura fiind păstrate într-un fișier în format PE în câmpurile ‘.pcrsig’ și ‘.pcrkey’) și extrase de către utilitare externe sau interne.

Printre altele, pentru utilizarea acestei informații, au fost adaptate utilitarele systemd-cryptsetup, systemd-cryptenroll și systemd-creds, prin care se poate asigura legarea partițiilor de disc criptate la nucleul validat prin semnătură digitală (în acest caz, accesul la partiția criptată este permis doar dacă imaginea UKI a trecut verificarea conform semnăturii digitale pe baza parametrilor plasati în TPM).

În plus, a fost inclus utilitarul systemd-pcrphase, care permite gestionarea legării diferitelor etape de boot la parametrii plasați în memoria procesorilor criptografici care suportă specificația TPM 2.0 (de exemplu, se poate face cheie de decriptare a partiției LUKS2 disponibilă doar în imaginea initrd și se poate bloca accesul la aceasta în etapele ulterioare ale boot-ului).

Alte câteva modificări:

  • Utilizarea locației C.UTF-8 este asigurată implicit, dacă nu este definită o altă locație în setări.
  • A fost implementată posibilitatea de a efectua operațiunea de presetare completă a serviciilor („systemctl preset”) în timpul primei încărcări. Pentru a activa presetarea în timpul încărcării, este necesară compilarea cu opțiunea „-Dfirst-boot-full-preset”, dar în versiunile viitoare se preconizează activarea acesteia implicit.
  • În unitățile de gestionare a utilizatorilor a fost implicat un controler de resurse CPU, ceea ce a permis aplicarea setărilor CPUWeight la toate unitățile slice utilizate pentru a împărți sistemul în părți (app.slice, background.slice, session.slice) pentru izolarea resurselor între diferitele servicii utilizator care concurează pentru resurse CPU. De asemenea, în CPUWeight a fost implementat suportul pentru valoarea „idle” pentru activarea modului corespunzător de oferire a resurselor.
  • În unitățile temporare („transient”) și în utilitarul systemd-repart este permisă redefinirea setărilor prin crearea de fișiere drop-in în directorul /etc/systemd/system/nume.d/.
  • Pentru imaginile de sistem, este asigurat un marcaj de încetare a suportului (‘support-ended’), determinând acest fapt pe baza valorii noii variabile „SUPPORT_END=” din fișierul /etc/os-release.
  • Au fost adăugate setările „ConditionCredential=” și „AssertCredential=”, care pot fi utilizate pentru a ignora sau a închide brusc unitățile în absența unor anumite date de autentificare în sistem.
  • În system.conf și user.conf au fost adăugate setările „DefaultSmackProcessLabel=” și „DefaultDeviceTimeoutSec=” pentru a defini nivelul de securitate SMACK și timeout-ul de activare a unității, aplicabile implicit.
  • În setările „ConditionFirmware=” și „AssertFirmware=” a fost adăugată posibilitatea de a specifica câmpuri individuale SMBIOS, de exemplu pentru a lansa unitatea doar în cazul în care câmpul /sys/class/dmi/id/board_name conține valoarea „Custom Board”, se poate specifica „ConditionFirmware=smbios-field(board_name = „Custom Board”).
  • În procesul de inițializare (PID 1) a fost adăugată posibilitatea importării datelor de autentificare din câmpurile SMBIOS (Tip 11, „string-uri de furnizor OEM”) pe lângă definirea acestora prin qemu_fwcfg, ceea ce simplifică furnizarea datelor de autentificare mașini virtuale și permite evitarea utilizării unor instrumente externe, cum ar fi cloud-init și ignition.
  • În timpul închiderii s-a modificat logica de demontare a sistemelor de fișiere virtuale (proc, sys) și s-a asigurat păstrarea în log a informațiilor despre procesele care blochează demontarea sistemelor de fișiere.
  • În filtrul apelurilor de sistem (SystemCallFilter) accesul la apelul de sistem riscv_flush_icache este permis în mod implicit.
  • În bootloader-ul sd-boot a fost adăugată capacitatea de a boota în modul mixt, în care nucleul Linux pe 64 de biți este lansat din firmware-ul UEFI pe 32 de biți. A fost adăugată o funcție experimentală de aplicare automată a cheilor SecureBoot din fișierele găsite în ESP (partiția de sistem EFI).
  • În utilitarul bootctl au fost adăugate opțiuni noi „—all-architectures” pentru instalarea fișierelor binare pentru toate arhitecturile EFI suportate, „—root=” și „—image=” pentru a lucra cu un director sau un fișier imagine, „—install-source=” pentru a determina sursa pentru instalare, „—efi-boot-option-description=” pentru a gestiona denumirile înregistrărilor de boot.
  • În utilitarul systemctl a fost adăugată comanda ‘list-automounts’ pentru a arăta lista directoarelor montate automat și opțiunea „—image=” pentru a executa comenzi legate de un fișier imagine specificat. În comenzile ‘show’ și ‘status’ au fost adăugate opțiuni „—state=” și „—type=”
  • În systemd-networkd au fost adăugate opțiuni „TCPCongestionControlAlgorithm=” pentru a alege algoritmul de control al congestionării TCP, „KeepFileDescriptor=” pentru a păstra descriptorul de fișier pentru interfețele TUN/TAP, „NetLabel=” pentru a seta etichete NetLabel, „RapidCommit=” pentru a accelera configurarea prin DHCPv6 (RFC 3315). În parametrul „RouteTable=” a fost permisă specificarea numelui tabelului de rutare.
  • În systemd-nspawn a fost permisă utilizarea căilor relative de fișiere în opțiunile „—bind=” și „—overlay=”. În opțiunea „—bind=” a fost adăugată suport pentru parametrul ‘rootidmap’ pentru a lega identificatorul utilizatorului root din container cu proprietarul directorului montat pe partea sistemului gazdă.
  • În systemd-resolved, pachetul OpenSSL este utilizat ca back-end pentru criptare în mod implicit (suportul pentru gnutls este păstrat ca opțiune). Algoritmii DNSSEC nesuportati sunt acum tratați ca nesiguri, în loc să returneze o eroare (SERVFAIL).
  • În systemd-sysusers, systemd-tmpfiles și systemd-sysctl a fost implementată capacitatea de a transmite configurările prin mecanismul de stocare a acreditivelor.
  • În utilitarul systemd-analyze a fost adăugată comanda ‘compare-versions’ pentru compararea șirurilor cu numerele de versiune (analog cu ‘rpmdev-vercmp’ și ‘dpkg —compare-versions’). În comanda ‘systemd-analyze dump’ a fost adăugată capacitatea de filtrare a unităților după mască.
  • Atunci când alegeți modul de suspendare multiplă (suspend-then-hibernate, trecerea în modul de repaus după modul de așteptare), timpul petrecut în modul de așteptare este acum selectat pe baza prognozei de timp rămas pentru funcționarea autonomă. Trecerea instantanee în modul de repaus se face când mai rămâne sub 5% din încărcătura acumulatorului.
  • În ‚journalctl’ a fost adăugat un nou mod de ieșire „-o short-delta”, care afișează diferența de timp între diferitele mesaje din jurnal.
  • În systemd-repart a fost adăugată suportul pentru crearea de partiții cu FS Squashfs și partiții pentru dm-verity, inclusiv cu semnături digitale.
  • În systemd-logind a fost adăugată setarea „StopIdleSessionSec=” pentru a încheia o sesiune inactivă după expirarea timeout-ului specificat.
  • În systemd-cryptenroll a fost adăugată opțiunea „—unlock-key-file=” pentru a extrage cheia de decriptare dintr-un fișier, nu prin interogarea utilizatorului.
  • Este posibilă executarea utilitarului systemd-growfs în medii fără udev.
  • În systemd-backlight a fost îmbunătățită suportul pentru sistemele cu mai multe plăci grafice.
  • Licența pentru exemplele de cod incluse în documentație a fost schimbată de la CC0 la MIT-0.

Modificări care încalcă compatibilitatea:

  • Când verificați numărul versiunii nucleului folosind directiva ConditionKernelVersion, în operatorii ‘=’ și ‘!=’ se aplică acum o simplă comparare a șirurilor, iar dacă operatorul de comparare nu este specificat, se poate aplica o potrivire pe glob cu simbolurile ‘*’, ‘?’ și ‘[‘, ‘]’. Pentru comparațiile versiunilor în stilul funcției stverscmp() ar trebui utilizate operatorii ‘’, ‘=’.
  • Eticheta SELinux, utilizată pentru a verifica accesul din fișierul unității, este acum citită în timpul încărcării fișierului, nu în momentul verificării accesului.
  • Condiția „ConditionFirstBoot” se activează acum la prima pornire a sistemului doar în timpul procesului de încărcare și returnează „false” la apelurile unităților după finalizarea încărcării.
  • În 2024, systemd intenționează să oprească suportul pentru mecanismul de restricționare a resurselor cgroup v1, care a fost catalogat ca fiind învechit în versiunea systemd 248. Administratorii sunt sfătuiți să se pregătească din timp pentru migrarea serviciilor legate de cgroup v1 la cgroup v2. Principala diferență între cgroups v2 și v1 este utilizarea unei ierarhii comune de cgroups pentru toate tipurile de resurse, în loc de ierarhii separate pentru distribuirea resurselor CPU, gestionarea consumului de memorie și pentru intrări/ieșiri. Ierarhiile separate duc la dificultăți în organizarea interacțiunii între manipulatoare și la costuri suplimentare de resurse ale nucleului atunci când se aplică reguli pentru procesele menționate în diferite ierarhii.
  • În a doua jumătate a anului 2023, se preconizează că suportul pentru ierarhiile separate de directoare va fi încheiat, când /usr este montat separat de rădăcină sau directoarele /bin și /usr/bin, /lib și /usr/lib sunt separate.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster