From b70f191f1f1bfab1dd6f83d7509ae865e1f338b3 Mon Sep 17 00:00:00 2001 From: Michel Decima Date: Fri, 8 Oct 2021 10:11:42 +0200 Subject: [PATCH] Initial import --- .gitignore | 17 +++++++ Notes.md | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 .gitignore create mode 100644 Notes.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2e50bbf --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Ignore all dotfiles... +.* + +# except for .gitignore and .gitlab-ci.yml +!.gitignore +!.gitlab-ci.yml + +# Ignore packaging output +*.dsc +*.tar.xz +*.deb +*.build +*.changes +*.buildinfo + +# Ignore other files +TODO diff --git a/Notes.md b/Notes.md new file mode 100644 index 0000000..26e4c0f --- /dev/null +++ b/Notes.md @@ -0,0 +1,136 @@ +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` + + +[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