LDAP: sauvegarde avec slapcat vs ldapsearch

11

Utilisé: openldap-servers-2.4.23-34.el6_5.1.x86_64

Tâche: créer un script pour crontabcréer une sauvegarde complète planifiée de la base de données.

1) slapcat- créer un fichier au format par défaut, Berkeley DB.

2) slapcatpeut être fait pendant l' slapdexécution (si la bdb/hdbbase de données est utilisée).

3) Pour restaurer le fichier après slapcat- doit être utilisé slapadd(pas ldapadd).

4) slapcat/addne nécessite pas de mot de passe.

5) slapaddne peut être effectué qu'à l' slapdarrêt.

Exemple:

 $ slapcat -f /etc/openldap/slapd.conf -b "dc=db_1" -l db_1_backup.ldif
 $ slapadd -l db_1_backup.ldif

Au lieu de slapcat/add- jetons un œil à ldapsearch/add:

1) ldapsearch- crée un fichier avec presque les mêmes informations que slapcat;

2) ldapadd- peut utiliser le fichier de ldapsearch, ne nécessite pas slapdd'être arrêté;

3) ldapadd/search- nécessite un mot de passe.

Exemple:

 $ ldapsearch -D "cn=root,dc=db_1" -W -b "dc=db_1" "dc=db_1" -LLL > db_1_backup2.ldif
 $ ldapadd -x -D "cn=root,dc=db_1" -W -f db_1_backup2.ldif

Donc - la question est:

1) Est-ce que je manque quelque chose dans cette description des outils?

2) Quelle est la différence entre ldapadd/slapaddet ladpsearch/slapcat?

setevoy
la source

Réponses:

12

Bon résumé, quelques points supplémentaires:

  • slapcatles vidages depuis le backend de stockage direct (local), il n'est pas nécessaire qu'il s'agisse de Berkeley (hdb ou bdb), il fonctionne également avec OLC ( cn=config). Il sauvegarde au format LDIF . (Par direct, je veux dire directement géré par OpenLDAP, pas par exemple un backend SQL, même s'il est stocké localement.)
  • ldapaddnécessite que slapd soit en cours d'exécution, slapaddnécessite qu'il ne soit pas en cours d'exécution
  • ldapsearchnécessite que ce slapd soit en cours d'exécution, slapcatpeu importe s'il fonctionne avec un backend BDB, comme vous l'avez noté

