Após três meses de desenvolvimento, o lançamento do gerenciador de sistema systemd 249 foi apresentado. A nova versão traz a possibilidade de definir usuários/grupos no formato JSON, estabilizou o protocolo Journal, simplificou a organização do carregamento de partições de disco que se alternam, adicionou a capacidade de vincular programas BPF a serviços, implementou a mapeação de identificadores de usuários nas partições montadas, e ofereceu uma grande quantidade de novas configurações de rede e possibilidades para iniciar contêineres.
Principais mudanças:
- O protocolo Journal foi documentado, podendo ser utilizado em clientes como uma alternativa ao protocolo syslog para entrega local de registros de log. O protocolo Journal foi implementado há bastante tempo e já é utilizado em algumas bibliotecas de clientes, no entanto, seu suporte oficial foi anunciado apenas agora.
- No userdb e nss-systemd, é garantida a leitura de definições adicionais de usuários, localizadas nos diretórios /etc/userdb/, /run/userdb/, /run/host/userdb/ e /usr/lib/userdb/, especificadas no formato JSON. Essa funcionalidade oferece um mecanismo adicional para a criação de usuários no sistema, garantindo uma integração completa com NSS e /etc/shadow. O suporte ao formato JSON para registros de usuários/grupos também permitirá anexar diferentes parâmetros de controle de recursos e outras configurações que são reconhecidas pelo pam_systemd e systemd-logind.
- No nss-systemd, é garantida a síntese de registros de usuários/grupos em /etc/shadow utilizando senhas hashadas do systemd-homed.
- Foi implementado um mecanismo que simplifica a organização da atualização utilizando partições de disco que se substituem (uma partição ativa e outra de reserva - a atualização é copiada para a partição de reserva, que então se torna ativa). Se na imagem do disco houver duas partições raiz ou /usr, e o udev não tiver identificado a presença do parâmetro 'root=' ou se a manipulação de imagens de disco, especificadas através da opção '--image' nas utilidades systemd-nspawn e systemd-dissect, estiver em andamento, a partição de inicialização pode ser calculada através da comparação das etiquetas GPT (supondo que a etiqueta GPT mencione o número da versão do conteúdo da partição e o systemd escolherá a partição com as alterações mais recentes).
- Nos arquivos de serviços foi adicionada a configuração BPFProgram, que permite o carregamento de programas BPF no núcleo e o gerenciamento deles com a vinculação a serviços específicos do systemd.
- No systemd-fstab-generator e no systemd-repart, foi adicionada a possibilidade de inicialização a partir de discos que possuem apenas a partição /usr e não têm a partição raiz (a partição raiz será gerada pela ferramenta systemd-repart durante a primeira inicialização).
- No systemd-nspawn, a opção "—private-user-chown" foi substituída por uma variante mais abrangente "—private-user-ownership", que pode aceitar os valores "chown" como equivalente a "—private-user-chown", "off" para desativar a configuração antiga, "map" para mapeamento de identificadores de usuários em sistemas de arquivos montados e "auto" para escolher "map" quando a funcionalidade necessária estiver presente no núcleo (5.12+) ou reverter para a chamada recursiva "chown" caso contrário. Com o mapeamento, é possível associar arquivos de um usuário em uma partição montada de outro usuário no sistema atual, facilitando o compartilhamento de arquivos entre diferentes usuários. No mecanismo de diretórios pessoais portáteis systemd-homed, o mapeamento permitirá que os usuários movam seus diretórios pessoais para dispositivos externos e os utilizem em diferentes computadores, cujos identificadores de usuários não coincidam.
- No systemd-nspawn, na opção "—private-user", agora é possível usar o valor "identity" para refletir diretamente os identificadores de usuários ao configurar o espaço de nomes (user namespace), ou seja, UID 0 e UID 1 no contêiner serão refletidos em UID 0 e UID 1 no lado do host, para reduzir vetores de ataque (o contêiner obterá as permissões do processo apenas em seu próprio espaço de nomes).
- No systemd-nspawn, foi adicionada a opção "—bind-user" para passar para o contêiner a conta de usuário que existe no ambiente do host (o diretório pessoal é montado no contêiner, uma entrada de usuário/grupo é adicionada e ocorre o mapeamento de UID entre o contêiner e o ambiente do host).
- No systemd-ask-password e systemd-sysusers, foi adicionada a suportar a solicitação de senhas definidas (passwd.hashed-password.<user> e passwd.plaintext-password.<user>) utilizando o novo mecanismo de transmissão segura de dados confidenciais por meio de arquivos temporários em um diretório separado, introduzido na versão 247 do systemd. Por padrão, as credenciais são aceitas pelo processo com PID1, que as obtém, por exemplo, do gerenciador de containers, permitindo a configuração da senha do usuário durante a primeira inicialização.
- No systemd-firstboot, foi adicionada a suportar o uso do mecanismo de transmissão segura de dados confidenciais para solicitar vários parâmetros do sistema, o que pode ser utilizado para inicializar as configurações do sistema durante a primeira inicialização da imagem de um container que não possui as configurações necessárias no diretório /etc.
- No processo PID 1 durante a inicialização, foi garantida a exibição simultânea do nome e da descrição da unidade. A saída pode ser alterada através do parâmetro 'StatusUnitFormat=combined' em system.conf ou pelo parâmetro da linha de comando do kernel 'systemd.status-unit-format=combined'.
- Nas utilidades systemd-machine-id-setup e systemd-repart, foi adicionada a opção '--image' para transmitir um arquivo com o identificador da máquina em imagens de disco ou para aumentar o tamanho da imagem do disco.
- No arquivo de configuração de partições utilizado pela ferramenta systemd-repart, foi adicionado o parâmetro MakeDirectories, que pode ser usado para criar diretórios arbitrários no sistema de arquivos criado antes de sua reflexão na tabela de partições (por exemplo, para criar diretórios no sistema raiz para pontos de montagem, permitindo assim montar a partição em modo somente leitura imediatamente). Para gerenciar as bandeiras GPT nas partições criadas, foram adicionados os parâmetros Flags, ReadOnly e NoAuto. No parâmetro CopyBlocks, foi implementado o valor 'auto' para seleção automática da partição de inicialização atual como fonte ao copiar blocos (por exemplo, quando é necessário transferir a própria partição raiz para um novo dispositivo).
- No GPT foi implementada a flag "grow-file-system", análoga à opção de montagem x-systemd.growfs, que garante a expansão automática do tamanho do sistema de arquivos até os limites do dispositivo de bloco, caso o tamanho do sistema de arquivos seja menor que a partição. A flag é aplicável aos sistemas de arquivos Ext3, XFS e Btrfs, e pode ser utilizada em partições automaticamente detectadas. A flag é ativada por padrão para partições graváveis, criadas automaticamente através do systemd-repart. Foi adicionada uma opção GrowFileSystem para configurar a flag no systemd-repart.
- No arquivo /etc/os-release foi implementado o suporte a novas variáveis IMAGE_VERSION e IMAGE_ID para determinar a versão e o identificador de imagens atualizáveis atômicamente. Para a substituição dos valores especificados em diversos comandos, foram sugeridos os especificadores %M e %A.
- Na utilidade portablectl foi adicionado o parâmetro "--extension" para ativar imagens portáveis de extensão de sistema (por exemplo, através delas podem ser distribuídas imagens com serviços adicionais, integrados à partição raiz).
- Na utilidade systemd-coredump foi garantida a extração da informação ELF build-id ao formar o core dump do processo, o que pode ser útil para determinar a que pacote pertence o processo com falha, caso as informações sobre nome e versão de pacotes deb ou rpm tenham sido incorporadas aos arquivos ELF.
- No udev foi adicionada uma nova base de hardware para dispositivos FireWire (IEEE 1394).
- No udev, no esquema de seleção de nomes de interfaces de rede "net_id" foram feitas três mudanças que quebram a compatibilidade retroativa: caracteres inválidos nos nomes das interfaces agora são substituídos por "_"; nomes de slots PCI hotplug para sistemas s390 são processados na forma de números hexadecimais; é permitido o uso de até 65535 dispositivos PCI incorporados (anteriormente, números acima de 16383 eram bloqueados).
- No systemd-resolved, o domínio "home.arpa" foi adicionado à lista NTA (Negative Trust Anchors), recomendado para redes locais domésticas, mas não utilizado no DNSSEC.
- No parâmetro CPUAffinity, foi garantida a análise dos especificadores "%".
- Nos arquivos ".network" foi adicionado o parâmetro ManageForeignRoutingPolicyRules, que pode ser utilizado para excluir o processamento no systemd-networkd de políticas de roteamento de terceiros.
- Nos arquivos ".network" foi adicionado o parâmetro RequiredFamilyForOnline para determinar a presença de um endereço IPv4 ou IPv6 como critério para considerar a interface de rede como "online". No networkctl, foi garantida a exibição do estado "online" para cada link.
- O arquivo «.network» agora inclui o parâmetro OutgoingInterface para definir as interfaces de saída ao configurar pontes de rede.
- O arquivo «.network» agora inclui o parâmetro Group, que permite configurar um grupo Multipath para entradas na seção «[NextHop]».
- No systemd-network-wait-online, foram adicionadas as opções «-4» e «-6» para limitar a espera de conexão apenas para IPv4 ou IPv6.
- No servidor DHCP, foi adicionado o parâmetro RelayTarget, que coloca o servidor no modo DHCP Relay. Para configuração adicional do relay DHCP, foram oferecidas as opções RelayAgentCircuitId e RelayAgentRemoteId.
- No servidor DHCP, foi adicionado o parâmetro ServerAddress, que permite definir explicitamente o endereço IP do servidor (caso contrário, o endereço é escolhido automaticamente).
- No servidor DHCP, foi implementada a seção [DHCPServerStaticLease], que permite configurar vínculos estáticos de endereços (DHCP leases), especificando a associação de IPs fixos a endereços MAC e vice-versa.
- Na configuração RestrictAddressFamilies, foi implementado o suporte ao valor «none», ao qual o serviço não terá acesso a soquetes de nenhuma família de endereços.
- Nos arquivos «.network», nas seções [Address], [DHCPv6PrefixDelegation] e [IPv6Prefix], foi implementado o suporte para configuração de RouteMetric, que permite definir a métrica para o prefixo de rota criado para o endereço especificado.
- No nss-myhostname e systemd-resolved, foi garantida a síntese de registros DNS com endereços para hosts com o nome especial «_outbound», para os quais sempre é retornado um IP local, escolhido de acordo com as rotas padrão utilizadas para conexões de saída.
- Nos arquivos .network, na seção «[DHCPv4]», foi adicionada uma configuração ativa por padrão chamada RoutesToNTP, que instrui a adicionar uma rota separada através da interface de rede atual para acessar o endereço do servidor NTP obtido para essa interface através do DHCP (de maneira semelhante à configuração DNS, isso garante que o tráfego para o servidor NTP seja direcionado pela interface através da qual esse endereço foi obtido).
- Foram adicionadas as configurações SocketBindAllow e SocketBindDeny para gerenciar o acesso aos soquetes vinculados ao serviço atual.
- Para os arquivos unit, foi implementada a configuração condicional ConditionFirmware, que permite criar verificações que avaliam as funções do firmware, como operação em sistemas UEFI e device.tree, além de verificar a compatibilidade com determinados recursos do device-tree.
- Implementada a opção ConditionOSRelease para verificar os campos no arquivo /etc/os-release. Ao definir as condições de verificação dos valores dos campos, são permitidos os operadores "=", "!=", "<", "=" e ">".
- Na utilidade hostnamectl, os comandos do tipo "get-xyz" e "set-xyz" foram simplificados, removendo os prefixos "get" e "set". Por exemplo, em vez de "hostnamectl get-hostname" e "hostnamectl set-hostname", agora pode-se utilizar o comando "hostnamectl hostname", onde a atribuição de valor é feita ao indicar um argumento adicional ("hostnamectl hostname value"). O suporte aos comandos antigos foi mantido para garantir compatibilidade.
- Na ferramenta systemd-detect-virt e na configuração ConditionVirtualization, a identificação de ambientes Amazon EC2 foi aprimorada.
- A configuração LogLevelMax nos arquivos de unidade agora se aplica não apenas às mensagens de log geradas pelo serviço, mas também às mensagens do processo PID 1 que menciona o serviço.
- Adicionada a possibilidade de inclusão de dados SBAT (UEFI Secure Boot Advanced Targeting) nos arquivos systemd-boot EFI PE.
- No /etc/crypttab, foram implementadas novas opções "headless" e "password-echo" — a primeira permite pular todas as operações relacionadas a solicitações interativas de senhas e PINs do usuário, enquanto a segunda possibilita configurar o método de exibição da entrada de senha (nada mostrar, mostrar caractere por caractere ou exibir asteriscos). Na systemd-ask-password, foi adicionada a opção "--echo" para objetivos semelhantes.
- No systemd-cryptenroll, systemd-cryptsetup e systemd-homed, foi ampliado o suporte para desbloquear partições cifradas LUKS2 usando tokens FIDO2. Novas opções foram adicionadas: "--fido2-with-user-presence", "--fido2-with-user-verification" e "--fido2-with-client-pin" para controlar a verificação da presença física do usuário, a verificação e a necessidade de inserir o PIN.
- No systemd-journal-gatewayd, foram adicionadas as opções "--user", "--system", "--merge" e "--file", semelhantes às opções correspondentes do journalctl.
- Além das dependências diretas entre unidades, definidas por meio dos parâmetros OnFailure e Slice, agora há suporte para dependências inversas implícitas OnFailureOf e SliceOf, que podem ser úteis, por exemplo, para identificar todas as unidades que pertencem a um slice.
- Novos tipos de dependências entre unidades foram adicionados: OnSuccess e OnSuccessOf (oposto a OnFailure, invocado após a conclusão bem-sucedida); PropagatesStopTo e StopPropagatedFrom (permitem propagar o evento de parada de uma unidade para outra unidade); Upholds e UpheldBy (alternativa a Restart).
- A opção «—emoji» foi adicionada na ferramenta systemd-ask-password para gerenciar a exibição do símbolo de cadeado (🔐) na linha de entrada da senha.
- Foi adicionada a documentação sobre a estrutura da árvore de textos de origem do systemd.
- Para os units, foi adicionada a propriedade MemoryAvailable, que indica quanto de memória permanece disponível para o unit antes de atingir o limite definido pelos parâmetros MemoryMax, MemoryHigh ou MemoryAvailable.
Fonte: opennet.ru
