Após cinco meses de desenvolvimento, foi lançado o gerente de sistema systemd 252. A principal mudança nesta nova versão foi a integração do suporte a um processo de inicialização aprimorado, permitindo verificar por assinaturas digitais não apenas o núcleo e o carregador, mas também os componentes do ambiente de sistema básico.
O método proposto envolve o uso de uma imagem de núcleo unificada UKI (Unified Kernel Image) durante a inicialização, que combina o gerenciador para carregar o núcleo a partir do UEFI (UEFI boot stub), a imagem do núcleo Linux e o ambiente de sistema initrd, usado para a inicialização inicial antes de montar o sistema de arquivos raiz. A imagem UKI é formatada como um único arquivo executável no formato PE, que pode ser carregado por carregadores tradicionais ou chamado diretamente da firmware UEFI. Quando invocado a partir do UEFI, há a possibilidade de verificar a integridade e a autenticidade por assinatura digital não só do núcleo, mas também do conteúdo do initrd.
Para calcular os parâmetros dos registradores TPM PCR (Trusted Platform Module Platform Configuration Register), usados para controle de integridade e formação de assinatura digital da imagem UKI, foi incluída uma nova ferramenta systemd-measure. A chave pública utilizada na assinatura e as informações associadas ao PCR podem ser embutidas diretamente na imagem inicial UKI (a chave e a assinatura são armazenadas em um arquivo no formato PE nos campos '.pcrsig' e '.pcrkey') e extraídas por utilitários externos ou internos.
Além disso, para utilizar essas informações, as ferramentas systemd-cryptsetup, systemd-cryptenroll e systemd-creds foram adaptadas, permitindo vincular partições de disco criptografadas ao núcleo assinado digitalmente (neste caso, o acesso à partição criptografada é concedido somente se a imagem UKI passou pela verificação de assinatura digital com base nos parâmetros armazenados no TPM).
Adicionalmente, foi incluída a ferramenta systemd-pcrphase, que permite gerenciar o vínculo de diferentes estágios de inicialização aos parâmetros armazenados na memória dos criptoprocessadores que suportam a especificação TPM 2.0 (por exemplo, é possível tornar a chave de descriptografia da partição LUKS2 disponível apenas na imagem initrd e bloquear o acesso a ela em estágios posteriores da inicialização).
Algumas outras mudanças:
- A localização C.UTF-8 é usada por padrão, a menos que uma outra localização seja especificada nas configurações.
- Foi implementada a possibilidade de executar a operação de pré-configuração completa dos serviços (‘systemctl preset’) na primeira inicialização. Para ativar a pré-configuração durante a inicialização, é necessária a compilação com a opção ‘-Dfirst-boot-full-preset’, mas espera-se que em versões futuras isso seja ativado por padrão.
- Nos units de gerenciamento de usuários, foi utilizado um controlador de recursos CPU, o que permitiu aplicar as configurações CPUWeight a todos os slice-units usados para dividir o sistema em partes (app.slice, background.slice, session.slice) para isolar recursos entre diferentes serviços de usuários que competem por recursos de CPU. O CPUWeight também agora suporta o valor ‘idle’ para ativar o modo correspondente de alocação de recursos.
- Nos units temporários (‘transient’) e na ferramenta systemd-repart, é permitido sobrepor as configurações criando arquivos drop-in no diretório /etc/systemd/system/nome.d/.
- Para imagens do sistema, foi implementada a sinalização de término de suporte (‘support-ended’), determinando esse fato com base no valor do novo parâmetro ‘SUPPORT_END=’ no arquivo /etc/os-release.
- Foram adicionadas as configurações ‘ConditionCredential=’ e ‘AssertCredential=’, que podem ser usadas para ignorar ou abortar units na ausência de certas credenciais no sistema.
- No system.conf e user.conf, foram adicionadas as configurações ‘DefaultSmackProcessLabel=’ e ‘DefaultDeviceTimeoutSec=’ para definir o nível de segurança SMACK e o timeout de ativação do unit, aplicados por padrão.
- Nas configurações ‘ConditionFirmware=’ e ‘AssertFirmware=’, foi adicionada a possibilidade de especificar campos individuais SMBIOS, por exemplo, para iniciar o unit apenas se o campo /sys/class/dmi/id/board_name contiver o valor ‘Custom Board’, pode-se especificar ‘ConditionFirmware=smbios-field(board_name =
- Durante a inicialização (PID 1), foi adicionada a capacidade de importar credenciais dos campos SMBIOS (Tipo 11, ‘strings do fornecedor OEM’), além de defini-las através do qemu_fwcfg, o que simplifica a alocação de credenciais máquinas virtuais e permite que ferramentas de terceiros, como cloud-init e ignition, não sejam necessárias.
- Durante o desligamento, a lógica de desmontagem dos sistemas de arquivos virtuais (proc, sys) foi alterada e as informações sobre processos que bloqueiam o desmontagem dos sistemas de arquivos foram preservadas no log.
- No filtro de chamadas de sistema (SystemCallFilter), o acesso à chamada de sistema riscv_flush_icache está permitido por padrão.
- No carregador sd-boot, foi adicionada a possibilidade de inicialização em modo misto, onde o núcleo Linux de 64 bits é iniciado a partir de um firmware UEFI de 32 bits. Foi adicionada uma funcionalidade experimental para aplicação automática de chaves SecureBoot a partir de arquivos encontrados na ESP (partição do sistema EFI).
- No utilitário bootctl, novas opções '—all-architectures' foram adicionadas para instalar arquivos binários para todas as arquiteturas EFI suportadas, '—root=' e '—image=' para trabalhar com um diretório ou imagem de disco, '—install-source=' para determinar a fonte para instalação, '—efi-boot-option-description=' para gerenciar os nomes das entradas de inicialização.
- No utilitário systemctl, foi adicionada a comando 'list-automounts' para mostrar uma lista de diretórios montados automaticamente e a opção '—image=' para executar comandos vinculados à imagem de disco especificada. Nas comandos 'show' e 'status', foram adicionadas opções '—state=' e '—type='.
- No systemd-networkd, foram adicionadas opções 'TCPCongestionControlAlgorithm=' para selecionar o algoritmo de controle de congestionamento TCP, 'KeepFileDescriptor=' para manter o descritor de arquivo das interfaces TUN/TAP, 'NetLabel=' para estabelecer rótulos NetLabel, 'RapidCommit=' para acelerar a configuração via DHCPv6 (RFC 3315). No parâmetro 'RouteTable=', agora é permitido especificar nomes de tabelas de roteamento.
- No systemd-nspawn, agora é permitido o uso de caminhos de arquivos relativos nas opções '—bind=' e '—overlay='. Na opção '—bind=', foi adicionada suporte para o parâmetro 'rootidmap' para vincular o identificador do usuário root no contêiner ao proprietário do diretório montado no lado do sistema host.
- No systemd-resolved, o pacote OpenSSL foi acionado como o backend para criptografia por padrão (o suporte ao gnutls foi mantido como uma opção). Algoritmos DNSSEC não suportados agora são tratados como inseguros, em vez de retornar um erro (SERVFAIL).
- No systemd-sysusers, systemd-tmpfiles e systemd-sysctl, foi implementada a capacidade de passar configurações através do mecanismo de armazenamento de credenciais.
- No utilitário systemd-analyze, foi adicionada a comando 'compare-versions' para comparar strings com números de versão (semelhante ao 'rpmdev-vercmp' e 'dpkg —compare-versions'). Na comando 'systemd-analyze dump', foi adicionada a possibilidade de filtrar unidades por máscara.
- Ao escolher o modo de suspensão em várias etapas (suspend-then-hibernate, transição para o modo de suspensão após o modo de espera), o tempo passado no modo de espera agora é selecionado com base na previsão do tempo restante de duração da bateria. A transição imediata para o modo de suspensão ocorre quando resta menos de 5% da carga da bateria.
- Foi adicionado ao ‘journalctl’ um novo modo de saída "-o short-delta", que exibe a diferença de tempo entre diferentes mensagens no log.
- O systemd-repart agora suporta a criação de partições com o sistema de arquivos Squashfs e partições para dm-verity, incluindo com assinaturas digitais.
- Foi adicionada a configuração "StopIdleSessionSec=" no systemd-logind para encerrar sessões inativas após o tempo limite especificado.
- O systemd-cryptenroll agora inclui a opção "—unlock-key-file=" para extrair a chave de descriptografia de um arquivo, em vez de pela saída do prompt ao usuário.
- Agora é possível executar a ferramenta systemd-growfs em ambientes sem udev.
- No systemd-backlight, foi melhorado o suporte para sistemas com várias placas gráficas.
- A licença dos exemplos de código apresentados 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 nos operadores ‘=’ e ‘!=’, agora é aplicado um simples comparativo de string, e se o operador de comparação não for especificado, pode ser utilizada a correspondência por padrão glob com os caracteres ‘*’, ‘?’ e ‘[‘, ‘]’. Para comparações de versões no estilo da função stverscmp(), devem ser utilizados os operadores ‘’, ‘=’.
- A etiqueta SELinux, utilizada para verificar o acesso a partir de arquivos de unidade, agora é lida na fase de carregamento do arquivo, e não no momento da verificação de acesso.
- A condição "ConditionFirstBoot" agora é acionada apenas na primeira inicialização do sistema durante a fase de inicialização e retorna "false" quando chamada por unidades após a conclusão da inicialização.
- Em 2024, o systemd planeja descontinuar o suporte ao mecanismo de limitação de recursos cgroup v1, que foi considerado obsoleto na versão 248 do systemd. Recomenda-se que os administradores se preparem com antecedência para a migração para o cgroup v2 dos serviços dependentes do cgroup v1. A principal diferença entre os cgroups v2 e v1 é a aplicação de uma hierarquia comum de cgroups para todos os tipos de recursos, em vez de hierarquias separadas para alocação de CPU, controle do consumo de memória e entrada/saída. Hierarquias separadas levam a dificuldades na organização da interação entre os manipuladores e a custos adicionais de recursos do núcleo ao aplicar regras para um processo mencionado em diferentes hierarquias.
- Na segunda metade de 2023, está planejada a descontinuação do suporte a hierarquias separadas de diretórios, quando /usr é montado separadamente da raiz ou os diretórios /bin e /usr/bin, /lib e /usr/lib são separados.
Fonte: opennet.ru
