Após quatro meses de desenvolvimento, foi lançado o gestor de sistema systemd 248. Esta nova versão oferece suporte a imagens para a extensão de diretórios de sistema, ao arquivo de configuração /etc/veritytab, à utilidade systemd-cryptenroll, ao desbloqueio do LUKS2 usando chips TPM2 e tokens FIDO2, ao início de units em um espaço isolado de identificadores IPC, ao protocolo B.A.T.M.A.N. para redes mesh e ao backend nftables para systemd-nspawn. O systemd-oomd foi estabilizado.
Principais mudanças:
- Foi implementada a concepção de imagens de extensão do sistema (System Extension), que podem ser utilizadas para expandir a hierarquia de diretórios /usr/ e /opt/, e adicionar arquivos adicionais durante a operação, mesmo que os diretórios especificados estejam montados em modo somente leitura. Ao conectar uma imagem de extensão do sistema, seu conteúdo é sobreposto à hierarquia /usr/ e /opt/ usando o OverlayFS.
Para conectar, desconectar, visualizar e atualizar imagens de extensões de sistema, uma nova utilidade chamada systemd-sysext foi proposta. Para conectar automaticamente as imagens já instaladas durante a inicialização, foi adicionado o serviço systemd-sysext.service. O arquivo os-release agora inclui o parâmetro "SYSEXT_LEVEL=" para determinar o nível das extensões de sistema suportadas.
- Para units, foi implementada a configuração ExtensionImages, que pode ser usada para vincular imagens de extensão do sistema à hierarquia do namespace de FS de serviços isolados individuais.
- Foi adicionado o arquivo de configuração /etc/veritytab para a configuração da verificação de dados em nível de bloco usando o módulo dm-verity. O formato do arquivo é semelhante ao /etc/crypttab — "nome_da_partição dispositivo_para_dados dispositivo_para_hashes hash_de_verificação_raiz opções". Para configurar o comportamento do dm-verity para o dispositivo raiz, foi adicionado um parâmetro de linha de comando no kernel systemd.verity.root_options.
- No systemd-cryptsetup, foi adicionada a capacidade de extrair o URI do token PKCS#11 e a chave criptografada do cabeçalho dos metadados LUKS2 em formato JSON, permitindo integrar informações sobre a abertura de um dispositivo criptografado no próprio dispositivo, sem a necessidade de arquivos externos.
- No systemd-cryptsetup, foi oferecido suporte para desbloquear partições criptografadas LUKS2 usando chips TPM2 e tokens FIDO2, além dos tokens PKCS#11 já suportados anteriormente. O carregamento do libfido2 é feito através do dlopen(), ou seja, a presença é verificada em tempo real, e não sob a forma de uma dependência rígida.
- No arquivo /etc/crypttab para o systemd-cryptsetup, foram adicionadas novas opções "no-write-workqueue" e "no-read-workqueue" para habilitar o processamento síncrono de entradas/saídas relacionadas à criptografia e descriptografia.
- A ferramenta systemd-repart agora permite a ativação de partições criptografadas usando chips TPM2, por exemplo, para criar uma partição criptografada /var durante a primeira inicialização.
- Foi adicionada a utilidade systemd-cryptenroll para associar tokens TPM2, FIDO2 e PKCS#11 a partições LUKS, além de permitir a desvinculação e visualização de tokens, vinculação de chaves de reserva e definição de senha para acesso.
- Foi adicionado o parâmetro PrivateIPC, que permite configurar o início de processos em um espaço IPC isolado com seus próprios identificadores e filas de mensagens no arquivo unit. Para conectar a unidade a um espaço de identificadores IPC já existente, foi proposta a opção IPCNamespacePath.
- As configurações ExecPaths e NoExecPaths foram adicionadas, permitindo aplicar o sinalizador noexec a partes específicas do sistema de arquivos.
- O systemd-networkd agora suporta o protocolo de malha B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking"), permitindo a criação de redes descentralizadas, onde cada nó está conectado a nós vizinhos. Para configuração, foi introduzida a seção [BatmanAdvanced] no arquivo .netdev, o parâmetro BatmanAdvanced nos arquivos .network e um novo tipo de dispositivo "batadv".
- Foi estabilizada a implementação do mecanismo de resposta antecipada à falta de memória no sistema systemd-oomd. Uma opção DefaultMemoryPressureDurationSec foi adicionada para configurar o tempo de espera pela liberação de recursos antes de impactar a unidade. O systemd-oomd utiliza a subsistema PSI do núcleo (Pressure Stall Information) e permite identificar o início de atrasos devido à falta de recursos e finalizar seletivamente processos que consomem muitos recursos, quando o sistema ainda não está em estado crítico e não inicia um corte intensivo de cache e troca de dados para a partição de swap.
- Foi adicionado um parâmetro de linha de comandos do núcleo — "root=tmpfs", que permite montar a partição raiz em armazenamento temporário, localizado na memória RAM, usando Tmpfs.
- O parâmetro em /etc/crypttab que define o arquivo de chave agora pode apontar para sockets do tipo AF_UNIX e SOCK_STREAM. A chave, neste caso, deve ser fornecida ao conectar-se ao socket, o que pode ser aplicado, por exemplo, para criar serviços que fornecem chaves dinamicamente.
- O nome do host de fallback para uso pelo gerenciador do sistema e pelo systemd-hostnamed agora pode ser definido de duas maneiras: através do parâmetro DEFAULT_HOSTNAME em os-release e pela variável de ambiente $SYSTEMD_DEFAULT_HOSTNAME. O systemd-hostnamed também implementou o tratamento do nome do host como 'localhost' e a possibilidade de exportar o nome do host, assim como as propriedades 'HardwareVendor' e 'HardwareModel' via DBus.
- O bloco de variáveis de ambiente agora pode ser configurado através da nova opção ManagerEnvironment em system.conf ou user.conf, e não apenas pela linha de comando do kernel e configurações de arquivos unit.
- Durante a fase de compilação, foi disponibilizada a opção de usar a chamada de sistema fexecve() em vez de execve() para reduzir o atraso entre a verificação do contexto de segurança e sua aplicação.
- Novas operações condicionais ConditionSecurity=tpm2 e ConditionCPUFeature foram adicionadas aos arquivos unit para verificar a presença de dispositivos TPM2 e características específicas do CPU (por exemplo, ConditionCPUFeature=rdrand pode ser usada para verificar o suporte do processador à operação RDRAND).
- Para os kernels disponíveis, a geração automática de tabelas de chamadas de sistema para os filtros seccomp foi implementada.
- Foi adicionada a possibilidade de inserir novas montagens (bind mounts) em namespaces de montagem existentes dos serviços, sem reiniciar os serviços. A inserção é feita pelos comandos ‘systemctl bind …’ e ‘systemctl mount-image …’.
- Nas configurações StandardOutput e StandardError, foi adicionada a suporte para especificar caminhos no formato 'truncate:' para limpeza antes do uso.
- No sd-bus, foi adicionada a capacidade de se conectar à sessão de um usuário específico dentro de um contêiner local. Por exemplo, ‘systemctl --user -M lennart@ start quux’.
- Nos arquivos systemd.link na seção [Link], foram implementados os parâmetros:
- Promiscuous — permite colocar o dispositivo em modo ‘promiscuous’ para processar todos os pacotes de rede, incluindo aqueles não endereçados ao sistema atual;
- TransmitQueues e ReceiveQueues para configurar o número de filas TX e RX;
- TransmitQueueLength para configurar o tamanho da fila TX; GenericSegmentOffloadMaxBytes e GenericSegmentOffloadMaxSegment para definir limites para a aplicação da tecnologia GRO (Generic Receive Offload).
- Novas configurações foram adicionadas aos arquivos systemd.network:
- [Network] RouteTable para escolher a tabela de roteamento;
- [RoutingPolicyRule] Type para o tipo de roteamento ('blackhole', 'unreachable', 'prohibit');
- [IPv6AcceptRA] RouteDenyList e RouteAllowList para listas de anúncios de rotas permitidas e proibidas;
- [DHCPv6] UseAddres para ignorar o endereço atribuído pelo DHCP;
- [DHCPv6PrefixDelegation] ManageTemporaryAddress;
- ActivationPolicy para definir a política em relação à atividade da interface (sempre manter UP ou DOWN ou permitir que o usuário altere os estados com o comando “ip link set dev”).
- Foram adicionadas ao arquivo systemd.netdev as opções [VLAN] Protocol, IngressQOSMaps, EgressQOSMaps e [MACVLAN] BroadcastMulticastQueueLength para configurar o processamento de pacotes VLAN.
- A montagem do diretório /dev/ no modo noexec foi interrompida, pois isso causa conflito ao usar a flag executável com arquivos em /dev/sgx. Para restaurar o comportamento anterior, pode-se usar a configuração NoExecPaths=/dev.
- As permissões do arquivo /dev/vsock foram alteradas para 0o666, e os arquivos /dev/vhost-vsock e /dev/vhost-net foram movidos para o grupo. kvm.
- A base de identificadores de hardware foi expandida para dispositivos USB para leitura de impressões digitais, que suportam corretamente a transição para o modo de suspensão.
- O systemd-resolved adicionou suporte a resposta a consultas DNSSEC através do stub-resolver. Clientes locais podem realizar a validação DNSSEC por conta própria, enquanto os externos são encaminhados inalterados para o servidor DNS pai.
- Uma nova opção CacheFromLocalhost foi adicionada ao resolved.conf, onde, ao ser configurada, o systemd-resolved usará cache até mesmo para consultas ao servidor DNS no endereço 127.0.0.1 (por padrão, o cache para tais consultas é desabilitado para evitar cache duplo).
- O systemd-resolved agora suporta RFC-5001 NSID no resolvedor DNS local, permitindo que os clientes diferenciem a interação com o resolvedor local de outras. servidor DNS.
- Na ferramenta resolvectl, foi implementada a capacidade de exibir informações sobre a origem dos dados (cache local, consulta de rede, resposta do manipulador local) e de aplicar criptografia durante a transmissão de dados. Para controlar o processo de resolução de nomes, foram sugeridas opções —cache, —synthesize, —network, —zone, —trust-anchor e —validate.
- No systemd-nspawn, foi adicionada a suporte para configuração de firewall usando nftables, além do suporte existente para iptables. Na configuração IPMasquerade do systemd-networkd, foi adicionada a possibilidade de usar um backend baseado em nftables.
- No systemd-localed, foi adicionada a capacidade de chamar locale-gen para gerar locales ausentes.
- Várias utilidades foram adicionadas com opções —pager/—no-pager/—json= para habilitar/desabilitar o modo de visualização paginada e saída no formato JSON. Agora é possível definir o número de cores usadas no terminal através da variável de ambiente SYSTEMD_COLORS (‘16’ ou ‘256’).
- Foram descontinuadas a versão com hierarquias de diretórios separadas (divisão entre / e /usr) e o suporte ao cgroup v1.
- O ramo principal no Git foi renomeado de ‘master’ para ‘main’.
Fonte: opennet.ru
