doc: how not to change AD password
This commit is contained in:
114
Notes_pam.md
114
Notes_pam.md
@@ -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/
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user