systemd-homed: Contas Portáteis e Encriptadas no Linux

O systemd-homed é um componente do systemd que gere directórios pessoais encriptados com LUKS associados a cada utilizador. Permite portabilidade entre máquinas, desbloqueio automático no início de sessão e gestão centralizada de contas — relevante para PME com estações de trabalho partilhadas ou BYOD.

1. Introdução ao systemd-homed

O systemd-homed foi introduzido no systemd 245 (2020) para resolver um problema histórico do Linux: o directório pessoal fica em texto legível no disco, acessível por qualquer administrador com root. Mesmo com encriptação de disco completo no arranque, os dados ficam expostos após o arranque.

O systemd-homed cria uma camada de encriptação por utilizador: cado directório pessoal é um volume LUKS independente, desbloqueado automaticamente no início de sessão e bloqueado ao terminar sessão. A chave LUKS é derivada da palavra-passe de início de sessão — sem gestão manual. A ferramenta principal é o homectl, que substitui o useradd tradicional. Saiba mais na documentação oficial do systemd.

ℹ Encriptação automática

O systemd-homed encripta automaticamente o directório pessoal com LUKS — o utilizador não precisa de saber a palavra-passe do LUKS. O desbloqueio acontece de forma transparente durante o início de sessão.

2. Configuração

Requer kernel Linux 5.6+ com suporte a LUKS ou fscrypt, e systemd 245+. A maioria das distribuições recentes (Fedora 32+, Arch, openSUSE) inclui o serviço, mas pode não estar activo por defeito.

# Activar systemd-homed
sudo systemctl enable --now systemd-homed

# Confirmar que está activo
systemctl is-active systemd-homed

Em algumas distribuições é necessário configurar o PAM com pam_systemd_home em /etc/pam.d/system-auth:

# Adicionar a /etc/pam.d/system-auth
auth     sufficient pam_systemd_home.so
account  sufficient pam_systemd_home.so
password sufficient pam_systemd_home.so
session  sufficient pam_systemd_home.so

Consulte a Arch Wiki sobre systemd-homed para detalhes por distribuição.

3. Criar Utilizadores

O homectl é o comando para criar, listar, inspeccionar e remover utilizadores homed:

# Criar utilizador com home encriptada (LUKS)
sudo homectl create joao --storage=luks --luks-discard=yes

# Listar utilizadores homed
homectl list

# Inspeccionar um utilizador
homectl inspect joao

# Alterar palavra-passe
sudo homectl passwd joao

# Remover utilizador
sudo homectl remove joao

O parâmetro --storage=luks cria um volume LUKS dedicado. Alternativas: --storage=fscrypt (encriptação ao nível do sistema de ficheiros) e --storage=directory (sem encriptação). --luks-discard=yes activa TRIM em SSDs.

4. Encriptação LUKS

Quando o utilizador inicia sessão (consola, SSH ou gestor de sessão gráfica compatível), o PAM desbloqueia o volume LUKS automaticamente. O utilizador não tem conhecimento da chave LUKS — ela é derivada da sua palavra-passe de início de sessão. Ao terminar sessão completo, o volume é bloqueado e os dados ficam inacessíveis.

# Login desbloqueia LUKS automaticamente
# Verificar estado do volume
homectl inspect joao

# Bloquear/desbloquear sessões
loginctl lock-sessions
loginctl unlock-sessions

O volume LUKS é armazenado em /home/$USER.home e montado em /home/$USER quando desbloqueado. Isto significa que mesmo um administrador com acesso físico à máquina não consegue ler os ficheiros do utilizador sem a palavra-passe dele.

⚠️ Estado experimental

O systemd-homed ainda é considerado experimental em muitas distribuições — não usar em produção sem testar exaustivamente. Algumas distribuições (Debian, Ubuntu) não o activam por defeito.

5. Portabilidade

Como o directório pessoal é uma imagem LUKS auto-contida, pode ser transferida entre máquinas com systemd-homed activo — útil para estações de trabalho partilhadas ou BYOD:

# Exportar metadados da conta
sudo homectl inspect joao --export=json > joao.json

# Copiar imagem LUKS para outra máquina
scp /home/joao.home servidor2:/home/joao.home

# Importar na máquina de destino
sudo homectl create joao --import=joao.json

# Verificar
homectl inspect joao

Para recuperação de dados, consulte backups e recuperação em Linux (Dia 14). Para reforço de segurança geral, veja o Linux Server Hardening Checklist 2026.

6. systemd-homed vs Home Tradicional

Funcionalidade Home Tradicional systemd-homed
Encriptação Não (manual) LUKS automático
Desbloqueio no início de sessão Não aplicável Via PAM
Bloqueio ao terminar sessão Não Sim, automático
Portabilidade Manual (rsync) Imagem auto-contida
Maturidade Estável Experimental

Para PME com estações de trabalho partilhadas, o systemd-homed oferece uma camada extra: ao fazer logout, os dados ficam encriptados. Isto complementa o firewall e protecção de rede (Dia 9) numa estratégia de reforço de segurança.

7. Erros Comuns e Lista de Verificação

Problema Causa Solução
Login falha PAM sem pam_systemd_home Adicionar módulo ao /etc/pam.d/
Volume não desbloqueia Display manager incompatível Usar GDM ou SDDM recente
SSH não desbloqueia sshd sem PAM Activar UsePAM yes
Dados perdidos na migração Import sem imagem LUKS Copiar .home com JSON

Lista de verificação antes de usar em produção:

  • Kernel 5.6+ com suporte a LUKS ou fscrypt
  • systemd 245+ instalado e actualizado
  • Serviço systemd-homed activo
  • pam_systemd_home em todos os ficheiros PAM relevantes
  • Display manager compatível (GDM 3.36+ ou SDDM recente)
  • SSHD com UsePAM yes
  • Cópia de segurança testada da imagem LUKS antes de remover contas
  • Teste completo: criar conta → login → logout → verificar bloqueio

Artigos relacionados: