OpenLDAP, Samba et vieillissement des mots de passe

13

Je configure un système dans lequel toutes les ressources informatiques sont disponibles via une seule paire utilisateur-mot de passe, que ce soit l'accès au shell sur les serveurs, la connexion au domaine Samba, WiFi, OpenVPN, Mantis, etc. (avec accès à des services spécifiques régis par appartenance à un groupe ou champs d'objet utilisateur). Étant donné que nous avons des données personnelles dans notre réseau, nous devons mettre en œuvre le vieillissement des mots de passe, conformément à la directive européenne sur la protection des données (ou plutôt à sa version polonaise).

Le problème est que les comptes Samba et POSIX dans LDAP utilisent des informations de hachage et de vieillissement de mot de passe différentes. Bien que la synchronisation des mots de passe eux-mêmes soit facile ( ldap password sync = Yesdans smb.conf), l'ajout de l'ancienneté des mots de passe au mélange rompt les choses: Samba ne met pas à jour shadowLastChange. Ensemble, obey pam restrictions = Yescrée un système dans lequel un utilisateur Windows ne peut pas modifier le mot de passe ancien, mais si je ne l'utilise pas, les répertoires personnels ne seront pas créés automatiquement. L'alternative est d'utiliser l'utilisation de l'opération étendue LDAP pour le changement de mot de passe, mais le smbk5pwdmodule ne le définit pas non plus. Pire encore, le mainteneur d'OpenLDAP ne le mettra pas à jour / n'acceptera pas les correctifs car ce champ est considéré comme obsolète.

Alors, ma question est, quelle est la meilleure solution? Quels sont leurs avantages et leurs inconvénients?

  1. Utiliser LDAP ppolicyet le vieillissement de mot de passe LDAP interne?

    1. Dans quelle mesure cela fonctionne-t-il avec NSS, modules PAM, samba, autres systèmes?
    2. Les modules NSS et PAM doivent-ils être configurés de manière spéciale pour utiliser ppolicy, pas shadow?
    3. GOsa² fonctionne- t-il avec ppolicy?
    4. Existe-t-il d'autres outils d'administration qui peuvent fonctionner avec ppolicyLDAP activé?
  2. Hackez ensemble un script de changement de mot de passe qui met à jour le champ dans LDAP. (laissant la possibilité à l'utilisateur de mettre à jour le champ sans changer de mot de passe)

Hubert Kario
la source
Ceci est une question magistralement écrite. J'aimerais pouvoir vous aider avec ça ...
gWaldo

Réponses:

1

J'ai écrit ma propre superposition OpenLDAP appelée shadowlastchangepour mettre à jour l' shadowLastChangeattribut chaque fois qu'un changement de mot de passe EXOP se produit. Il est activé dans slapd.conf:

moduleload smbk5pwd
moduleload shadowlastchange
...

database bdb
...
overlay smbk5pwd
overlay shadowlastchange

J'ai configuré smb.confpour changer les mots de passe via EXOP:

ldap passwd sync = Only

Ensuite, pour chaque compte, définissez shadowMaxle nombre de jours de validité d'un mot de passe. Les modules OpenLDAP s'occupent du reste!

200_success
la source
avez-vous essayé de le faire fonctionner avec ppolicy?
Hubert Kario
Non. Essayez-le et faites-moi savoir comment ça se passe.
200_success
Il ressemble à l'un ppolicyou aux smbk5pwdsuperpositions dans Debian squeeze OpenLDAP do update shadowLastChange. Ouais pour Debian!
Hubert Kario
1

En guise d'intervalle, j'ai créé un script pour Samba qui mettra à jour le shadowLastChangechangement de mot de passe:

#!/bin/sh
# script to update shadowLastChange when samba updates passwords
# it's not needed when using 'passwd', it does update the field,
# even if pam_ldap is using LDAP Extented Operation to change password

LDAP_MODIFY="/usr/bin/ldapmodify"
LDAP_SEARCH="/usr/bin/ldapsearch"
LDAP_USER="uid=shadow-update,ou=Services,dc=example,dc=com"
LDAP_PASSWORD="change-me"
LDAP_HOST="localhost"

# get date
SLC=$((`date '+%s'` / 24 / 3600))

# get user login name
user=$1

# find user's DN
dn=$($LDAP_SEARCH -x -h $LDAP_HOST -LLL -b dc=example,dc=com "(uid=$user)" dn)
dn=${dn#dn:}

# check if DN is not base64 encoded
if [ "${dn:0:1}" = ":" ]; then
        # update password change date
        echo "dn:$dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
else
        # update password change date
        echo "dn: $dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
fi

err=$?

if [ ! $err -eq 0 ]; then
   echo "error: can't update shadowLastChange: $err"
   echo "`date`: shadow.sh: can't update shadowLastChange: $err"\
       >> /var/log/shadow-update.log
   exit;
fi

echo OK

Dans la configuration Samba, il doit être unix password syncdéfini sur yes, passwd chatdéfini sur *OK*et passwd programsur le script ci-dessus avec "%u"comme paramètre.

Un compte spécifié dans LDAP_USERdoit être créé dans LDAP et doit avoir la permission de lire sur uidtous les utilisateurs Samba et le droit d'écrire shadowLastChange.

Hubert Kario
la source
1

(travaux en cours, j'ajouterai des détails plus tard)

Bonnes nouvelles tout le monde! J'ai fait fonctionner le tout, plus ou moins ..., dans un environnement de test ...:

  1. La politique de mot de passe (à la fois en termes de qualité et de temps) est appliquée au niveau OpenLDAP (grâce à ppolicy, not24getet passwdqc)
  2. Les mots de passe sont synchronisés entre Samba et POSIX dans les deux sens (grâce à smbk5pwd). Remarque: La vérification de la qualité avec Samba et ppolicy n'est pas évidente: le password check script( pwqcheck -1de passwdqc) doit effectuer les mêmes vérifications que le LDAP ou l'utilisateur obtiendra une autorisation refusée au lieu de "Mot de passe trop facile, essayez différent".
  3. PAM et Samba avertissent l'utilisateur que le mot de passe va bientôt expirer.
  4. Les répertoires utilisateur sont créés à l'aide depam_mkhomedir
  5. L'implémentation GOsa² du RFC2307bis (et du schéma associé) insère des uidentrées de groupe, donc les applications qui attendent soit NIS (la plupart des éléments "UNIXy") soit le schéma RFC2307bis (la plupart des applications "conçues pour AD") fonctionnent très bien.

Le seul problème est que la désactivation d'un compte nécessite l'utilisation d'outils CLI (ou l'écriture d'un script de postmodification GOsa) ou le compte ne sera pas verrouillé au niveau LDAP, uniquement pour PAM et Samba. L'expiration du mot de passe sera toujours appliquée, ce n'est donc pas un gros problème.

Hubert Kario
la source
0

J'ai la réponse d'un des développeurs de GOsa. À l'heure actuelle, GOsa ne prend en aucun cas en charge la superposition de polices.

Hubert Kario
la source