From 19b90e3040b621ff1b6b0e89d551a35717ba7a85 Mon Sep 17 00:00:00 2001 From: Michel Decima Date: Tue, 12 Oct 2021 16:38:44 +0200 Subject: [PATCH] doc: update notes --- Notes.md | 6 +- Notes_gdm.md | 152 ++++++++++++++++++++++++++++++++++++++++++++++++ Notes_pkcs11.md | 25 ++++++-- Notes_sssd.md | 65 ++++++++++++++++++--- 4 files changed, 231 insertions(+), 17 deletions(-) diff --git a/Notes.md b/Notes.md index 9b65b0b..9476420 100644 --- a/Notes.md +++ b/Notes.md @@ -70,7 +70,7 @@ de configuration ? Voir les liens: - - [PAM-PKCS#11 Login Tools] + - [PAM-PKCS11 Login Tools] - [PAM-PKCS11 User Manual] - [PAM-PKCS11 Mappers API] @@ -124,8 +124,8 @@ On introduit les fonctionnalités pas à pas: - configuration PKCS#11 avec `pam_sss` - suppression de `pam_krb5` et `pam_pkcs11` +Void [Notes_gdm.md](Notes_gdm.md) pour le fonctionnement de GDM avec PAM. Voir [Notes_pkcs11.md](Notes_pkcs11.md) pour la configuration `pam_pkcs11`. - Voir [Notes_sssd.md](Notes_sssd.md) pour la configuration `pam_sss`. @@ -135,6 +135,6 @@ Voir [Notes_sssd.md](Notes_sssd.md) pour la configuration `pam_sss`. [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 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 diff --git a/Notes_gdm.md b/Notes_gdm.md index cb70849..abac072 100644 --- a/Notes_gdm.md +++ b/Notes_gdm.md @@ -1,3 +1,113 @@ +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 ! @@ -7,7 +117,49 @@ 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 + diff --git a/Notes_pkcs11.md b/Notes_pkcs11.md index f40e50f..30eb0a4 100644 --- a/Notes_pkcs11.md +++ b/Notes_pkcs11.md @@ -1,5 +1,5 @@ Configuration pam-pkcs11 -======================== +------------------------ Thierry Tallagrand à la rescousse ! @@ -69,7 +69,7 @@ DEBUG:pklogin_finder.c:151: Certificate is valid and maps to user tmzf5455 Le module pam-pkcs11 est maintenant configuré, il reste à le faire prendre en compte par GDM: ``` -$ update-alternatives --config gdm-smartcard +# update-alternatives --config gdm-smartcard There are 3 choices for the alternative gdm-smartcard (providing /etc/pam.d/gdm-smartcard). Selection Path Priority Status @@ -91,7 +91,7 @@ https://yourdev.tech.orange/linux-article/login-with-pki/) avec screenshots. Saisie du compte avec GDM -========================= +------------------------- Avec la première tentative de configuration issue directement de `pam_pkcs11.conf.example`, on constate lorsque le dongle PKI est inséré @@ -146,7 +146,7 @@ sur Hirsute ... Bug dans GDM ? Fonctionnalité non prise en compte ? Activer PKCS#11 dans GDM -======================== +------------------------ Trois opérations à faire: @@ -166,7 +166,7 @@ soit: Il faudrait un script pour automatiser cela ... Limitations -=========== +----------- Le paquet `libpam-pkcs11` ne fournit pas de configuration pour `pam-auth-update` dans `/usr/share/pam-configs`, donc l'authentification PKCS#11 ne peut pas @@ -184,3 +184,18 @@ de faire cela avec SSSD. Contrairement à ce que `pkcs11-exclusive` laisse entendre, si le dongle n'est pas présent dans le port USB, on peut toujours se connecter par login/password (mais Kerberos foonctionnera-t'il si `pam_krb5.so` est présent ?) + +Références +---------- + + - [PAM-PKCS11 Login Tools] + - [PAM-PKCS11 User Manual] + - [PAM-PKCS11 Mappers API] + - [Local PAM-PKCS11 documentation] + + +[PAM-PKCS11 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 +[Local PAM-PKCS11 documentation]: file:///usr/share/doc/libpam-pkcs11 + diff --git a/Notes_sssd.md b/Notes_sssd.md index c872cbb..52863ae 100644 --- a/Notes_sssd.md +++ b/Notes_sssd.md @@ -78,18 +78,65 @@ Sachant que par défaut la socket est activée à l'installation du paquet `sssd`, le choix le plus facile c'est le n°2, on modifie la configuration dans le fichier `sssd.conf`. +Activer SSSD dans GDM (password) +-------------------------------- + +Quatre opérations à faire: + + - basculer l'alternative `gdm-smartcard` sur `gdm-smartcard-smartcard-or-password` + - desactiver l'authentification par smartcard dans `dconf` pour GDM + - démarrer le service `sssd` + - redémarrer le service `gdm3` + +soit: + +``` +# update-alternatives --set gdm-smartcard /etc/pam.d/gdm-smartcard-sssd-or-password +# sed -Ei 's/(enable-smartcard-authentication)=.*/\1=false/' /etc/dconf/db/gdm.d/03-smartcard +# dconf update +# systemctl enable sssd.service sssd-pam.socket +# systemctl start sssd.service +# systemctl restart gdm3 +``` + +Pour l'instant, on désactive gdm-smardcard dans la configuration GDM via `dconf` +parce que la gestion du PKCS#11 dans SSSD n'est pas encore configurée, et ce n'est +pas aussi facile qu'avec `pam_pkcs11` ... + +SSSD et PKCS#11 +--------------- + +Pas certain que SSSD puisse fonctionner avec SmartCard + utilisateur local, +la documentation mentionne explicitement LDAP comme sources d'identité, +donc il faudrait joindre le domaine AD, fonctionnerait seulement online +(sauf si cache). + +TODO +---- + +Les choses à voir: + + - `sss-certmap` + - `sss_cache` + - `p11-child` + +Et la configuration PKCS#11 dans SSSD ... + +Références +---------- + + - [SSSD - Introduction] + - [SSSD - Migrating from pam_krb5] + - [SSSD - Design / Require Smartcard authentication ] + - [RHEL-8 / MANAGING SMART CARD AUTHENTICATION] + - [GUI-Login with SSSD managed users fails] - -#TODO sss-certmap -#TODO sss_cache -#TODO p11-child - - -https://ask.fedoraproject.org/t/gui-login-with-sssd-managed-users-fails/6606/2 - +[SSSD - Introduction]: https://sssd.io/docs/introduction.html +[SSSD - Migrating from pam_krb5]: https://sssd.io/docs/krb/krb-migration.html [SSSD - Design / Require Smartcard authentication ]: https://docs.pagure.org/sssd.sssd/design_pages/smartcard_authentication_require.html [RHEL-8 / MANAGING SMART CARD AUTHENTICATION]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_smart_card_authentication/index - +[GUI-Login with SSSD managed users fails]: (https://ask.fedoraproject.org/t/gui-login-with-sssd-managed-users-fails/6606/2) +[smartcard cert mapping offline (AD)](https://lists.fedorahosted.org/archives/list/sssd-users@lists.fedorahosted.org/thread/STBGBEZI6D5A3MKMB26P2FNFLURML5DB/)