Lanzamiento de systemd system manager 252 con soporte UKI (Unified Kernel Image)

Después de cinco meses de desarrollo, se presentó el lanzamiento del administrador del sistema systemd 252. El cambio clave en la nueva versión fue la integración de soporte para un proceso de arranque modernizado, que permite verificar no solo el kernel y el gestor de arranque, sino también los componentes. del entorno básico del sistema mediante firmas digitales.

El método propuesto implica el uso de una imagen de kernel unificada UKI (Unified Kernel Image) durante la carga, que combina un controlador para cargar el kernel desde UEFI (UEFI boot stub), una imagen del kernel de Linux y el entorno del sistema initrd cargado en la memoria, utilizado para la inicialización inicial en la etapa anterior al montaje del FS raíz. La imagen UKI está empaquetada como un único archivo ejecutable en formato PE, que se puede cargar utilizando cargadores de arranque tradicionales o llamar directamente desde el firmware UEFI. Cuando se llama desde UEFI, es posible verificar la integridad y confiabilidad de la firma digital no solo del kernel, sino también del contenido del initrd.

Para calcular los parámetros de los registros TPM PCR (Trusted Platform Module Platform Configuration Register) utilizados para monitorear la integridad y generar una firma digital de la imagen UKI, se incluye una nueva utilidad systemd-measure. La clave pública y la información de PCR que la acompaña utilizada en la firma se pueden incrustar directamente en la imagen de inicio de UKI (la clave y la firma se guardan en un archivo PE en los campos '.pcrsig' y '.pcrkey') y se extraen de ella mediante una herramienta externa. o utilidades internas.

En particular, las utilidades systemd-cryptsetup, systemd-cryptenroll y systemd-creds se han adaptado para utilizar esta información, con las que puede asegurarse de que las particiones de disco cifradas estén vinculadas a un kernel firmado digitalmente (en este caso, el acceso a la partición cifrada se proporciona solo si la imagen UKI ha pasado la verificación mediante firma digital basada en parámetros ubicados en TPM).

Además, se incluye la utilidad systemd-pcrphase, que le permite controlar la vinculación de varias etapas de arranque a los parámetros ubicados en la memoria de los criptoprocesadores que admiten la especificación TPM 2.0 (por ejemplo, puede hacer que la clave de descifrado de la partición LUKS2 esté disponible solo en la imagen initrd y bloquear el acceso a ella en etapas posteriores de descarga).

