Systemd-homed: Revolução no Gerenciamento de Diretórios do Linux

A equipe por trás do systemd está propondo uma nova abordagem para a gestão de diretórios pessoais, uma mudança que representa uma verdadeira transformação no paradigma do Linux. Este artigo aborda o systemd-homed, uma inovação que em breve poderá estar presente em muitas distribuições Linux.

Um Histórico de Debates

Desde a sua introdução em 2010, o systemd tem sido alvo de intensas discussões na comunidade Linux, dividindo opiniões entre aqueles que o consideram um avanço, os que o veem como uma violação da filosofia Unix, e aqueles que se mantêm neutros.

A oposição manifestou-se de forma veemente, chegando a atos de fanatismo. Lennart Poettering, engenheiro da Red Hat e co-desenvolvedor do systemd, foi alvo de ameaças de morte.

Canções com conteúdo violento contra Poettering surgiram no YouTube, e sites foram criados com o objetivo de incitar os usuários de Linux a boicotar o systemd. Kay Sievers, outro co-desenvolvedor, também enfrentou críticas e ofensas, mas foi Poettering quem mais sofreu as consequências dessa oposição.

Apesar da resistência, o Fedora adotou o systemd em apenas oito meses. No final de 2013, distribuições como Arch, Debian, Manjaro e Ubuntu já haviam migrado para o systemd. No entanto, o caráter aberto do código permitiu que projetos como o Devuan, um fork do Debian, surgissem com o propósito de evitar o uso do systemd.

O Papel do Diretório $HOME

Na organização do Linux, todos os arquivos pessoais são armazenados no diretório “/home”. Dentro dele, cada conta de usuário possui seu próprio diretório, onde são guardados arquivos de dados, imagens, músicas e todas as suas subpastas.

As configurações de aplicativos ficam armazenadas em diretórios ocultos dentro da pasta pessoal, os chamados “diretórios de ponto”. Um ponto (.) no início de um arquivo ou pasta faz com que ele fique oculto. Como as configurações são salvas localmente, e não em um registro central, um backup do diretório pessoal também copia essas configurações.

Ao restaurar um backup e abrir um aplicativo como o LibreOffice ou o Thunderbird, ele procura pelos diretórios ocultos. Lá, encontra suas preferências, configurações de barra de ferramentas e personalizações. O Thunderbird também recupera as informações da conta de e-mail e as mensagens, sem a necessidade de configurar tudo novamente.

Para visualizar arquivos e diretórios ocultos, pode-se usar o comando ‘ls -a’. Primeiro, execute ‘ls’ para ver os arquivos normais. Depois, use ‘ls -a’ para revelar os arquivos e pastas ocultos.

Por ser a parte mais vital de uma instalação, o diretório “/home” costuma ser montado em uma partição ou disco separado. Isso garante que, em caso de problemas com o sistema operacional, a partição do “/home” pode ser remontada após uma reinstalação ou troca de distribuição, sem perda de dados.

Dados e Identidade

Além dos dados, o diretório pessoal também guarda informações sobre o usuário, incluindo atributos da sua identidade digital. O diretório “.ssh”, por exemplo, armazena dados sobre conexões remotas e chaves SSH geradas.

Outros dados como nome de usuário, senha e ID de usuário ficam em outros locais, como nos arquivos “/etc/passwd” e “/etc/shadow”. Alguns desses dados são acessíveis por todos, enquanto outros requerem privilégios de root.

O conteúdo do arquivo “/etc/passwd” se parece com:

cat /etc/passwd

As Mudanças do systemd-homed

O systemd-homed propõe um diretório pessoal totalmente portátil, que armazene dados e identidade digital do usuário Linux. O UID e outros mecanismos de autenticação seriam armazenados exclusivamente no diretório pessoal.

Com um design “todos os ovos em uma cesta”, os diretórios pessoais são criptografados e descriptografados automaticamente ao fazer login e logout. A criptografia de disco LUKS é o método preferido, mas outras opções como fscrypt também são suportadas.

Um registro de usuário em JSON armazena as informações de identidade em um diretório chamado “~/.identity”. Ele é assinado com uma chave criptográfica fora do controle do usuário.

Cada diretório pessoal é montado em um dispositivo de loopback, semelhante a como aplicativos snap são montados. Isso permite que o diretório inicial se integre à árvore de diretórios do sistema operacional. O ponto de montagem padrão é “/home/$USER.homedir”, onde “$USER” é o nome da conta do usuário.

Vantagens da Nova Abordagem

Com o diretório pessoal se tornando um encapsulamento seguro, ele pode ser movido entre dispositivos. Uma unidade USB, por exemplo, poderia ser usada para transportar o diretório entre computadores no trabalho, em casa, ou outros com o systemd-homed.

Essa é a ideia do “diretório pessoal totalmente portátil” de Poettering. Mesmo que o diretório não seja movido, as atualizações e migrações seriam mais fáceis e seguras.

O objetivo é eliminar o que Poettering chama de “bancos de dados secundários”, que contêm informações importantes fragmentadas. Os arquivos “/etc/passwd” e “/etc/shadow”, por exemplo, contêm dados de autenticação e senhas criptografadas, além de informações como o shell padrão e o GECOS.

Poettering defende que esses metadados sejam racionalizados e armazenados de forma agrupada no registro JSON de cada usuário dentro do seu diretório inicial.

Gerenciamento do Novo $HOME

O serviço systemd-homed é gerenciado por meio do novo utilitário de linha de comando homectl.

Existem comandos para criar usuários e diretórios pessoais, definir limites de armazenamento e gerenciar senhas, bloqueios de contas e exclusões. É possível inspecionar usuários e ler seus registros JSON.

Fuso horário e informações de localização podem ser configurados por usuário. O shell padrão e variáveis de ambiente também podem ser personalizados.

No diretório “/home”, as entradas gerenciadas pelo systemd-homed aparecem com “.homedir” anexado ao nome de usuário, como em:

/home/dave.homedir

É importante lembrar que este é apenas um ponto de montagem, e a localização real do diretório criptografado está em outro local.

Limitações e Desafios

O systemd-homed é destinado apenas a contas de usuários humanos, não podendo ser usado com contas com UID inferior a 1.000, como root, daemon e bin. Isso significa que os métodos tradicionais de gerenciamento de usuários ainda serão necessários, e o systemd-homed não é uma solução universal.

Existe um dilema: o diretório pessoal é descriptografado quando o usuário faz login, mas chaves SSH são necessárias para se autenticar antes do login. Embora a equipe do systemd-homed esteja ciente desse problema, ainda não há uma solução clara.

Outro problema é o que acontece quando um diretório pessoal é transportado para outra máquina. Se o UID já estiver em uso, o usuário recebe um novo UID, o que exige a reatribuição de todos os arquivos. O comando `chown -R` é usado atualmente para essa tarefa, mas outras soluções mais elegantes podem surgir no futuro.

Implementação

As alterações de código foram enviadas em 20 de janeiro de 2020, e incluídas na versão 245 do systemd, disponibilizada com o Ubuntu 20.04 em abril de 2020.

Para verificar a versão do systemd, use o comando:

systemd --version

O comando homectl, no entanto, ainda não está presente. O Ubuntu 20.04 usa um diretório /home tradicional, sem utilizar o systemd-homed.

A decisão de incluir e suportar o systemd-homed e o homectl cabe a cada distribuição. Não há motivo para pânico, já que os métodos tradicionais de gerenciamento de usuários e diretórios pessoais permanecem, oferecendo aos usuários a opção de escolha.