Lennart Poettering
L'environnement du répertoire personnel se présente sous la forme d'un fichier image monté, dont les données sont cryptées. Les informations d'identification de l'utilisateur sont liées au répertoire personnel plutôt qu'aux paramètres système - au lieu de /etc/passwd et /etc/shadow
Les paramètres peuvent également inclure des informations supplémentaires telles que des clés SSH, des données d'authentification biométriques, une image, une adresse électronique, une adresse, un fuseau horaire, une langue, des limites de processus et de mémoire, des indicateurs de montage supplémentaires (nodev, noexec, nosuid), des informations sur les serveurs IMAP/SMTP des utilisateurs utilisés. , des informations sur l'activation du contrôle parental, les options de sauvegarde, etc. Une API est fournie pour demander et analyser les paramètres
L'attribution et le traitement des UID/GID sont effectués dynamiquement sur 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 bénéficier d'un environnement de travail sur n'importe quel ordinateur sans créer explicitement de compte sur celui-ci (présence d'un fichier avec l'image du répertoire personnel conduit à une synthèse de l'utilisateur).
Il est proposé d'utiliser le sous-système LUKS2 pour le cryptage des données, mais systemd-homed permet également l'utilisation d'autres backends, par exemple pour les répertoires non cryptés, les partitions réseau Btrfs, Fscrypt et CIFS. Pour gérer les répertoires portables, l'utilitaire homectl est proposé, qui permet 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, le travail est assuré par les composants suivants :
- systemd-homed.service - gère le répertoire personnel et intègre les enregistrements JSON directement dans les images du répertoire personnel ;
- pam_systemd - traite les paramètres du profil JSON lorsque l'utilisateur se connecte 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 lorsque l'utilisateur se connecte, applique divers paramètres de gestion des ressources et définit des limites ;
- nss-systemd - module NSS pour glibc, synthétise les enregistrements NSS classiques basés sur un profil JSON, offrant une compatibilité descendante avec l'API de traitement utilisateur UNIX (/etc/password) ;
- PID 1 - crée dynamiquement des utilisateurs (synthétisés par analogie avec l'utilisation de la directive DynamicUser en unités) et les rend visibles au 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 itérer sur les enregistrements.
Les avantages du système proposé incluent 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 les systèmes, l'indépendance de l'utilisateur par rapport à un ordinateur spécifique, le blocage des données utilisateur. en mode veille, l'utilisation de méthodes de cryptage et d'authentification modernes. Systemd-homed devrait être inclus dans systemd mainstream dans la version 244 ou 245.
Exemple de profil utilisateur JSON :
"Connexion automatique" : vrai,
"obligatoire" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"Type de système de fichiers" : "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232,
"homeRépertoire" : "/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»,
"stockage" : "merci",
"uid" : 60233
}
},
"disposition" : "régulière",
"enforcePasswordPolicy" : faux,
"lastChangeUSec" : 1565951024279735,
"membre de" : [
"roue"
],
"privilégié" : {
"mot de passe haché" : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
"signature" : [
{
"données" : "LU/HeVrPZSzi3M3J...==",
"key" : "——DEBUT CLÉ PUBLIQUE——\nMCowBQADK2VwAy…=\n——FIN CLÉ PUBLIQUE——\n"
}
],
"Nomutilisateur" : "test",
"statut" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec" : 1566309343044322,
"rateLimitBeginUSec" : 1566309342341723,
"rateLimitCount" : 1,
"state" : "inactif",
"service" : "io.systemd.Home",
"Taille du disque" : 161218667776,
"diskCeiling": 191371729408,
"disqueFloor": 5242780,
"signedLocally" : vrai
}
}
Source: opennet.ru