Lennart Poettering () alla conferenza All Systems Go 2019, un nuovo componente del gestore di sistema systemd — , progettato per garantire la portabilità delle directory home degli utenti e la loro separazione dalle impostazioni di sistema. L'idea principale del progetto è creare ambienti autosufficienti per i dati dell'utente, che possono essere trasferiti tra diversi sistemi senza preoccuparsi della sincronizzazione degli identificatori e della privacy.
L'ambiente della directory home viene fornito sotto forma di file immagine montabile, i dati in cui sono crittografati. Le credenziali dell'utente sono legate alla directory home e non alle impostazioni di sistema — invece di /etc/passwd e /etc/shadow, si usa in formato JSON, memorizzato nella directory ~/ .identity. Nel profilo sono indicati i parametri necessari per il funzionamento dell'utente, compresi i dati su nome, hash della password, chiavi per la crittografia, quote e risorse fornite. Il profilo può essere firmato digitalmente e memorizzato su un token esterno Yubikey.
I parametri possono anche includere ulteriori informazioni, come chiavi per SSH, dati per l'autenticazione biometrica, immagine, email, indirizzo, fuso orario, lingua, limiti sul numero di processi e memoria, ulteriori flag di montaggio (nodev, noexec, nosuid), dati sui server IMAP/SMTP utilizzati dall'utente, informazioni sull'attivazione del controllo genitori, parametri di backup, ecc. Per richiedere e analizzare i parametri è disponibile un'API .
L'assegnazione e la gestione di UID/GID vengono effettuate dinamicamente in ogni sistema locale a cui è connessa la directory home. Grazie al sistema proposto, l'utente può mantenere la propria directory home con sé, ad esempio su una chiavetta USB, e ottenere un ambiente di lavoro su qualsiasi computer senza dover creare esplicitamente un account (la presenza di un file con l'immagine della directory home porta alla sintesi dell'utente).
Per la crittografia dei dati, si propone di utilizzare il sottosistema LUKS2, ma systemd-homed consente anche di utilizzare altri backend, ad esempio per directory non crittografate, Btrfs, Fscrypt e partizioni di rete CIFS. Per gestire le directory portatili, è disponibile l'utilità homectl, che consente di creare e attivare immagini delle directory home, oltre a modificarne le dimensioni e impostare la password.
A livello di sistema, il funzionamento è garantito dai seguenti componenti:
- systemd-homed.service — gestisce la directory home e integra registrazioni JSON direttamente nelle immagini della directory home;
- pam_systemd — gestisce i parametri dal profilo JSON durante il login dell'utente e li applica nel contesto della sessione attivata (esegue l'autenticazione, configura le variabili d'ambiente, ecc.);
- systemd-logind.service — gestisce i parametri dal profilo JSON durante il login dell'utente, applica varie impostazioni di gestione delle risorse e imposta limiti;
- nss-systemd — modulo NSS per glibc, sintetizza record NSS classici sulla base del profilo JSON, fornendo retrocompatibilità con l'API UNIX per la gestione degli utenti (/etc/password);
- PID 1 — crea dinamicamente utenti (sintetizza analogamente all'applicazione della direttiva DynamicUser nelle unità) e li rende visibili per il resto del sistema;
- systemd-userdbd.service — trasforma le registrazioni UNIX/glibc NSS in registrazioni JSON e fornisce un'API uniforme Varlink per interrogare e sfogliare le registrazioni.
Tra i vantaggi del sistema proposto si evidenziano la possibilità di gestire gli utenti durante il montaggio della directory /etc in modalità sola lettura, l'assenza della necessità di sincronizzazione degli identificatori (UID/GID) tra sistemi, l'indipendenza dell'utente da un computer specifico, il bloccaggio dei dati utente durante il passaggio in modalità sospensione, l'applicazione della crittografia e dei moderni metodi di autenticazione. Si prevede di includere systemd-homed nella versione principale di systemd nella release 244 o 245.
Esempio di profilo JSON dell'utente:
"autoLogin" : true,
"binding" : {
"15e19cd24e004b949ddaac60c74aa165" : {
"fileSystemType" : "ext4",
"fileSystemUUID" : "758e88c8-5851-4a2a-b98f-e7474279c111",
"gid" : 60232,
"homeDirectory" : "/home/test",
"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" : false,
«lastChangeUSec» : 1565951024279735,
«memberOf» : [
«wheel»
],
«privileged» : {
«hashedPassword» : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]
},
«signature» : [
{
«data» : «LU/HeVrPZSzi3M3J…==»,
«key» : «——BEGIN PUBLIC KEY—— MCowBQADK2VwAy…= ——END PUBLIC KEY—— »
}
],
«userName» : «test»,
«status» : {
«15e19cf24e004b949dfaac60c74aa165» : {
«goodAuthenticationCounter» : 16,
«lastGoodAuthenticationUSec» : 1566309343044322,
«rateLimitBeginUSec» : 1566309342341723,
«rateLimitCount» : 1,
«state» : «inactive»,
«service» : «io.systemd.Home»,
«diskSize» : 161218667776,
«diskCeiling» : 191371729408,
«diskFloor» : 5242780,
«signedLocally» : true
}
}
Fonte: opennet.ru
