GDM et PAM ---------- GDM utilise PAM pour l'authentification. Il s'appuie sur une configuration dédiée dans `/etc/pam.d`, cf les fichiers de profil `gdm-password`, `gdm-smartcard` et `gdm-fingerprint`. Le reste du système (login console, SSH) utilise aussi PAM, via une autre configuration nommée `/etc/pam.d/common-auth`. Le contenu de ce fichier est généré automatiquement par `pam-auth-update` pour tous les modules PAM qui livrent une définition dans `/usr/share/pam-configs`. Sur Hirstute, dans la configuration par défaut, GDM choisit automatiquement le profil qu'il va utiliser : si un token PKCS#11 qui possède le drapeau "amovible" est présent (typiquement le dongle Aladdin), alors il utilisera le profil `gdm-smartcard`, sinon il utilisera le profil `gdm-password`. Il est possible de changer cette sélection avec une propriété `dconf`, comme ceci: ``` [org/gnome/login-screen] enable-smartcard-authentication=false ``` et alors GDM utilise le profil `gdm-password`, même si un dongle PKI est connecté à la machine lors de la connexion. Le profil `gdm-password` est grosso-modo une façade pour `common-auth` (il fait l'inclusion de ce fichier), donc tous les modules PAM qui y sont déclarés sont utilisables (unix, ccreds, krb5, sss, etc.) Le profil `gdm-smartcard` est un lien symbolique, géré par `update-alternatives`, qui peut pointer vers l'un des trois profils qui gèrent effectivement les tokens PKCS#11: - `gdm-smartcard-pkcs11-exclusive` qui utilise le module `pam_pkcs11` - `gdm-smartcard-sssd-exclusive` qui utilise le module `pam_sss` avec l'option `require_cert_auth` - `gdm-smartcard-sssd-or-password` qui utilise le module `pam_sss` avec l'option `try_cert_auth` et passe la main au profil `common-auth` en solution de secours si le premier module a échoué. Ces trois profils nécessitent une configuration dédiée pour PKCS#11 dans le module PAM correspondant, si pas configuré, ça ne marche pas : GDM va demander l'identifiant de l'utilisateur (username), puis le PIN, et ensuite l'authentification échoue, retour au point de départ, en boucle. La valeur par défaut sur Ubuntu est `gdm-smartcard-sssd-exclusive`. Selection d'un profil gdm-smartcard ----------------------------------- En mode interactif: ``` $ sudo update-alternatives --config gdm-smartcard There are 3 choices for the alternative gdm-smartcard (providing /etc/pam.d/gdm-smartcard). Selection Path Priority Status 0 /etc/pam.d/gdm-smartcard-sssd-exclusive 50 auto mode [*] 1 /etc/pam.d/gdm-smartcard-pkcs11-exclusive 30 manual mode 2 /etc/pam.d/gdm-smartcard-sssd-exclusive 50 manual mode 3 /etc/pam.d/gdm-smartcard-sssd-or-password 40 manual mode Press to keep the current choice[*], or type selection number: 3 ``` En mode inattendu: ``` $ sudo update-alternatives --set gdm-smartcard /etc/pam.d/gdm-smartcard-sssd-or-password ``` Il n'est pas nécessaire de redémarrer le service `gdm3` après modification. Saisie de l'identifiant utilisateur en mode smartcard ----------------------------------------------------- En mode par défaut (gdm-password), l'écran d'accueil GDM présente la liste des utilisateurs humains (>=1000) déclarés sur la machine, ou bien un unique utilisateur pré-sélectionné s'il n'existe qu'un seul utilisateur humain sur la machine. Il est possible de désactiver l'affichage de cette liste avec une propriété `dconf`, cf [GNOME - Disable the user list], et alors l'écran d'accueil demande la saisie de l'identifiant de l'utilisateur. En mode PKI (gdm-smartcard), l'écran d'accueil GDM propose directement la saisie de l'identifiant de l'utilisateur, il ne propose pas la liste des utilisateurs existants, et la propriété `disable-user-list` n'est pas prise en compte. Les modules PAM qui exploitent PKCS#11 savent extraire l'identifiant de l'utilisateur à partir des données présente dans un certificat d'authentification, une fois le mapper configuré. Cette information est utilisée principalement pour déterminer où est le compte de l'utilisateur sur le disque, elle n'est pas forcément utilisée pour identifier l'utilisateur lui-même. Pour `pam_pkcs11`, il est possible de configurer le module pour qu'il identifie directement l'utilisateur depuis le certificat, sans aucune saisie clavier, cf le "alternate way of working" décrit dans le README. (voir [Notes_pkcs11.md](Notes_pkcs11.md) pour plus de détails). Néanmoins, GDM est incapable d'exploiter cette information de cette manière, il ne sait pas sélectionner l'utilisateur à partir d'un certificat, il affiche systématiquement le champ de saisie de l'identifiant en mode smartcard. Configuration dconf ------------------- Pour désactiver le login avec smartcard, je me suis inspiré de la documentation [GNOME - Disallow login using a fingerprint] propose de créer un profil `user` pour `dconf`, hélas, ça ne fonctionne pas ! En revanche, avec un profil `gdm` comme dans [GNOME - Add a greeter logo to the login screen], c'est bon, on observe le comportement attendu, lorsque le dongle PKI est présent dans le port USB, c'est bien un login/password qui est demandé par GDM. Documentation pas à jour ? Important: après avoir modifié une valeur dans `/etc/dconf/db/gdm.d/*`, il faut faire prendre en compte cette modification par `dconf`, puis redémarrer le service `gdm3`: ``` $ sudo dconf update $ sudo restart gdm3.service ``` Les modes de fonctionnement choisis ----------------------------------- Pour l'instant, deux modes de fonctionnement: 1. `gdm-password` + `pam_sss` + `common-auth` 2. `gdm-smartcard` + `pam_pkcs11` Dans le premier mode, le smartcard est explicitement désactivé dans `dconf`, GDM ne reconnait pas le token PKCS#11 à la connexion, il ne demande pas le username, c'est la connexion classique à laquelle l'utilisateur est habitué, pas de régression. Le module `pam_sss` est configuré pour authentifier via Kerberos, et le `common-auth` permet les solutions de secours (`pam_unix` et `pam_ccreds`). Dans le deuxième mode, le token PKCS#11 est utilisé à la connexion si présent, sinon authentification classique avec mot de passe local (`pam_unix`). Dans un cas comme dans l'autre, pas d'authentification Kerberos, donc pas de TGT à la connexion. A l'étude, un troisième mode de fonctionnement avec PKCS#11 dans SSSD. Références ---------- - [GNOME - Add a greeter logo to the login screen] - [GNOME - Display a text banner on the login screen] - [GNOME - Disallow login using a fingerprint] - [GNOME - Disable the user list] [GNOME - Add a greeter logo to the login screen]: https://help.gnome.org/admin/system-admin-guide/stable/login-logo.html.en [GNOME - Display a text banner on the login screen]: https://help.gnome.org/admin/system-admin-guide/stable/login-banner.html.en [GNOME - Disallow login using a fingerprint]: https://help.gnome.org/admin/system-admin-guide/stable/login-fingerprint.html.en [GNOME - Disable the user list]: https://help.gnome.org/admin/system-admin-guide/stable/login-userlist-disable.html.en