doc: update notes
This commit is contained in:
152
Notes_gdm.md
152
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user