Avec l'avènement de systemd-homed en 2020, la gestion des utilisateurs Linux changera radicalement.

Sous Linux précédent, l'ajout d'utilisateurs était fait avec ʻuseradd, le répertoire personnel était créé comme répertoire sous / homeet le compte de l'utilisateur était/ etc / passwd, / etc / group, . Il a été géré dans / etc / shadow`.

Désormais, systemd-homed remplacera tout ce travail.

Qu'est-ce que systemd-homed?

Un démon de gestion des utilisateurs ajouté dans la version 245 de systemd. L'entité est un fichier d'unité de service systemd, lancé en tant que systemd-homed.service.

~~ Il semble que la gestion des utilisateurs et l'authentification seront effectuées par systemd-homed (ci-après, hébergé) à l'avenir. ~~ Je l'ai corrigé car il n'y avait pas de source et c'était une erreur. L'utilisation de systemd-homed est un choix de l'utilisateur, il n'est donc pas nécessaire de forcer une migration. homed lui-même est automatiquement activé si la dernière version de systemd est installée. (Cependant, il est nécessaire de le configurer pour pouvoir l'utiliser. Il sera décrit plus loin.)

Ce que Homed peut faire

--Créer, supprimer, modifier des utilisateurs

Je n'expliquerai que les trois ci-dessus un par un.

Créer, supprimer, modifier des utilisateurs

Lors de la gestion des utilisateurs avec homed, vous utiliserez la commande homectl au lieu de commandes telles que ʻuseradd. ** Bien sûr, soyez assuré que vous pouvez continuer à gérer les utilisateurs en utilisant ʻuseradd et / etc / passwd sous Linux avec homed installé. ** Cependant, le compte créé d'un côté ne peut pas être géré par l'autre. (Incompatible) De plus, comme homed prend en charge NSS (systemd est ajouté à nsswitch.conf), les utilisateurs Linux peuvent être correctement reconnus même avec la commande getent et les logiciels conventionnels utilisant la glibc.

Jetons un bref coup d'œil à la nouvelle commande homectl.

--homectl create <user> Ajouter un utilisateur --homectl remove <user> Supprimer l'utilisateur --homectl update <utilisateur> Mise à jour de l'utilisateur --homectl passwd <utilisateur> Changer le mot de passe de l'utilisateur

Les options qui peuvent être spécifiées / modifiées par création et mise à jour sont les suivantes. * Il y en a beaucoup plus, mais ils sont omis parce qu'ils sont longs. Pour plus d'informations, allez dans homectl -h.

General User Record Properties:
  -c --real-name=REALNAME     Real name for user
     --realm=REALM            Realm to create user in
     --email-address=EMAIL    Email address for user
     --location=LOCATION      Set location of user on earth
     --icon-name=NAME         Icon name for user
  -d --home-dir=PATH          Home directory
     --uid=UID                Numeric UID for user
  -G --member-of=GROUP        Add user to group
     --skel=PATH              Skeleton directory to use
     --shell=PATH             Shell for account
     --setenv=VARIABLE=VALUE  Set an environment variable at log-in
     --timezone=TIMEZONE      Set a time-zone
     --language=LOCALE        Set preferred language
     --ssh-authorized-keys=KEYS
                              Specify SSH public keys
     --pkcs11-token-uri=URI   URI to PKCS#11 security token containing
                              private key and matching X.509 certificate
Account Management User Record Properties:
     --locked=BOOL            Set locked account state
     --not-before=TIMESTAMP   Do not allow logins before
     --not-after=TIMESTAMP    Do not allow logins after
     --rate-limit-interval=SECS
                              Login rate-limit interval in seconds
     --rate-limit-burst=NUMBER
                              Login rate-limit attempts per interval

Password Policy User Record Properties:
     --password-hint=HINT     Set Password hint
     --enforce-password-policy=BOOL
                              Control whether to enforce system's password
                              policy for this user
  -P                          Equivalent to --enforce-password-password=no
     --password-change-now=BOOL
                              Require the password to be changed on next login
     --password-change-min=TIME
                              Require minimum time between password changes
     --password-change-max=TIME
                              Require maximum time between password changes
     --password-change-warn=TIME
                              How much time to warn before password expiry
     --password-change-inactive=TIME
                              How much time to block password after expiry
Resource Management User Record Properties:
     --disk-size=BYTES        Size to assign the user on disk
     --access-mode=MODE       User home directory access mode
     --umask=MODE             Umask for user when logging in
     --nice=NICE              Nice level for user
     --rlimit=LIMIT=VALUE[:VALUE]
                              Set resource limits
     --tasks-max=MAX          Set maximum number of per-user tasks
     --memory-high=BYTES      Set high memory threshold in bytes
     --memory-max=BYTES       Set maximum memory limit
     --cpu-weight=WEIGHT      Set CPU weight
     --io-weight=WEIGHT       Set IO weight

Vous pouvez voir que diverses restrictions de ressources peuvent être ajoutées en plus des options qui peuvent être spécifiées avec useradd jusqu'à présent.

Un autre point important est que la date d'expiration du mot de passe peut être définie pour chaque utilisateur et que le nombre de tentatives de connexion par heure fixe peut être limité ici.

Gestion des informations utilisateur

homed gère également les informations utilisateur. Les utilisateurs créés par homectl ne sont pas répertoriés dans / etc / passwd, / etc / group, / etc / shadow.

Au lieu,

~ / .identity est, par exemple, quelque chose comme ça.

{
        "cpuWeight" : 10,
        "disposition" : "regular",
        "lastChangeUSec" : 1584387192577240,
        "lastPasswordChangeUSec" : 1584382416144118,
        "memberOf" : [
                "testgroup"
        ],
        "perMachine" : [
                {
                        "diskSize" : 10737418240,
                        "matchMachineId" : [
                                "48801054a2af8b2c0104ff82c482fe2d"
                        ]
                }
        ],
        "privileged" : {
                "hashedPassword" : [
                        "$6$h9kNT.dmjmHXt/i1$ATJy/KnBCXMlmIjBziemYqRa8XUtiVDMCnC.m/iSNNh8zdXfX5V7jJwwsZCJo3PJIv3.C0p/6OXTxN8CXCIcS1"
                ]
        },
        "signature" : [
                {
                        "data" : "hoge",
                        "key" : "-----BEGIN PUBLIC KEY-----\fuga=\n-----END PUBLIC KEY-----\n"
                }
        ],
        "userName" : "test"
}

Ce fichier peut être lu et écrit par des non-root, il est donc probable que le corps se trouve ailleurs, ou que homed signe ce fichier avec l'élément signature. Mais je ne sais pas si les deux sont mes spéculations.

userdbctl

Si vous souhaitez vérifier les informations utilisateur et les informations de groupe autres que la création / mise à jour d'utilisateurs, utilisez la commande ʻuserdbctl`.

Sous-commande


  user [USER…]                Inspect user
  group [GROUP…]              Inspect group
  users-in-group [GROUP…]     Show users that are members of specified group(s)
  groups-of-user [USER…]      Show groups the specified user(s) is a member of

Par exemple, ʻuserdbctl user <nom d'utilisateur> `peut être utilisé pour vérifier l'état de chiffrement et les restrictions de ressources du groupe de l'utilisateur, du répertoire personnel, etc.

À propos de l'authentification des utilisateurs

C'est PAM (modules d'authentification enfichables) qui gère les utilisateurs Linux. Parlons de pam.

