doc: update notes

This commit is contained in:
Michel Decima
2021-10-12 16:38:44 +02:00
parent 3f647b7fb4
commit 19b90e3040
4 changed files with 231 additions and 17 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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/)