Introduciuse systemd-homed para xestionar directorios domésticos portátiles

Lennart Poettering introducido (PDF) na conferencia All Systems Go 2019, un novo compoñente do xestor de sistema systemd - systemd-homed, destinado a facer que os directorios de inicio dos usuarios sexan portátiles e separados da configuración do sistema. A idea principal do proxecto é crear ambientes autosuficientes para os datos dos usuarios que se poidan transferir entre distintos sistemas sen preocuparse pola sincronización e confidencialidade dos identificadores.

O ambiente do directorio de inicio ten a forma dun ficheiro de imaxe montado, cuxos datos están cifrados. As credenciais do usuario están ligadas ao directorio de inicio en lugar de á configuración do sistema, en lugar de /etc/passwd e /etc/shadow perfil en formato JSON, almacenado no directorio ~/.identity. O perfil contén os parámetros necesarios para o traballo do usuario, incluíndo información sobre o nome, o hash do contrasinal, as claves de cifrado, as cotas e os recursos asignados. O perfil pódese certificar cunha sinatura dixital almacenada nun token Yubikey externo.

Os parámetros tamén poden incluír información adicional como claves SSH, datos de autenticación biométrica, imaxe, correo electrónico, enderezo, zona horaria, idioma, límites de proceso e memoria, marcas de montaxe adicionais (nodev, noexec, nosuid), información sobre os servidores IMAP/SMTP de usuarios utilizados. , información sobre a activación dos controis parentais, opcións de copia de seguridade, etc. Ofrécese unha API para solicitar e analizar parámetros Varlink.

A asignación e o procesamento de UID/GID realízase de forma dinámica en cada sistema local ao que está conectado o directorio de inicio. Usando o sistema proposto, o usuario pode manter o seu directorio de inicio con el, por exemplo nunha unidade flash, e obter un ambiente de traballo en calquera ordenador sen crear unha conta explícitamente nel (a presenza dun ficheiro coa imaxe do directorio de inicio). leva á síntese do usuario).

Proponse utilizar o subsistema LUKS2 para o cifrado de datos, pero systemd-homed tamén permite o uso doutros backends, por exemplo, para directorios sen cifrar, Btrfs, Fscrypt e particións de rede CIFS. Para xestionar directorios portátiles proponse a utilidade homectl, que permite crear e activar imaxes de directorios de inicio, así como cambiar o seu tamaño e establecer un contrasinal.

A nivel do sistema, o traballo está garantido polos seguintes compoñentes:

  • systemd-homed.service: xestiona o directorio de inicio e incorpora rexistros JSON directamente nas imaxes do directorio de inicio;
  • pam_systemd - procesa os parámetros do perfil JSON cando o usuario inicia sesión e aplícaos no contexto da sesión activada (realiza a autenticación, configura as variables de ambiente, etc.);
  • systemd-logind.service: procesa os parámetros do perfil JSON cando o usuario inicia sesión, aplica varias opcións de xestión de recursos e establece límites;
  • nss-systemd - Módulo NSS para glibc, sintetiza rexistros NSS clásicos baseados nun perfil JSON, proporcionando compatibilidade cara atrás coa API de procesamento de usuarios de UNIX (/etc/password);
  • PID 1 - crea usuarios dinámicamente (sintetizados por analoxía co uso da directiva DynamicUser en unidades) e fainos visibles para o resto do sistema;
  • systemd-userdbd.service: traduce as contas NSS UNIX/glibc en rexistros JSON e ofrece unha API Varlink unificada para consultar e iterar sobre rexistros.

As vantaxes do sistema proposto inclúen a capacidade de xestionar os usuarios ao montar o directorio /etc en modo de só lectura, a ausencia da necesidade de sincronizar identificadores (UID/GID) entre sistemas, a independencia do usuario respecto dun ordenador específico, o bloqueo dos datos do usuario. durante o modo de suspensión, o uso de cifrado e métodos de autenticación modernos. Está previsto que Systemd-homed se inclúa en systemd mainstream na versión 244 ou 245.

Exemplo de perfil de usuario JSON:

"AutoLogin": verdadeiro,
"vincular" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"fileSystemType": "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232,
"homeDirectory" : "/home/proba",
"imagePath" : "/home/test.home",
"luksCipher" : "aes",
"luksCipherMode" : "xts-plain64",
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
"luksVolumeKeySize" : 32,
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
"storage" : "luks",
"uid": 60233
}
},
"disposition" : "regular",
"enforcePasswordPolicy": falso,
"lastChangeUSec": 1565951024279735,
"membro de": [
"roda"
],
"privilexiado" : {
"hashedPassword" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]},
"sinatura": [
{
"data" : "LU/HeVrPZSzi3M3J...==",
"key" : "——COMEZAR CLAVE PÚBLICA——\nMCowBQADK2VwAy...=\n——FIN CLAVE PÚBLICA——\n"
}
],
"userName" : "proba",
"estado" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec" : 1566309342341723,
"rateLimitCount": 1,
"state" : "inactivo",
"service" : "io.systemd.Home",
"Tamaño do disco": 161218667776,
"diskCeiling": 191371729408,
"diskFloor": 5242780,
"signedLocally": verdadeiro
}
}

Fonte: opennet.ru

Engadir un comentario