Dans un environnement traditionnel sans homed, il existe un "module PAM qui lit / etc / passwd et / etc / shadow et renvoie le succès au logiciel si le mot de passe est correct "et l'utilise par défaut. C'était un fichier de paramètres. (Détails omis)

À l'ère de l'homed, ** ajoutez un «module PAM qui appelle l'homed pour vérifier les informations d'identification de l'utilisateur» à ce pam. ** Puisqu'il s'agit d'un ajout, la gestion des utilisateurs existante sera également appliquée.

En passant, en passant, j'ai également ajouté un module à ce PAM lors de la gestion du réseau des utilisateurs Linux tels que l'authentification LDAP et l'authentification NIS.

Activer le pam homed

** * Si vous n'effectuez pas ce réglage, vous ne pourrez pas vous connecter même si vous ajoutez un utilisateur avec homectl. ** **

Pour utiliser la fonction domiciliée, vous devez vous préparer pour le moment. Vous devez mettre à jour le fichier de configuration pam. Probablement, si vous installez le système d'exploitation avec le dernier systemd, le fichier de configuration mis à jour sera inclus par défaut, mais nous devons réécrire manuellement le fichier de configuration lors de la mise à jour au milieu. C'est de la spéculation, mais c'est probablement parce que le fichier de configuration pam est édité un peu après l'installation en fonction de l'environnement (pour l'authentification LDAP, etc.).

Si vous n'avez pas modifié les paramètres de pam, vous pouvez écraser les paramètres de pam et la mise à jour est terminée.

$ sudo cp /usr/share/factory/etc/pam.d/system-auth /etc/pam.d/system-auth

Si vous jouez avec les paramètres, regardez le diff et réglez-le à votre guise. Vous pouvez vérifier la méthode de paramétrage détaillée en exécutant man pam_systemd_home.

Chiffrement du répertoire personnel

Peut-être la plus grande caractéristique de homed est qu'il prend en charge le cryptage du répertoire personnel. Jusqu'à présent, il était nécessaire de définir chacun avec ecryptfs etc.

homed vous permet de choisir le type de répertoire de base lorsque vous créez un utilisateur. (--storage =) ** Si rien n'est spécifié, homed utilisera par défaut luks. ** **

