Lennart Poettering
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
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
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