Após cinco meses de desenvolvimento, foi apresentado o lançamento do gerenciador de sistema systemd 252. A principal mudança na nova versão foi a integração do suporte para um processo de boot modernizado, que permite verificar não só o kernel e bootloader, mas também componentes do ambiente básico do sistema usando assinaturas digitais.
O método proposto envolve o uso de uma imagem unificada do kernel UKI (Unified Kernel Image) durante o carregamento, que combina um manipulador para carregar o kernel do UEFI (UEFI boot stub), uma imagem do kernel Linux e o ambiente do sistema initrd carregado na memória, usado para inicialização inicial na fase anterior à montagem do FS raiz. A imagem UKI é empacotada como um único arquivo executável no formato PE, que pode ser carregado usando bootloaders tradicionais ou chamado diretamente do firmware UEFI. Quando chamado da UEFI, é possível verificar a integridade e confiabilidade da assinatura digital não apenas do kernel, mas também do conteúdo do initrd.
Para calcular os parâmetros dos registros TPM PCR (Trusted Platform Module Platform Configuration Register) usados para monitorar a integridade e gerar uma assinatura digital da imagem UKI, um novo utilitário systemd-measure está incluído. A chave pública e as informações de PCR que a acompanham usadas na assinatura podem ser incorporadas diretamente na imagem de inicialização do UKI (a chave e a assinatura são salvas em um arquivo PE nos campos '.pcrsig' e '.pcrkey') e extraídas dela por meio externo ou utilitários internos.
Em particular, os utilitários systemd-cryptsetup, systemd-cryptenroll e systemd-creds foram adaptados para usar esta informação, com os quais você pode garantir que as partições de disco criptografadas estejam vinculadas a um kernel assinado digitalmente (neste caso, o acesso à partição criptografada é fornecido somente se a imagem UKI tiver passado na verificação por assinatura digital com base em parâmetros localizados no TPM).
Além disso, o utilitário systemd-pcrphase está incluído, que permite controlar a ligação de vários estágios de inicialização a parâmetros localizados na memória de criptoprocessadores que suportam a especificação TPM 2.0 (por exemplo, você pode disponibilizar a chave de descriptografia da partição LUKS2 apenas em a imagem initrd e bloquear o acesso a ela em downloads posteriores).
Algumas outras mudanças:
- Garante que a localidade padrão seja C.UTF-8, a menos que uma localidade diferente seja especificada nas configurações.
- Agora é possível realizar uma operação completa de predefinição de serviço (“predefinição systemctl”) durante a primeira inicialização. Habilitar predefinições no momento da inicialização requer a construção com a opção "-Dfirst-boot-full-preset", mas está planejado para ser habilitado por padrão em versões futuras.
- As unidades de gerenciamento de usuários envolvem um controlador de recursos de CPU, o que possibilitou garantir que as configurações de CPUWeight sejam aplicadas a todas as unidades de slice utilizadas para dividir o sistema em partes (app.slice, background.slice, session.slice) para isolar recursos entre diferentes serviços de usuário, competindo por recursos de CPU. CPUWeight também suporta o valor “idle” para ativar o modo de provisionamento de recursos apropriado.
- Em unidades temporárias (“transitórias”) e no utilitário systemd-repart, a substituição de configurações é permitida criando arquivos drop-in no diretório /etc/systemd/system/name.d/.
- Para imagens do sistema, o flag support-ended é definido, determinando este fato com base no valor do novo parâmetro “SUPPORT_END=” no arquivo /etc/os-release.
- Adicionadas configurações “ConditionCredential=” e “AssertCredential=”, que podem ser usadas para ignorar ou travar unidades se determinadas credenciais não estiverem presentes no sistema.
- Adicionadas configurações “DefaultSmackProcessLabel=” e “DefaultDeviceTimeoutSec=” a system.conf e user.conf para definir o nível de segurança SMACK padrão e o tempo limite de ativação da unidade.
- Nas configurações “ConditionFirmware=” e “AssertFirmware=”, foi adicionada a capacidade de especificar campos SMBIOS individuais, por exemplo, para iniciar uma unidade somente se o campo /sys/class/dmi/id/board_name contiver o valor “Custom Board”, você pode especificar “ConditionFirmware=smbios” -field(board_name = "Custom Board")".
- Durante o processo de inicialização (PID 1), foi adicionada a capacidade de importar credenciais de campos SMBIOS (Tipo 11, “strings de fornecedor OEM”), além de sua definição via qemu_fwcfg, o que simplifica o fornecimento de credenciais para máquinas virtuais e elimina o necessidade de ferramentas de terceiros, como cloud-init e ignição.
- Durante o desligamento, a lógica de desmontagem dos sistemas de arquivos virtuais (proc, sys) foi alterada e as informações sobre os processos que bloqueiam a desmontagem dos sistemas de arquivos são salvas no log.
- O filtro de chamada do sistema (SystemCallFilter) permite acesso à chamada do sistema riscv_flush_icache por padrão.
- O bootloader sd-boot adiciona a capacidade de inicializar em modo misto, no qual o kernel Linux de 64 bits é executado a partir de firmware UEFI de 32 bits. Adicionada capacidade experimental de aplicar automaticamente chaves SecureBoot de arquivos encontrados no ESP (partição do sistema EFI).
- Novas opções foram adicionadas ao utilitário bootctl: “—all-architectures” para instalar binários para todas as arquiteturas EFI suportadas, “—root=” e “—image=” para trabalhar com um diretório ou imagem de disco, “—install-source =” para definir a fonte de instalação, "-efi-boot-option-description=" para controlar os nomes das entradas de inicialização.
- O comando 'list-automounts' foi adicionado ao utilitário systemctl para exibir uma lista de diretórios montados automaticamente e a opção "--image=" para executar comandos em relação à imagem de disco especificada. Adicionadas opções "--state=" e "--type=" aos comandos 'show' e 'status'.
- systemd-networkd adicionou opções “TCPCongestionControlAlgorithm=” para selecionar o algoritmo de controle de congestionamento TCP, “KeepFileDescriptor=” para salvar o descritor de arquivo das interfaces TUN/TAP, “NetLabel=” para definir NetLabels, “RapidCommit=” para acelerar a configuração via DHCPv6 (RFC3315). O parâmetro “RouteTable=” permite especificar os nomes das tabelas de roteamento.
- systemd-nspawn permite o uso de caminhos de arquivo relativos nas opções "--bind=" e "--overlay=". Adicionado suporte para o parâmetro 'rootidmap' à opção "--bind=" para vincular o ID do usuário root no contêiner ao proprietário do diretório montado no lado do host.
- systemd-resolved usa OpenSSL como back-end de criptografia por padrão (o suporte a gnutls é mantido como uma opção). Algoritmos DNSSEC não suportados agora são tratados como inseguros em vez de retornarem um erro (SERVFAIL).
- systemd-sysusers, systemd-tmpfiles e systemd-sysctl implementam a capacidade de transferir configurações por meio de um mecanismo de armazenamento de credenciais.
- Adicionado o comando 'compare-versions' ao utilitário systemd-analyze para comparar strings com números de versão (semelhante a 'rpmdev-vercmp' e 'dpkg --compare-versions'). Adicionada a capacidade de filtrar unidades por máscara ao comando 'systemd-analyze dump'.
- Ao selecionar um modo de suspensão de vários estágios (suspender e depois hibernar), o tempo gasto no modo de espera agora é selecionado com base na previsão da vida útil restante da bateria. A transição instantânea para o modo de suspensão ocorre quando resta menos de 5% da carga da bateria.
- Um novo modo de saída "-o short-delta" foi adicionado ao 'journalctl', exibindo a diferença de tempo entre diferentes mensagens no log.
- systemd-repart adiciona suporte para criação de partições com o sistema de arquivos Squashfs e partições para dm-verity, inclusive com assinaturas digitais.
- Adicionada configuração "StopIdleSessionSec=" ao systemd-logind para encerrar uma sessão inativa após um tempo limite especificado.
- Systemd-cryptenroll adicionou uma opção "--unlock-key-file=" para extrair a chave de descriptografia de um arquivo em vez de avisar o usuário.
- Agora é possível executar o utilitário systemd-growfs em ambientes sem udev.
- systemd-backlight melhorou o suporte para sistemas com múltiplas placas gráficas.
- A licença para os exemplos de código fornecidos na documentação foi alterada de CC0 para MIT-0.
Mudanças que quebram a compatibilidade:
- Ao verificar o número da versão do kernel usando a diretiva ConditionKernelVersion, uma comparação simples de strings agora é usada nos operadores '=' e '!=', e se o operador de comparação não for especificado, a correspondência de máscara glob pode ser usada usando o personagens '*', '?' E '[', ']'. Para comparar as versões do estilo stverscmp(), use os operadores '<', '>', '<=' e '>='.
- A tag SELinux usada para verificar o acesso de um arquivo de unidade agora é lida no momento em que o arquivo é carregado, e não no momento da verificação de acesso.
- A condição "ConditionFirstBoot" agora é acionada na primeira inicialização do sistema apenas diretamente no estágio de inicialização e retorna "false" ao chamar unidades após a conclusão da inicialização.
- Em 2024, o systemd planeja parar de oferecer suporte ao mecanismo de limitação de recursos cgroup v1, que foi descontinuado na versão 248 do systemd. Os administradores são aconselhados a tomar cuidado antes de migrar serviços baseados em cgroup v2 para cgroup v1. A principal diferença entre cgroups v2 e v1 é o uso de uma hierarquia comum de cgroups para todos os tipos de recursos, em vez de hierarquias separadas para alocar recursos de CPU, para regular o consumo de memória e para E/S. Hierarquias separadas levam a dificuldades na organização da interação entre manipuladores e a custos adicionais de recursos do kernel ao aplicar regras para um processo referenciado em hierarquias diferentes.
- No segundo semestre de 2023, planejamos encerrar o suporte para hierarquias de diretório divididas, onde /usr é montado separadamente da raiz, ou /bin e /usr/bin, /lib e /usr/lib são separados.
Fonte: opennet.ru