--directory… Comme précédemment, créez un répertoire avec votre nom d'utilisateur sous / home --subvolume… Créer le sous-volume btrfs du nom d'utilisateur sous / home --Créez un répertoire personnel en utilisant le cryptage LUKS sous luks / home --fscrypt… J'ai utilisé FSCrypt sous / home (abréviation) --cifs/ home, en utilisant cifs (soi-disant Samba / partage réseau) (abréviation

Parmi ceux-ci, utilisez «luks» ou «fscrypt» pour chiffrer. Eh bien, c'est naturel car il utilise LUKS et FSCrpyt. Sauf si vous avez une raison spécifique, systemd recommande d'utiliser luks sur fscrypt.

En outre, ce cryptage luks hébergé prend en charge le décryptage automatique et le rechiffrement automatique lorsque l'utilisateur se connecte et se déconnecte. C'est pratique.

À propos de l'opération lors de l'utilisation de luks dans homed (bonus)

Lors de l'utilisation de luks avec homed, un fichier d'une taille de plusieurs dizaines de Go appelé ʻusername.home est généré sous / home / . Il s'agit apparemment du corps du répertoire personnel. Ce fichier est un fichier image de ʻext4 ou btrfs (vous pouvez choisir quel système de fichiers dans luks est), et il est chiffré avec luks (dm-verity) avec le stockage en bloc. homed semble monter ce fichier image sur / home / username tout en le déchiffrant lors de la connexion.

Utilisez la commande homectl pour déchiffrer (monter) le répertoire personnel lorsque l'utilisateur n'est pas connecté. Bien entendu, une phrase de passe de décryptage (similaire au mot de passe de connexion de l'utilisateur) est requise pour le décryptage.

--homectl activer <utilisateur> décrypter --`homectl désactiver ʻencryption

Apparemment, l'état déchiffré est appelé "actif". En passant, vous pouvez vérifier quel utilisateur est actuellement actif avec homectl list.

Ce que vous remarquez ici, c'est que vous avez besoin d'une phrase de passe de décryptage pour accéder au répertoire personnel de l'utilisateur. Même si vous disposez des privilèges root, il est très avantageux du point de vue de la sécurité et de la confidentialité de ne pas pouvoir accéder au répertoire personnel d'une autre personne à moins que l'utilisateur ne soit connecté (l'utilisateur ne l'a pas déchiffré).

À propos de la limite de taille du répertoire de base

Les utilisateurs créés avec homectl semblent être limités en taille de leur répertoire personnel par défaut. Dans le cas de luks, la taille du fichier image est limitée.

Vous pouvez utiliser la commande homectl resize pour modifier la limite de taille.

Exemple:

$ homectl resize user1 10G

Le fichier image en mode luks étant un fichier image fixe (une méthode de sécurisation de la capacité à l'avance), plusieurs dizaines de Go de fichiers image vides sont créés dès le début. C'est inefficace et je ne l'utilise pas beaucoup, donc je pense que c'est une bonne idée de le maintenir à environ 10 Go avec la commande resize.

Résumé

Introduction de systemd-homed. Vous pouvez continuer à gérer les utilisateurs en utilisant la méthode conventionnelle. Par conséquent, s'il n'y a pas de problème dans la situation actuelle, il faudra beaucoup de temps pour que le homed pénètre progressivement. Cependant, il est très pratique pour les utilisateurs de bureau Linux, donc si vous êtes intéressé, veuillez l'utiliser.

Excusez-moi pour une longue phrase et merci d'avoir lu jusqu'ici.

référence

Recommended Posts

Avec l'avènement de systemd-homed en 2020, la gestion des utilisateurs Linux changera radicalement.
[Comprendre en 3 minutes] Le début de Linux
Changer la taille de police de la légende dans df.plot
Modifier le fuseau horaire dans Oracle Database Docker
L'histoire de la création de l'environnement Linux le plus rapide au monde
Au milieu du développement, nous présenterons Alembic
[Linux] Modifier le mot de passe utilisateur
Calculez des millions de chiffres dans la racine carrée de 2 avec python
Vérifiez l'état de la mémoire du serveur avec la commande gratuite Linux
Vérifiez l'état de fonctionnement du serveur avec la commande Linux top
[Homologie] Comptez le nombre de trous dans les données avec Python
Modifier la période de conservation des journaux CloudWatch Logs dans Lambda
Obtenez le nom d'hôte du PC hôte avec Docker sous Linux
Changer le thème de Jupyter
Changer le style de matplotlib
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
Traitez le contenu du fichier dans l'ordre avec un script shell
Gestion Git des différences de Jupyter Notebook (ipynb) dans JupyterLab pour une visualisation facile
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Comment changer la couleur du seul bouton pressé avec Tkinter
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
N'hésitez pas à changer l'étiquette de légende avec Seaborn en python
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
Vérifiez la protection de la mémoire de Linux Kerne avec le code pour ARM