doc: how not to change AD password

This commit is contained in:
Michel Decima
2021-11-01 18:50:18 +01:00
parent f86e743798
commit 0ccbd557cc

View File

@@ -127,15 +127,15 @@ résiste pas à une mise à jour du paquet `libpam-sss`, il faudrait mettre
en place un `trigger` ou mieux encore un `divert` ... ça reste du bricolage.
Autre solution, plus propre:
- ajouter un fichier `/usr/share/pam-configs/sss-first`, copie de `sss`
- ajouter un fichier `/usr/share/pam-configs/yourdev`, copie de `sss`
- modifier sa propriété `Name` et augmenter la valeur de `Priority`
- rajouter une propriété `Conflicts: sss`
- dans le `postinst`, activer `sss-first` et désactiver `sss`
- dans le `postinst`, activer `yourdev` et désactiver `sss`
Important: ne pas utiliser --force dans les scripts, seulement --package
Important: bien verifier uid >= 1000 et users interdits.
Note: les deux profils `sss` et `sss-first` sont en conflit, mais leur
Note: les deux profils `sss` et `yourdev` sont en conflit, mais leur
propriété `Default` vaut `yes`, ce qui a une conséquence particulière
: quand on lance `pam-auth-update` une première fois en mode interactif,
sans avoir exécuté la configuration automatique via le `postinst`, alors
@@ -144,36 +144,98 @@ valide à ce moment, le dialogue se plaint qu'il y a conflit, et refuse de
valider la sélection. Il faut modifier et choisir l'un ou l'autre. Ensuite,
le dialogue se souvient du choix qui a été fait.
Changement de mot de passe
--------------------------
Avec le module `pam_sss` en premier, on a le comportement attendu, c'est
SSSD qui fait l'authentification et fournit un TGT Kerberos à l'ouverture
de session. Mais c'est aussi SSSD qui gère le changement de mot de passe,
avec des conséquences imprévues:
- c'est le mot de passe réseau qui est changé via la commande `passwd`,
pas le mot de passe local, et celui-ci est pénible à modifier, voir
plus bas.
- sur le réseau, le mot de passe AD est changé, mais pas le mot de passe
du Gassi, les deux bases ne sont pas synchronisées, changer l'une ne
modifie pas l'autre, le nouveau mot de passe sera requis pour Kerberos,
IMAP, SMTP, SMB, etc. mais ne fonctionnera pas pour tous les sites en
SSO derrière le Gassi qui utilise toujours l'ancien ...
Commandes pour modifier le mot de passe local alors que SSSD est utilisé:
```
$ sudo pam-auth-update --remove yourdev
$ passwd
$ sudo pam-auth-update --enable yourdev
```
Tout ceci est très pénible... une méthode simple de résoudre le problème
serait d'empêcher la modification du mot de passe réseau depuis l'hôte,
puisque de toute façon cela ne fonctionne pas complètement (cf la
synchronisation AD/Gassi).
Pour désactiver la fonctionnalité "changement de mot de passe" pour le
module `pam_sss` depuis `pam-configs`, il suffit d'éditer la configuration,
puis supprimer toute la section concernée (propriétés `Password-Type`,
`Password` et `Password-Initial`), et relancer la commande `pam-auth-update`.
La section à supprimer dans `/usr/share/pam-configs/yourdev`:
```
Password-Type: Primary
Password:
sufficient pam_sss.so use_authtok
Password-Initial:
sufficient pam_sss.so
```
Après génération, on constate qu'il n'y a plus aucune mention du module
`pam_sss` dans le profil `/etc/pam.d/common-passwd`.
A partir de là, pour changer le mot de passe local, il suffit d'utiliser
la commande classique `passwd` comme ceci:
```
$ passwd
Changement du mot de passe pour pipo1234.
Mot de passe actuel :
Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd : le mot de passe a été mis à jour avec succès
```
Le "mot de passe actuel" est bien entendu le mot de passe _local_ courant,
puisque la commande ne pourra invoquer que le module `pam_unix`.
Il est toujours possible de changer le mot de passe réseau avec la
commande `kpasswd` du paquet `krb5-user` qui discute en direct avec le
serveur Kerberos, sans passer par la configuration PAM ou le démon SSSD,
mais cela n'est pas conseillé.
Pour plus de "sécurité", afin d'éviter les fausses manoeuvres et
une desynchronisation accidentelle des mots de passes AD et Gassi, on
peut désactiver le changement de mot de passe par SSSD en rajoutant la
propriété `chpass_provider = none` pour chaque domaine dans `sssd.conf`.
Une fois ce réglage en place, les tentatives de modification du mot
de passe réseau par SSSD vont échouer systématiquement avec une
"erreur système" lors de l'authentification préalable.
On conseille de synchroniser le mot de passe local avec le mot de passe
réseau, pour éviter les surprises lorsque le serveur d'authentification
n'est pas joignable.
Pour changer le mot de passe, la procédure se décompose en deux étapes:
1. changer le mot de passe réseau sur [Mot de passe attitude]
2. changer le mot de passe local avec `passwd`
Reste à faire
-------------
Avec le module `pam_sss` en premier, on a le comportement attendu,
le problème de l'obtention du TGT Kerberos à l'ouverture de session
est résolu.
Néanmoins, il doit bien y avoir une raison explicite pour que `pam_sss`
Il doit bien y avoir une raison explicite pour que `pam_sss`
ne soit pas prioritaire dans la configuration par défaut Debian/Ubuntu,
la "réponse possible" ci-dessus n'est qu'une supposition de ma part, tant
que je n'aurais pas trouvé l'explication dans une documenation officielle
il restera un doute sur la méthode ci-dessus.
Question subsidiaire a résoudre: comment changer le mot de passe local ?
Précédemment, avec `pam_krb5`, la méthode consistait à d'abord désactiver
Kerberos via `pam-auth-update`, changer le mot de passe avec `passwd`, puis
rétablir Kerberos. On peut faire la même chose maintenant, mais c'est plus
délicat, on a deux entrées dans le menu curses : "SSSD (first)" et "SSSD",
c'est la première qu'il faut rétablir, pas la deuxième...
A creuser:
- un script pour automatiser les différentes étapes du changement de
mot de passe local
- désactiver le changement de mot de passe AD dans la configuration PAM,
via la définition de `sss-first`, puisque de toute façon ce n'est pas
une bonne méthode (desynchro AD/Gassi), il faut passer par le site
"Mot de passe attitude".
Pour éviter les confusions, il faudrait renommer la définition `sss-first`
en `yourdev`, ça serait plus explicite.
Références
----------
@@ -185,6 +247,6 @@ Références
[PAMConfigFrameworkSpec]: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
[pam.conf(5)]: https://manpages.debian.org/bullseye/libpam-runtime/pam.conf.5.en.html
[pam-auth-update(8)]: https://manpages.debian.org/bullseye/libpam-runtime/pam-auth-update.8.en.html
[Mot de passe attitude]: https://mpa.itn.ftgroup/QPM/User/