Motivation ========== Depuis Hirsute, lorsque le dongle PKI est présent avant l'ouverture de session, GDM ne propose plus directement la liste des utilisateurs humains présents sur la machine, mais demande la saisie d'un identifiant, et ensuite un PIN au lieu du mot de passe, puis il échoue dans l'ouverture de session. C'est particulièrement pénible quand on démarre la machine en utilisant le dongle PKI pour déverrouiller le volume LUKS, il faut ensuite l'enlever au bon moment avant le démarrage de GDM. Il faudrait soit empêcher la détection du dongle par GMD et forcer le login à l'ancienne avec le mot de passe, soit configurer proprement PKCS#11 dans GDM pour permettre un login avec la PKI. Le module `pam_krb5` utilisé dans le paquet `orange-yourdev-kerberos` fait le job, il permet l'authentification sur le serveur Kerberos et l'obtention d'un TGT, mais il présente plusieurs inconvénients: - pas de limitation de la durée de connexion au serveur Kerberos, donc des ralentissements pénibles a l'ouverture de session ou lors d'un `sudo` lorsque la machine n'est pas connectée au réseau interne. - pas de mécanisme "delayed kinit", donc si le TGT n'a pas été obtenu immédiatement lors de l'ouverture de session, il faut ensuite faire un `kinit` manuel dans un terminal ou bien utiliser l'applet `krb5-auth-dialog`, c'est particulièrement pénible depuis l'arrivée du 802.1x sur les connexion ethernet ou lorsqu'on utilise le wifi interne. - pérennité du paquet `libpam-krb5` dans les distributions ? Il serait intéressant de passer à SSSD, qui permet de définir un timeout de connexion, sait gérer un cache local d'authentification et la reconnexion au serveur Kerberos. Et puis si un jour on veut joindre le domaine AD, on aura déja l'infrastructure en place sur le poste client. Les règles de sécurité imposent l'affichage d'une bannière "légale" sur l'écran de connexion avant l'ouverture de la session. Premières impressions ===================== Il existe un paramétrage dconf pour activer/desactiver le login par smartcard dans GDM, ce qui permet de résourdre le problème sur Hirsute quand le dongle PKI est inséré, tant que la configuration PKCS#11 n'est pas en place. Voir les liens: - [GNOME Configuration - Simple Greeter Configuration] - [GNOME - Add a greeter logo to the login screen] - [GNOME - Display a text banner on the login screen] - [GNOME - Disallow login using a fingerprint] La documentation ne mentionne pas explicitement la gestion des smartcard, mais on peut s'inspirer du paramétrage "fingerprint" avec la clé "enable-smartcard-authentication". Le module historique `pam_pkcs11` sait gérer l'authentification par dongle PKI une fois configuré, mais `pam_sss` sait le faire aussi, de manière indépendante, ce qui explique les alternatives "sssd-exclusive" et "pkcs11-exclusive" pour gdm-smartcard. Avec `pam_pkcs11`, il faut configurer le mapping entre le certificat et le compte utilisateur local, il existe plusieurs méthodes (cn, fingerprint, uid) qui sont faciles à mettre en oeuvre. Ces méthodes fonctionnent toutes en mode debug, mais dans GDM la recherche du compte échoue systématiquement et il est nécessaire de saisir explicitement l'identifiant de l'utilisateur. Ca ne devrait pas être nécessaire, est-ce un bug dans GDM ou un problème de configuration ? Voir les liens: - [PAM-PKCS#11 Login Tools] - [PAM-PKCS11 User Manual] - [PAM-PKCS11 Mappers API] Avec `pam_sss`, la configuration Kerberos n'est pas difficile, elle peut réutiliser en partie la configuration `/etc/krb5.conf`. Pour obtenir les informations relatives au compte, il n'est pas nécessaire d'utiliser LDAP, ça fonctionne très bien avec un compte local. Bref c'est presque pareil qu'avec `pam_krb5`, avec en plus un timeout de connexion au serveur (et d'autres avantages). Pour la configuration PKCS#11 dans SSSD, c'est plus difficile, il faut d'abord définir le module (.so) à utiliser et la documentation n'est pas claire, et ensuite définir le mapping certificat/utilisateur avec une syntaxe qui relève de la cryptographie, cf `sss-certmap(5)`. Voir les liens: - [SSSD - Introduction] - [SSSD - Migrating from pam_krb5] Pour GDM, on a plusieurs modes de fonctionnement que l'on va choisir avec `update-alternatives --config gdm-smartcard`. Les trois possibilités sont: - gdm-smartcard-sssd-exclusive (le défaut) - gdm-smartcard-pkcs11-exclusive - gdm-smartcard-sssd-or-password Seule la dernière fait l'inclusion de `/etc/pam.d/common-auth`, fichier qui est généré par `pam-auth-update`. Donc dans les deux premiers mode, le paramétrage standard de PAM est ignoré pour le login graphique, il ne sera utilise que pour le login console ou SSH. (il va être nécessaire de bien décortiquer et comprendre ces alternatives `gdm-smartcard-*`, et plus généralement se documenter sur le fonctionnement de PAM...) Il devrait être possible d'obtenir un TGT Kerberos à partir du dongle PKI dans SSSD, mais cela n'a pas l'air évident au premier abord. Le plan ======= Créer un nouveau paquet `orange-yourdev-login` qui reprend les fonctionnalités de `orange-yourdev-kerberos` et le remplace, parce que c'est plus sûr que modifier le paquet existant, ça risque de casser le login, et ça serait une catastrophe pour les utilisateurs. On introduit les fonctionnalités pas à pas: - désactivation du smartcard dans GDM - configuration PKCS#11 avec `pam_pkcs11`, utilisation optionnelle - ajout de SSSD en remplacement de `pam_krb5`, mot de passe seulement - configuration PKCS#11 avec `pam_sss` - suppression de `pam_krb5` et `pam_pkcs11` Voir [Notes_pkcs11.md](Notes_pkcs11.md) pour la configuration `pam_pkcs11`. [GNOME Configuration - Simple Greeter Configuration]: https://help.gnome.org/admin/gdm/stable/configuration.html.en#greeterconfiguration [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 [SSSD - Introduction]: https://sssd.io/docs/introduction.html [SSSD - Migrating from pam_krb5]: https://sssd.io/docs/krb/krb-migration.html [PAM-PKCS#11 Login Tools]: https://github.com/OpenSC/pam_pkcs11 [PAM-PKCS11 User Manual]: http://opensc.github.io/pam_pkcs11/doc/pam_pkcs11.html [PAM-PKCS11 Mappers API]: http://opensc.github.io/pam_pkcs11/doc/mappers_api.html