Lennart Poettering () lors de la conférence All Systems Go 2019, un nouveau composant du gestionnaire de système systemd — , visant à assurer la portabilité des répertoires personnels des utilisateurs et leur séparation des paramètres système. L'idée principale du projet est de créer des environnements autonomes pour les données de l'utilisateur, pouvant être transférés entre différents systèmes sans se soucier de la synchronisation des identifiants et de la confidentialité.
L'environnement du répertoire personnel est livré sous la forme d'une image de disque montée, les données étant chiffrées. Les paramètres d'identification de l'utilisateur sont liés au répertoire personnel, et non aux paramètres système — plutôt que /etc/passwd et /etc/shadow, on utilise au format JSON, stocké dans le répertoire ~/ .identity. Le profil contient les paramètres nécessaires au fonctionnement de l'utilisateur, y compris les informations sur le nom, le hachage du mot de passe, les clés de chiffrement, les quotas et les ressources fournies. Le profil peut être signé numériquement et conservé sur un jeton externe Yubikey.
Les paramètres peuvent également inclure des informations supplémentaires telles que des clés pour SSH, des données pour l'authentification biométrique, une image, un email, une adresse, un fuseau horaire, une langue, des limites sur le nombre de processus et de mémoire, des flags de montage supplémentaires (nodev, noexec, nosuid), des informations sur les serveurs IMAP/SMTP utilisés par l'utilisateur, des informations sur l'activation du contrôle parental, des paramètres de sauvegarde, etc. Un API .
La désignation et le traitement des UID/GID sont effectués dynamiquement dans chaque système local auquel le répertoire personnel est connecté. Grâce au système proposé, l'utilisateur peut conserver son répertoire personnel avec lui, par exemple sur une clé USB, et obtenir un environnement de travail sur n'importe quel ordinateur sans avoir besoin de créer explicitement un compte (la présence d'un fichier avec l'image du répertoire personnel entraîne la synthèse de l'utilisateur).
Pour le chiffrement des données, le sous-système LUKS2 est proposé, mais systemd-homed permet également d'utiliser d'autres backends, par exemple pour des répertoires non chiffrés, Btrfs, Fscrypt et des partitions réseau CIFS. Pour gérer les répertoires portables, l'outil homectl est proposé, permettant de créer et d'activer des images de répertoires personnels, ainsi que de modifier leur taille et de définir un mot de passe.
Au niveau du système, l'opération est assurée par les composants suivants :
- systemd-homed.service – gère le répertoire personnel et intègre les enregistrements JSON directement dans les images de répertoire personnel ;
- pam_systemd – traite les paramètres du profil JSON lors de la connexion de l'utilisateur et les applique dans le contexte de la session activée (effectue l'authentification, configure les variables d'environnement, etc.) ;
- systemd-logind.service – traite les paramètres du profil JSON lors de la connexion de l'utilisateur, applique diverses configurations de gestion des ressources et définit des limites ;
- nss-systemd – module NSS pour glibc, synthétise les enregistrements NSS classiques à partir du profil JSON, fournissant une compatibilité avec l'API UNIX pour le traitement des utilisateurs (/etc/password) ;
- PID 1 – crée dynamiquement des utilisateurs (synthétise par analogie avec l'application de la directive DynamicUser dans les unités) et les rend visibles pour le reste du système ;
- systemd-userdbd.service – traduit les comptes UNIX/glibc NSS en enregistrements JSON et fournit une API Varlink unifiée pour interroger et parcourir les enregistrements.
Parmi les avantages du système proposé, on note la possibilité de gérer les utilisateurs lors du montage du répertoire /etc en mode lecture seule, l'absence de nécessité de synchroniser les identifiants (UID/GID) entre systèmes, l'indépendance de l'utilisateur vis-à-vis d'un ordinateur spécifique, le verrouillage des données de l'utilisateur lors du passage en mode veille, l'application du chiffrement et des méthodes modernes d'authentification. Systemd-homed est prévu pour être intégré dans la version principale de systemd dans la version 244 ou 245.
Exemple de profil JSON utilisateur :
"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
}
}
Source : opennet.ru