En bref:

  • slapcatest le moyen d'obtenir une bonne sauvegarde que vous pouvez restaurer rapidement, bien qu'avec des temps d'arrêt sur le maître (vous pouvez contourner ce problème avec différents types de réplication configurés). C'est ce que vous devez utiliser pour une sauvegarde générale et des sauvegardes de pré-mise à niveau.
  • ldapsearch(sans +) vous fournira une sauvegarde portable que vous pouvez probablement charger avec peu de difficulté dans n'importe quel autre serveur d'annuaire, mais ce ne sera qu'une restauration viable dans une configuration OpenLDAP simple (pas de réplication, pas de superpositions spéciales, pas de réécriture), et si vous ne vous souciez pas de préserver l'UUID / créer / modifier des métadonnées. Vous aurez également besoin de fichiers de schéma supplémentaires qui accompagnent vos données.
  • ldapadd(en utilisant son autre identité ldapmodify) peut être utilisé pour appliquer facilement des modifications LDAP (modification d'objet, suppression et renommage) qui ne sont pas réalisables ou possibles avec slapadd/ slapcatseul

Pour la plupart des administrateurs, les principales considérations découlent du contenu légèrement différent du LDIF dans chaque cas et de la nécessité de slapdfonctionner (ou non). Les différences les plus importantes sont:

  1. slapcatest plus rapide car il vide simplement la base de données, sautant les frais généraux du protocole LDAP, l'authentification, le contrôle d'accès, les limites d'objet et de temps, les superpositions; et il ne recherche pas selon la hiérarchie LDAP.
  2. slapaddest plus rapide (encore une fois, pas de surcharge de protocole LDAP), et dans le cas où vous restaurez une bonne sauvegarde connue, vous pouvez exécuter en mode rapide ( -q) pour accélérer les importations importantes. Vous pouvez également désactiver la vérification de schéma ( -s), mais notez que de petits changements dans le schéma ou la validation des données entre les versions d'OpenLDAP ne sont pas inconnus.
  3. slapcatest limité aux bases de données locales, il ne passera pas sur d'autres répertoires (par exemple avec back-ldap, back-meta) ldapsearch. Il en va de même pour slapadd/ ldapadd.
  4. ldapsearchretournera des attributs dynamiques qui ne sont pas stockés dans un backend, par exemple hasSubordinatesou ceux maintenus par des superpositions (par exemple slapo-memberof). Vous aurez des problèmes pour les charger ldapadd(par exemple, les attributs opérationnels sans modification par l'utilisateur). La réécriture (slapo-rwm) peut également déformer ldapsearchla vue du contenu du répertoire.
  5. slapcatinclut des attributs internes (opérationnels), si vous utilisez la réplication, ces attributs sont essentiels. Avec la réplication, vous êtes un peu moins dépendant des sauvegardes, mais si vous utilisez ldapaddpour recharger votre maître, chaque objet sera recréé par réplication (modifié entryUUID entryCSN) Bien que vous puissiez inclure des attributs opérationnels en utilisant l'attribut spécial "+" avec ldapsearch(ou allopsuperposition), ce n'est pas la même chose queslapcat , voir le point précédent pour pourquoi il en est ainsi. Ces attributs incluent également la création / modification de DN et d'horodatages, qui peuvent être importants pour certaines applications.
  6. car slapcatn'observe pas la hiérarchie LDAP (ordre implicite), il n'y a aucune garantie que son ordre de données sera viable ldapadd- c'est-à-dire que même si vous supprimez les attributs opérationnels, vous ldapaddpouvez vous plaindre car des subordonnées peuvent apparaître devant leurs supérieurs (parents) . Les spécifications LDAP nécessitent l'existence d'un parent, mais laissent également l'ordre des résultats de recherche indéfini à cet égard. Voir le commentaire de Howard ci-dessous, OpenLDAP slapaddsupporte silencieusement les données non ordonnées pour certains backends. Dans un pincement, vous pourrez peut-être utiliser à plusieurs reprises slapaddavec l'option continuer en cas d'erreur ( -c) jusqu'à ce que tous les parents "hors service" soient créés, s'arrêtant lorsque vous ne recevez plus de code d'erreur 32 (aucun objet de ce type,
  7. ldapadd est soumis aux règles LDAP et aux superpositions, par exemple l'intégrité référentielle, la politique (mot de passe)
  8. slapcatpréfère utiliser les valeurs d'attribut codées en base 64 pour au moins userPassword (indiqué par ::après le nom de l'attribut)
  9. ldapsearcha plus d'options pour le formatage LDIF et l'écriture de gros attributs dans des fichiers séparés. Il peut également gérer les renvois et les alias .
Mr Spuratic
la source
L'ordre des résultats LDAP n'est pas défini. Slapcat et ldapsearch peuvent tous deux renvoyer des entrées dans un ordre arbitraire, aucune des sorties n'est garantie d'être dans un ordre approprié pour une utilisation avec ldapadd. Les pilotes bdb / hdb / mdb de slapadd ont des solutions de contournement spéciales pour traiter les entrées dans un ordre arbitraire, contrairement à ldapadd.
hyc
slapcatrenvoie les entrées dans l'ordre de la base de données (backend), qui peuvent être ou non bien définies. ldapsearchpar défaut retourne dans l'ordre dans lequel le serveur répond, avec OpenLDAP, il y a le choix du tri côté client (par exemple -S "") ou du contrôle du tri côté serveur (par exemple -E sss, s'il est pris en charge et soumis à quelques pièges à ours mineurs liés à la configuration et au schéma). La spécification indique que les résultats de la recherche peuvent être dans n'importe quel ordre. Une implémentation pourrait définir un ordre par défaut, la plupart des gens supposent que la valeur par défaut est "parent avant enfant", seul OpenDS documente cela, AFAIK.
mr.spuratic
2
L'ordre des résultats de recherche dans OpenLDAP est intentionnellement non documenté. Étant donné que la spécification indique déjà que les résultats peuvent être dans n'importe quel ordre, le logiciel client ne doit pas s'appuyer sur un ordre particulier. Le tri des résultats peut bien sûr être effectué mais cela nécessite beaucoup plus de ressources et n'est généralement pas intéressant lors d'une sauvegarde complète. L'ordre des bases de données est relativement insignifiant étant donné la possibilité de renommer les sous-arborescences en déplaçant les branches vers de nouveaux emplacements DIT.
hyc
1

slapcatne fonctionne pas si vous avez des superpositions, par exemple memberOf. Donc, si vous effectuez une superposition d'adhésion slapcat/ slapaddcycle, les superpositions ne fonctionneront plus.

Robert Munteanu
la source