Introduzido o systemd-homed para gerenciar diretórios iniciais portáteis

Lennart Poettering introduzido (PDF) na conferência All Systems Go 2019, um novo componente do gerenciador de sistema systemd - baseado no systemd, com o objetivo de tornar os diretórios pessoais dos usuários portáteis e separados das configurações do sistema. A ideia principal do projeto é criar ambientes autossuficientes para dados de usuários que possam ser transferidos entre diferentes sistemas sem se preocupar com sincronização e confidencialidade de identificadores.

O ambiente do diretório inicial vem na forma de um arquivo de imagem montado, cujos dados são criptografados. As credenciais do usuário estão vinculadas ao diretório inicial e não às configurações do sistema - em vez de /etc/passwd e /etc/shadow perfil no formato JSON, armazenado no diretório ~/.identity. O perfil contém os parâmetros necessários para o trabalho do usuário, incluindo informações sobre nome, hash de senha, chaves de criptografia, cotas e recursos alocados. O perfil pode ser certificado com uma assinatura digital armazenada em um token Yubikey externo.

Os parâmetros também podem incluir informações adicionais, como chaves SSH, dados de autenticação biométrica, imagem, e-mail, endereço, fuso horário, idioma, limites de processo e memória, sinalizadores de montagem adicionais (nodev, noexec, nosuid), informações sobre servidores IMAP/SMTP de usuário usados. , informações sobre como ativar o controle dos pais, opções de backup, etc. Uma API é fornecida para solicitar e analisar parâmetros VarLink.

A atribuição e o processamento de UID/GID são feitos dinamicamente em cada sistema local ao qual o diretório inicial está conectado. Usando o sistema proposto, o usuário pode manter seu diretório inicial com ele, por exemplo, em uma unidade Flash, e obter um ambiente de trabalho em qualquer computador sem criar explicitamente uma conta nele (a presença de um arquivo com a imagem do diretório inicial leva à síntese do usuário).

Propõe-se usar o subsistema LUKS2 para criptografia de dados, mas o systemd-homed também permite o uso de outros backends, por exemplo, para diretórios não criptografados, partições de rede Btrfs, Fscrypt e CIFS. Para gerenciar diretórios portáteis, é proposto o utilitário homectl, que permite criar e ativar imagens de diretórios pessoais, bem como alterar seu tamanho e definir uma senha.

Ao nível do sistema, o trabalho é assegurado pelos seguintes componentes:

  • systemd-homed.service - gerencia o diretório inicial e incorpora registros JSON diretamente nas imagens do diretório inicial;
  • pam_systemd - processa parâmetros do perfil JSON quando o usuário efetua login e os aplica no contexto da sessão ativada (realiza autenticação, configura variáveis ​​de ambiente, etc.);
  • systemd-logind.service - processa parâmetros do perfil JSON quando o usuário faz login, aplica várias configurações de gerenciamento de recursos e define limites;
  • nss-systemd - módulo NSS para glibc, sintetiza registros NSS clássicos baseados em um perfil JSON, fornecendo compatibilidade retroativa com a API UNIX para processamento do usuário (/etc/password);
  • PID 1 - cria usuários dinamicamente (sintetizados por analogia com o uso da diretiva DynamicUser em unidades) e os torna visíveis para o restante do sistema;
  • systemd-userdbd.service - traduz contas NSS UNIX/glibc em registros JSON e fornece uma API Varlink unificada para consultar e iterar registros.

As vantagens do sistema proposto incluem a capacidade de gerenciar usuários ao montar o diretório /etc em modo somente leitura, a ausência da necessidade de sincronizar identificadores (UID/GID) entre sistemas, independência do usuário de um computador específico, bloqueio de dados do usuário durante o modo de suspensão, o uso de criptografia e métodos modernos de autenticação. Systemd-homed está planejado para ser incluído no systemd mainstream na versão 244 ou 245.

Exemplo de perfil de usuário JSON:

"autoLogin": verdadeiro,
"vinculativo" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"fileSystemType": "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232,
"homeDirectory" : "/home/teste",
"imagePath": "/home/test.home",
"luksCipher" : "aes",
"luksCipherMode": "xts-plain64",
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
"luksVolumeKeySize": 32,
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
"armazenamento": "luks",
"uid": 60233
}
},
"disposição": "normal",
"enforcePasswordPolicy": falso,
"lastChangeUSec": 1565951024279735,
"membro de" : [
"roda"
],
"privilegiado": {
"hashedPassword": [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
"assinatura": [
{
"dados": "LU/HeVrPZSzi3M3J...==",
"key" : "——INICIAR CHAVE PÚBLICA——\nMCowBQADK2VwAy…=\n——TERMINAR CHAVE PÚBLICA——\n"
}
],
"nomedeusuário": "teste",
"status" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec": 1566309342341723,
"rateLimitCount": 1,
"estado": "inativo",
"serviço": "io.systemd.Home",
"tamanho do disco": 161218667776,
"disco Teto": 191371729408,
"discoFloor": 5242780,
"signedLocally": verdadeiro
}
}

Fonte: opennet.ru

Adicionar um comentário