Después de cinco meses de desarrollo, se presenta el lanzamiento del gestor de sistemas systemd 250. En esta nueva versión se ha incluido la posibilidad de almacenar credenciales de forma cifrada, se ha implementado la verificación de secciones GPT detectadas automáticamente mediante firma digital, se ha mejorado la comunicación sobre las razones de las demoras al iniciar servicios, se han añadido opciones para limitar el acceso de los servicios a ciertos sistemas de archivos y interfaces de red, se ha garantizado el soporte para el control de integridad de las particiones mediante el módulo dm-integrity y se ha añadido soporte para la autoactualización de sd-boot.
Principales cambios:
- Se ha añadido soporte para credenciales cifradas y autenticadas, lo que puede ser útil para el almacenamiento seguro de materiales confidenciales, como SSL-claves y contraseñas de acceso. La desencriptación de las credenciales se realiza solo cuando es necesario y en relación a la instalación local o hardware. Los datos se cifran automáticamente utilizando algoritmos de cifrado simétrico, cuya clave puede ubicarse en el sistema de archivos, en un chip TPM2 o utilizando un esquema combinado. Al iniciar el servicio, las credenciales se desencriptan automáticamente y están disponibles para el servicio en su forma normal. Se ha añadido la utilidad 'systemd-creds' para trabajar con credenciales cifradas y se han propuesto configuraciones para los servicios como LoadCredentialEncrypted y SetCredentialEncrypted.
- En sd-stub, el archivo ejecutable para EFI mediante el cual el firmware EFI carga el núcleo de Linux, se ha añadido soporte para cargar el núcleo usando el protocolo LINUX_EFI_INITRD_MEDIA_GUID EFI. También se ha añadido la posibilidad de empaquetar credenciales y archivos sysext en un archivo cpio y pasar este archivo al núcleo junto con initrd (los archivos adicionales se colocan en el directorio \/.extra\/). Esta funcionalidad permite utilizar un entorno initrd verificable e inmutable, complementado mediante sysexts y datos cifrados para la autenticación.
- Se ha ampliado significativamente la especificación de Particiones Descubribles, que proporciona medios para identificar, montar y activar particiones del sistema que utilizan GPT (Tablas de Partición GUID). En comparación con versiones anteriores, se ha implementado soporte para la partición raíz y la partición \/usr en la especificación para la mayoría de las arquitecturas, incluyendo aquellas plataformas que no utilizan UEFI.
En las Particiones Descubribles también se ha añadido soporte para particiones cuya integridad es verificada por el módulo dm-verity utilizando firmas digitales PKCS#7, lo que facilita la creación de imágenes de disco completamente autenticadas. La verificación de la integridad está integrada en diversas utilidades que manipulan imágenes de disco, incluyendo systemd-nspawn, systemd-sysext, systemd-dissect, servicios con RootImage, systemd-tmpfiles y systemd-sysusers.
- Para unidades que se inician o se detienen por mucho tiempo, además de mostrar un indicador animado de progreso de la operación, se ha añadido la capacidad de output de información sobre el estado que permite entender qué está ocurriendo actualmente con el servicio y qué servicio está esperando finalizar el gestor del sistema.
- Se ha añadido el parámetro DefaultOOMScoreAdjust en /etc/systemd/system.conf y /etc/systemd/user.conf, permitiendo ajustar el umbral de activación del OOM-killer en caso de falta de memoria, aplicable a los procesos que inicia systemd para el sistema y los usuarios. Por defecto, el peso de los servicios del sistema es mayor que el de los servicios de usuario, es decir, en caso de falta de memoria, la probabilidad de que se finalicen los servicios de usuario es mayor que la de los servicios del sistema.
- Se ha añadido la configuración RestrictFileSystems, permitiendo restringir el acceso de los servicios a ciertos tipos de sistemas de archivos. Para ver los tipos de sistemas de archivos disponibles, se puede usar el comando 'systemd-analyze filesystems'. De forma similar, se ha implementado la opción RestrictNetworkInterfaces, que permite restringir el acceso a ciertas interfaces de red. La implementación se basa en el módulo BPF de LSM, que restringe el acceso de un grupo de procesos a los objetos del núcleo.
- Se ha añadido un nuevo archivo de configuración /etc/integritytab y la utilidad systemd-integritysetup, que configuran el módulo dm-integrity para el control de la integridad de los datos a nivel de sectores individuales, por ejemplo, para garantizar la inmutabilidad de los datos cifrados (Authenticated Encryption, asegura que un bloque de datos no ha sido modificado de manera encubierta). El formato del archivo /etc/integritytab es similar al de los archivos /etc/crypttab y /etc/veritytab, con la excepción de que en lugar de dm-crypt y dm-verity, se utiliza dm-integrity.
- Se ha añadido un nuevo archivo unitario systemd-boot-update.service, que, al activarse y tener instalado el cargador sd-boot, actualizará automáticamente la versión del cargador sd-boot, manteniendo siempre el código del cargador actualizado. Ahora el sd-boot se compila por defecto con soporte para el mecanismo SBAT (UEFI Secure Boot Advanced Targeting), que resuelve problemas relacionados con la revocación de certificados para UEFI Secure Boot. Además, se ha implementado la capacidad de analizar la configuración de arranque de Microsoft Windows para generar correctamente los nombres de las particiones de arranque de Windows y mostrar la versión de Windows.
En sd-boot también se ha añadido la opción de definir el esquema de color en la etapa de construcción. Durante el proceso de arranque, se ha añadido el soporte para cambiar la resolución de la pantalla pulsando la tecla 'r'. Se ha añadido una tecla de acceso rápido 'f' para acceder a la interfaz de configuración del firmware. Se ha habilitado un modo de arranque automático del sistema correspondiente al elemento del menú seleccionado en el arranque anterior. También se ha añadido la posibilidad de cargar automáticamente los controladores EFI que se encuentran en el directorio /EFI/systemd/drivers/ en la partición ESP (EFI System Partition).
- Se ha incluido un nuevo archivo unitario factory-reset.target, que se gestiona en systemd-logind de manera similar a las operaciones de reinicio, apagado, suspensión e hibernación, y que se utiliza para crear controladores para llevar a cabo el restablecimiento a los valores de fábrica.
- El proceso systemd-resolved ahora crea un socket adicional en la dirección 127.0.0.54 además de 127.0.0.53. Las solicitudes que llegan a la dirección 127.0.0.54 se redirigen siempre al servidor DNS superior y no se procesan localmente.
- Se ha implementado la posibilidad de compilar systemd-importd y systemd-resolved con la biblioteca OpenSSL en lugar de libgcrypt.
- Se ha añadido soporte inicial para la arquitectura LoongArch, utilizada en los procesadores Loongson.
- En systemd-gpt-auto-generator se ha implementado la capacidad de configuración automática para particiones de intercambio definidas por el sistema y cifradas con el subsistema LUKS2.
- En el código de análisis de imágenes GPT, utilizado en systemd-nspawn, systemd-dissect y utilidades similares, se ha implementado la capacidad de decodificar imágenes para otras arquitecturas, lo que permite utilizar systemd-nspawn para ejecutar imágenes en emuladores de otras arquitecturas.
- Al inspeccionar imágenes de disco en systemd-dissect, ahora se muestra información sobre la designación de la partición, incluyendo su idoneidad para el arranque a través de UEFI o su ejecución dentro de un contenedor.
- Se ha añadido el campo «SYSEXT_SCOPE» a los archivos system-extension.d/, que permite especificar el ámbito de aplicación de la imagen del sistema: «initrd», «system» o «portable».
- Se ha agregado el campo «PORTABLE_PREFIXES» al archivo os-release, que se puede utilizar en imágenes portables para determinar los prefijos de los archivos unit soportados.
- En systemd-logind se han implementado nuevas configuraciones HandlePowerKeyLongPress, HandleRebootKeyLongPress, HandleSuspendKeyLongPress y HandleHibernateKeyLongPress, que se pueden utilizar para definir acciones al mantener ciertas teclas presionadas durante más de 5 segundos (por ejemplo, al presionar rápidamente la tecla Suspend se puede configurar para entrar en modo de espera, mientras que al mantenerla se puede activar el modo suspendido).
- Se han implementado configuraciones StartupAllowedCPUs y StartupAllowedMemoryNodes para los units, que se diferencian de las configuraciones similares sin el prefijo Startup en que solo se aplican en la fase de arranque y apagado, lo que permite establecer diferentes restricciones de recursos al arrancar.
- Se han añadido verificaciones [Condition|Assert][Memory|CPU|IO]Pressure, que permiten omitir o finalizar con un error la activación de un unit en caso de que se determine, a través del mecanismo PSI, una alta carga en la memoria, CPU y entrada/salida del sistema.
- El límite predeterminado sobre el número máximo de inodes se ha incrementado para la partición /dev de 64k a 1M, y para /tmp de 400k a 1M.
- Se ha propuesto la configuración ExecSearchPath para los servicios, que permite modificar la ruta para la búsqueda de archivos ejecutables, iniciados a través de configuraciones similares a ExecStart.
- Se ha añadido la configuración RuntimeRandomizedExtraSec, que permite introducir desviaciones aleatorias en el tiempo de espera RuntimeMaxSec, limitando el tiempo de ejecución del unit.
- Se ha ampliado la sintaxis de las configuraciones RuntimeDirectory, StateDirectory, CacheDirectory y LogsDirectory, en las que ahora se puede organizar la creación de un enlace simbólico al directorio especificado mediante la adición de un valor adicional, separado por dos puntos, para permitir el acceso por múltiples rutas.
- Se han propuesto configuraciones TTYRows y TTYColumns para los servicios, para establecer el número de filas y columnas en el dispositivo TTY.
- Se ha añadido la configuración ExitType, que permite modificar la lógica de determinación de la finalización del servicio. Por defecto, systemd solo rastrea la finalización del proceso principal, pero al establecer ExitType=cgroup, el gestor de sistema esperará a que finalice el último proceso en el cgroup.
- La implementación del soporte para TPM2/FIDO2/PKCS11 en systemd-cryptsetup ahora también se compila como un plugin para cryptsetup, lo que permite usar el comando cryptsetup habitual para desbloquear la partición cifrada.
- En el controlador TPM2 en systemd-cryptsetup/systemd-cryptsetup se ha añadido soporte para claves RSA primarias, además de claves ECC, para mejorar la compatibilidad con chips que no admiten ECC.
- Se ha añadido la opción token-timeout en /etc/crypttab, que permite definir el tiempo máximo de espera para conectar un token PKCS#11/FIDO2, tras el cual se solicitará ingresar una contraseña o clave de recuperación.
- En systemd-timesyncd se ha implementado la configuración SaveIntervalSec, que permite guardar periódicamente el valor actual del tiempo del sistema en el disco, por ejemplo, para implementar relojes monotónicos en sistemas sin RTC.
- Se han añadido opciones a la utilidad systemd-analyze: "—image" y "—root" para verificar archivos de unidad dentro de una imagen o directorio raíz especificado, "—recursive-errors" para tener en cuenta las unidades dependientes al detectar errores, "—offline" para verificar archivos de unidad guardados en disco de manera separada, "—json" para salida en formato JSON, "—quiet" para desactivar mensajes no importantes, "—profile" para vinculación a un perfil portátil. También se ha añadido el comando inspect-elf para analizar archivos core en formato ELF y la posibilidad de verificar archivos de unidad con un nombre especificado, independientemente de si este nombre coincide con el nombre del archivo.
- En systemd-networkd se ha ampliado el soporte para el bus CAN (Controller Area Network). Se han agregado configuraciones para gestionar los modos de CAN: Loopback, OneShot, PresumeAck y ClassicDataLengthCode. Se han añadido opciones a la sección [CAN] de los archivos .network: TimeQuantaNSec, PropagationSegment, PhaseBufferSegment1, PhaseBufferSegment2, SyncJumpWidth, DataTimeQuantaNSec, DataPropagationSegment, DataPhaseBufferSegment1, DataPhaseBufferSegment2 y DataSyncJumpWidth para el control de la sincronización de bits de la interfaz CAN.
- En systemd-networkd se ha añadido la opción Label para el cliente DHCPv4, que permite configurar una etiqueta de direcciones que se aplica al configurar direcciones IPv4.
- En systemd-udevd para "ethtool" se ha implementado soporte para valores especiales "max", que establecen el tamaño del búfer al valor máximo soportado por el hardware.
- En los archivos .link para systemd-udevd ahora se pueden configurar diversos parámetros para la agrupación de adaptadores de red y la conexión de controladores de hardware (offload).
- En systemd-networkd, se ofrecen por defecto nuevos archivos .network: 80-container-vb.network para definir los puentes de red creados al iniciar systemd-nspawn con las opciones «—network-bridge» o «—network-zone»; 80-6rd-tunnel.network para definir túneles automáticamente creados al recibir una respuesta DHCP con la opción 6RD.
- En systemd-networkd y systemd-udevd se ha añadido soporte para la transmisión de IP sobre interfaces InfiniBand, para lo cual se agregó la sección «[IPoIB]» en los archivos systemd.netdev y se implementó el manejo del valor «ipoib» en la configuración Kind.
- En systemd-networkd se ha proporcionado la configuración automática de rutas para direcciones especificadas en el parámetro AllowedIPs, que puede ser configurado a través de los parámetros RouteTable y RouteMetric en las secciones [WireGuard] y [WireGuardPeer].
- En systemd-networkd se ha implementado la generación automática de direcciones MAC invariables para las interfaces batadv y bridge. Para deshabilitar este comportamiento, se puede especificar el valor MACAddress=none en los archivos .netdev.
- En los archivos .link se ha añadido la configuración WakeOnLanPassword a la sección «[Link]», para definir la contraseña al utilizar WoL en modo «SecureOn».
- En la sección «[CAKE]» de los archivos .network se han añadido configuraciones como AutoRateIngress, CompensationMode, FlowIsolationMode, NAT, MPUBytes, PriorityQueueingPreset, FirewallMark, Wash, SplitGSO y UseRawPacketSize para determinar los parámetros del mecanismo de gestión de colas de red CAKE (Common Applications Kept Enhanced).
- En la sección «[Network]» de los archivos .network se ha añadido la configuración IgnoreCarrierLoss, que permite definir cuánto tiempo esperar antes de reaccionar a la pérdida de la señal portadora.
- En systemd-nspawn, homectl, machinectl y systemd-run se ha ampliado la sintaxis del parámetro «—setenv»: si solo se especifica el nombre de la variable (sin «=»), el valor se tomará de la variable de entorno correspondiente (por ejemplo, al especificar «—setenv=FOO» se tomará el valor de la variable de entorno $FOO y se utilizará en la variable de entorno del contenedor con el mismo nombre).
- En systemd-nspawn se ha añadido la opción «—suppress-sync» para desactivar la ejecución de llamadas al sistema sync()/fsync()/fdatasync() al crear un contenedor (útil cuando la velocidad es prioritaria y la preservación de artefactos de construcción en caso de fallo no es importante, ya que pueden ser recreados en cualquier momento).
- Se ha agregado una nueva base de datos hwdb, que incluye varios tipos de analizadores de señales (multímetros, analizadores de protocolos, osciloscopios, etc.). La información sobre las cámaras en hwdb se ha ampliado con un campo que indica el tipo de cámara (convencional o infrarroja) y la ubicación de la lente (en frente o detrás).
- Se garantiza la generación de nombres invariables para las interfaces de red de los dispositivos netfront, utilizados en Xen.
- El análisis de archivos core con la utilidad systemd-coredump, basado en las bibliotecas libdw/libelf, ahora se realiza en un proceso separado, aislado en un entorno sandbox.
- Se ha añadido en systemd-importd el soporte para las variables de entorno $SYSTEMD_IMPORT_BTRFS_SUBVOL, $SYSTEMD_IMPORT_BTRFS_QUOTA, $SYSTEMD_IMPORT_SYNC, mediante las cuales se puede desactivar la generación de subvolúmenes Btrfs, así como configurar cuotas y sincronización de discos.
- En systemd-journald, en sistemas de archivos que soportan el modo copy-on-write, se ha restaurado el modo COW para los registros archivados, lo que permite su compresión utilizando Btrfs.
- En systemd-journald se ha implementado la deduplicación de campos iguales en un mismo mensaje, que se lleva a cabo en la etapa previa a colocar el mensaje en el registro.
- Se ha añadido a la orden shutdown la opción "—show" para mostrar el apagado programado.
Fuente: opennet.ru
