Introdotto systemd-homed per gestire le directory home portatili

Lennart Poettering presentata (PDF) alla conferenza All Systems Go 2019, un nuovo componente del gestore di sistema systemd - systemd-homed, mirato a rendere le directory home degli utenti portatili e separate dalle impostazioni di sistema. L'idea principale del progetto è quella di creare ambienti autosufficienti per i dati degli utenti che possano essere trasferiti tra diversi sistemi senza preoccuparsi della sincronizzazione e della riservatezza degli identificatori.

L'ambiente della directory home si presenta sotto forma di un file immagine montato, i cui dati sono crittografati. Le credenziali dell'utente sono legate alla directory home anziché alle impostazioni di sistema, anziché a /etc/passwd e /etc/shadow profilo in formato JSON, archiviato nella directory ~/.identity. Il profilo contiene i parametri necessari per il lavoro dell'utente, comprese le informazioni su nome, hash della password, chiavi di crittografia, quote e risorse allocate. Il profilo può essere certificato con una firma digitale memorizzata su un token Yubikey esterno.

I parametri possono anche includere informazioni aggiuntive come chiavi SSH, dati di autenticazione biometrica, immagine, e-mail, indirizzo, fuso orario, lingua, limiti di processo e memoria, flag di montaggio aggiuntivi (nodev, noexec, nosuid), informazioni sui server IMAP/SMTP degli utenti utilizzati , informazioni sull'attivazione del controllo genitori, opzioni di backup, ecc. Viene fornita un'API per eseguire query e analizzare i parametri Varlink.

L'assegnazione e l'elaborazione UID/GID vengono eseguite dinamicamente su ciascun sistema locale a cui è connessa la directory home. Utilizzando il sistema proposto, l'utente può mantenere con sé la propria directory home, ad esempio su un'unità Flash, e ottenere un ambiente di lavoro su qualsiasi computer senza creare esplicitamente un account su di esso (la presenza di un file con l'immagine della directory home porta alla sintesi dell'utente).

Si propone di utilizzare il sottosistema LUKS2 per la crittografia dei dati, ma systemd-homed consente anche l'utilizzo di altri backend, ad esempio per directory non crittografate, partizioni di rete Btrfs, Fscrypt e CIFS. Per gestire le directory portatili, viene proposta l'utilità homectl, che consente di creare e attivare immagini di directory home, nonché di modificarne le dimensioni e impostare una password.

A livello di sistema, il lavoro è assicurato dai seguenti componenti:

  • systemd-homed.service: gestisce la home directory e incorpora i record JSON direttamente nelle immagini della home directory;
  • pam_systemd - elabora i parametri dal profilo JSON quando l'utente accede e li applica nel contesto della sessione attivata (esegue l'autenticazione, configura le variabili di ambiente, ecc.);
  • systemd-logind.service: elabora i parametri dal profilo JSON quando l'utente accede, applica varie impostazioni di gestione delle risorse e imposta i limiti;
  • nss-systemd - Modulo NSS per glibc, sintetizza i classici record NSS basati su un profilo JSON, fornendo compatibilità con le versioni precedenti dell'API di elaborazione utente UNIX (/etc/password);
  • PID 1 - crea dinamicamente gli utenti (sintetizzati per analogia con l'utilizzo della direttiva DynamicUser in unità) e li rende visibili al resto del sistema;
  • systemd-userdbd.service: traduce gli account NSS UNIX/glibc in record JSON e fornisce un'API Varlink unificata per eseguire query ed eseguire iterazioni sui record.

I vantaggi del sistema proposto includono la capacità di gestire gli utenti durante il montaggio della directory /etc in modalità di sola lettura, l'assenza della necessità di sincronizzare gli identificatori (UID/GID) tra i sistemi, l'indipendenza dell'utente da un computer specifico, il blocco dei dati dell'utente durante la modalità di sospensione, l'uso della crittografia e dei moderni metodi di autenticazione. Si prevede che Systemd-homed sarà incluso in systemd mainstream nella versione 244 o 245.

Esempio di profilo utente JSON:

"autoLogin": vero,
"legame" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"fileSystemType": "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232,
"homeDirectory": "/home/prova",
"imagePath": "/home/test.home",
"luksCipher" : "aes",
"luksCipherMode": "xts-plain64",
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
"luksVolumeKeySize": 32,
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
"stoccaggio" : "luks",
"uid": 60233
}
},
"disposizione" : "regolare",
"enforcePasswordPolicy": falso,
"lastChangeUSec": 1565951024279735,
"membro di" : [
"ruota"
],
"privilegiato" : {
"hashedPassword" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]},
"firma" : [
{
"dati" : "LU/HeVrPZSzi3M3J...==",
"chiave": "——INIZIO CHIAVE PUBBLICA——\nMCowBQADK2VwAy…=\n——FINE CHIAVE PUBBLICA——\n"
}
],
"nomeutente": "prova",
"stato": {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec": 1566309342341723,
"rateLimitCount": 1,
"stato" : "inattivo",
"servizio": "io.systemd.Home",
"dimensione disco": 161218667776,
"diskCeiling": 191371729408,
"discoFloor": 5242780,
"signedLocally": vero
}
}

Fonte: opennet.ru

Aggiungi un commento