Introduction de systemd-homed pour gérer les répertoires personnels portables

Lennart Poettering представил (PDF) lors de la conférence All Systems Go 2019, un nouveau composant du gestionnaire de système systemd - hébergé sur systemd, visant à rendre les répertoires personnels des utilisateurs portables et séparés des paramètres système. L'idée principale du projet est de créer des environnements autonomes pour les données des utilisateurs qui peuvent être transférées entre différents systèmes sans se soucier de la synchronisation et de la confidentialité des identifiants.

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 profil au format JSON, stocké dans le répertoire ~/.identity. Le profil contient les paramètres nécessaires au travail de l'utilisateur, notamment des informations sur le nom, le hachage du mot de passe, les clés de cryptage, les quotas et les ressources allouées. Le profil peut être certifié avec une signature numérique stockée sur un jeton Yubikey externe.

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 Varlink.

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

Ajouter un commentaire