diff --git a/Notes_pam.md b/Notes_pam.md new file mode 100644 index 0000000..4b5cf89 --- /dev/null +++ b/Notes_pam.md @@ -0,0 +1,54 @@ +D'apres [PAMConfigFrameworkSpec], `pam_sss` devrait avoir une priorité +>= 512, puisqu'il s'agit d'un profil qui "authenticates against a central +network service, with rules to exclude administrative/system accounts". Or sa +priorité définie dans `/usr/share/pam-configs/sss` est 128 ... pourquoi ? + +=> chercher dans le bugtracker ? + +On dirait vraiment que `pam_sss` est conçu et configuré pour des +utilisateurs qui sont enregistrés dans un LDAP et pas en local (dans ce +cas ça marche direct). Moi je veux bien, c'est parfait pour un poste +fixe qui est toujours connecté au réseau, mais que se passe-t'il avec +un laptop déconnecté, si on n'a pas de mot de passe local ? + +On pourrait envisager de désactiver le profil `pam_unix`, comme cela il +ne reste que `pam_sss` et le problème disparait, mais je soupçonne qu'il +va y avoir des effets de bord ;-) + +Pour passer `pam_sss` en premier, il faut augmenter sa priorité. On peut +faire cela en modifiant le fichier `/usr/share/pam-configs/sss` à la +volée depuis le `postinst` avec `sed`, mais c'est très moche, et cela ne +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-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-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-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 +les deux profils sont sélectionnés dans le dialogue `debconf`. Si on +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. + +Références +---------- + + - [pam.conf(5)] + - [pam-auth-update(8)] + - [PAMConfigFrameworkSpec] + +[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 + + + diff --git a/debian/postinst b/debian/postinst index 0d27d14..e456420 100644 --- a/debian/postinst +++ b/debian/postinst @@ -3,7 +3,7 @@ set -e case "$1" in configure) - # enable GDM customization + # Enable GDM customization if command -v /usr/bin/dconf >/dev/null ; then dconf update fi @@ -18,7 +18,7 @@ case "$1" in cat /usr/share/ca-certificates/orange/*.crt \ > /etc/sssd/pki/sssd_auth_ca_db.pem - # configure pam-pkcs11 + # Configure pam-pkcs11 if [ -d /etc/pam_pkcs11 ] ; then # add Orange certificates mkdir -p /etc/pam_pkcs11/cacerts @@ -31,28 +31,14 @@ case "$1" in # a config file in dir /usr/share/pam-configs. fi - # Configure PAM for credential cache - apt-mark manual libpam-ccreds >/dev/null || true - if [ -e /usr/share/pam-configs/ccreds-check ] ; then - pam-auth-update --package --enable ccreds-check ccreds-save || true - fi + # Configure PAM + pam-auth-update --package \ + --remove sss krb5 \ + --enable yourdev ccreds-check ccreds-save || true - # Configure PAM for Kerberos - if [ -e /usr/share/pam-configs/sss ] ; then - # Use pam-sss if present and disable pam-krb5 - echo "Using pam-sss ..." - pam-auth-update --package --enable sss || true - pam-auth-update --package --remove krb5 || true - elif [ -e /usr/share/pam-configs/krb5 ] ; then - echo "Using pam-krb5 ..." - pam-auth-update --package --enable krb5 || true - else - echo "Warning: no PAM config for Kerberos found!" - fi - - # fix sssd configuration permissions + # Fix sssd configuration permissions chmod 600 /etc/sssd/sssd.conf || true - # restart services + # Restart services deb-systemd-invoke restart sssd.service || true ;; diff --git a/debian/postrm b/debian/postrm index 66f3adf..f8355bb 100644 --- a/debian/postrm +++ b/debian/postrm @@ -8,6 +8,7 @@ case "$1" in dconf update fi ;; + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; diff --git a/debian/prerm b/debian/prerm new file mode 100644 index 0000000..8c7300c --- /dev/null +++ b/debian/prerm @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +case "$1" in + remove) + pam-auth-update --package --remove yourdev || true + ;; + + upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + + +#DEBHELPER# + +exit 0 diff --git a/usr/share/pam-configs/yourdev b/usr/share/pam-configs/yourdev new file mode 100644 index 0000000..2e1a8b7 --- /dev/null +++ b/usr/share/pam-configs/yourdev @@ -0,0 +1,23 @@ +Name: Yourdev authentication (SSSD) +Default: no +Priority: 512 +Conflicts: sss + +Auth-Type: Primary +Auth: + [success=end default=ignore] pam_sss.so use_first_pass +Auth-Initial: + [success=end default=ignore] pam_sss.so forward_pass +Account-Type: Additional +Account: + sufficient pam_localuser.so + [default=bad success=ok user_unknown=ignore] pam_sss.so +Session-Type: Additional +Session-Interactive-Only: yes +Session: + optional pam_sss.so +Password-Type: Primary +Password: + sufficient pam_sss.so use_authtok +Password-Initial: + sufficient pam_sss.so