Algunos otros cambios:

  • Garantiza que la configuración regional predeterminada sea C.UTF-8 a menos que se especifique una configuración regional diferente en la configuración.
  • Ahora es posible realizar una operación completa de preajuste del servicio (“systemctl preset”) durante el primer arranque. Para habilitar los ajustes preestablecidos en el momento del arranque es necesario compilar con la opción "-Dfirst-boot-full-preset", pero está previsto que se habilite de forma predeterminada en futuras versiones.
  • Las unidades de administración de usuarios involucran un controlador de recursos de CPU, lo que hizo posible garantizar que la configuración de CPUWeight se aplique a todas las unidades de segmento utilizadas para dividir el sistema en partes (app.slice, background.slice, session.slice) para aislar los recursos entre diferentes servicios de usuario, compitiendo por los recursos de la CPU. CPUWeight también admite el valor "inactivo" para activar el modo de aprovisionamiento de recursos apropiado.
  • En unidades temporales (“transitorias”) y en la utilidad systemd-repart, se permite anular la configuración creando archivos desplegables en el directorio /etc/systemd/system/name.d/.
  • Para las imágenes del sistema, se establece el indicador de soporte finalizado, lo que determina este hecho en función del valor del nuevo parámetro “SUPPORT_END=” en el archivo /etc/os-release.
  • Se agregaron las configuraciones “ConditionCredential=" y "AssertCredential=", que se pueden usar para ignorar o bloquear unidades si ciertas credenciales no están presentes en el sistema.
  • Se agregaron las configuraciones “DefaultSmackProcessLabel=” y “DefaultDeviceTimeoutSec=” a system.conf y user.conf para definir el nivel de seguridad SMACK predeterminado y el tiempo de espera de activación de la unidad.
  • En las configuraciones “ConditionFirmware=" y "AssertFirmware=", se agregó la capacidad de especificar campos SMBIOS individuales, por ejemplo, para iniciar una unidad solo si el campo /sys/class/dmi/id/board_name contiene el valor "Personalizado". Board”, puede especificar “ConditionFirmware=smbios” -field(board_name = "Custom Board")".
  • Durante el proceso de inicialización (PID 1), se agregó la capacidad de importar credenciales desde campos SMBIOS (Tipo 11, “cadenas de proveedores OEM”) además de su definición a través de qemu_fwcfg, lo que simplifica el suministro de credenciales a máquinas virtuales y elimina la necesidad de herramientas de terceros como cloud -init y ignition.
  • Durante el apagado, la lógica para desmontar los sistemas de archivos virtuales (proc, sys) ha cambiado y la información sobre los procesos que bloquean el desmontaje de los sistemas de archivos se guarda en el registro.
  • El filtro de llamadas del sistema (SystemCallFilter) permite el acceso a la llamada del sistema riscv_flush_icache de forma predeterminada.
  • El gestor de arranque sd-boot agrega la capacidad de arrancar en modo mixto, en el que el kernel de Linux de 64 bits se ejecuta desde firmware UEFI de 32 bits. Se agregó la capacidad experimental para aplicar automáticamente claves SecureBoot de archivos encontrados en ESP (partición del sistema EFI).
  • Se han agregado nuevas opciones a la utilidad bootctl: “—all-architectures” para instalar archivos binarios para todas las arquitecturas EFI compatibles, “—root=" y “—image=" para trabajar con un directorio o imagen de disco, “—install-source =” para definir la fuente de instalación, "-efi-boot-option-description=" para controlar los nombres de las entradas de arranque.
  • El comando 'list-automounts' se agregó a la utilidad systemctl para mostrar una lista de directorios montados automáticamente y la opción "--image=" para ejecutar comandos en relación con la imagen de disco especificada. Se agregaron las opciones "--state=" y "--type=" a los comandos 'show' y 'status'.
  • systemd-networkd agregó opciones “TCPCongestionControlAlgorithm=” para seleccionar el algoritmo de control de congestión TCP, “KeepFileDescriptor=” para guardar el descriptor de archivo de las interfaces TUN/TAP, “NetLabel=” para configurar NetLabels, “RapidCommit=” para acelerar la configuración a través de DHCPv6 (RFC 3315). El parámetro “RouteTable=" permite especificar los nombres de las tablas de enrutamiento.
  • systemd-nspawn permite el uso de rutas de archivos relativas en las opciones "--bind=" y "--overlay=". Se agregó soporte para el parámetro 'rootidmap' a la opción "--bind=" para vincular el ID del usuario raíz en el contenedor al propietario del directorio montado en el lado del host.
  • systemd-resolved utiliza OpenSSL como backend de cifrado de forma predeterminada (la compatibilidad con gnutls se mantiene como opción). Los algoritmos DNSSEC no compatibles ahora se tratan como inseguros en lugar de devolver un error (SERVFAIL).
  • systemd-sysusers, systemd-tmpfiles y systemd-sysctl implementan la capacidad de transferir configuraciones a través de un mecanismo de almacenamiento de credenciales.
  • Se agregó el comando 'compare-versions' a systemd-analyze para comparar cadenas con números de versión (similar a 'rpmdev-vercmp' y 'dpkg --compare-versions'). Se agregó la capacidad de filtrar unidades por máscara al comando 'systemd-analyze dump'.
  • Al seleccionar un modo de suspensión de varias etapas (suspender-luego-hibernar), el tiempo que se pasa en modo de espera ahora se selecciona según el pronóstico de duración restante de la batería. La transición instantánea al modo de suspensión ocurre cuando queda menos del 5% de carga de la batería.
  • Se agregó un nuevo modo de salida "-o short-delta" a 'journalctl', que muestra la diferencia horaria entre diferentes mensajes en el registro.
  • systemd-repart agrega soporte para crear particiones con el sistema de archivos Squashfs y particiones para dm-verity, incluso con firmas digitales.
  • Se agregó la configuración "StopIdleSessionSec=" a systemd-logind para finalizar una sesión inactiva después de un tiempo de espera específico.
  • Systemd-cryptenroll ha agregado una opción "--unlock-key-file=" para extraer la clave de descifrado de un archivo en lugar de preguntarle al usuario.
  • Ahora es posible ejecutar la utilidad systemd-growfs en entornos sin udev.
  • systemd-backlight ha mejorado el soporte para sistemas con múltiples tarjetas gráficas.
  • La licencia para los ejemplos de código proporcionados en la documentación se cambió de CC0 a MIT-0.

Cambios que rompen la compatibilidad:

  • Al verificar el número de versión del kernel usando la directiva ConditionKernelVersion, ahora se usa una comparación de cadenas simple en los operadores '=' y '!=', y si el operador de comparación no se especifica en absoluto, se puede usar la coincidencia de máscara global usando el caracteres '*', '?' Y '[', ']'. Para comparar versiones de estilo stverscmp(), utilice los operadores '<', '>', '<=' y '>='.
  • La etiqueta SELinux utilizada para verificar el acceso desde un archivo de unidad ahora se lee en el momento en que se carga el archivo, en lugar de en el momento de la verificación de acceso.
  • La condición "ConditionFirstBoot" ahora se activa en el primer inicio del sistema solo directamente en la etapa de inicio y devuelve "falso" cuando se llama a las unidades después de que se completa el inicio.
  • En 2024, systemd planea dejar de admitir el mecanismo de limitación de recursos de cgroup v1, que quedó obsoleto en la versión 248 de systemd. Se recomienda a los administradores que tengan cuidado antes de migrar los servicios basados ​​en cgroup v2 a cgroup v1. La diferencia clave entre cgroups v2 y v1 es el uso de una jerarquía de cgroups común para todo tipo de recursos, en lugar de jerarquías separadas para asignar recursos de CPU, regular el consumo de memoria y E/S. Las jerarquías separadas generan dificultades para organizar la interacción entre los manejadores y costos adicionales de recursos del núcleo al aplicar reglas para un proceso al que se hace referencia en diferentes jerarquías.
  • En la segunda mitad de 2023, planeamos finalizar el soporte para jerarquías de directorios divididos, donde /usr se monta por separado de la raíz, o /bin y /usr/bin, /lib y /usr/lib están separados.

Fuente: opennet.ru

Añadir un comentario