2 votes

Après la mise à jour de sécurité 2019-003, OpenLDAP est corrompu. Comment puis-je récupérer?

J'ai installé la mise à jour de sécurité 2019-003 ce matin. La mise à jour a échoué et a provoqué une panique induite sur l'hôte (postgres), une deuxième tentative a réussi. Après la mise à jour, slapd ne se lance plus.

J'ai essayé de restaurer /private/var/db/{krb5kdc,openldap,auth} à partir d'une sauvegarde Time Machine (en redémarrant avec Cmd-R, en désactivant temporairement SIP) mais quoi que je fasse, je n'arrive pas à le relancer. db_recover ne fonctionne pas non plus. Les tests de slapd produisent :

bash-3.2# /usr/libexec/slapd -T test
5cdfeed8 bdb_monitor_db_open: surveillance désactivée; configurez la base de données de surveillance pour l'activer
5cdfeed8 bdb_db_open: base de données "cn=authdata" : arrêt incorrect détecté ; tentative de récupération.
5cdfeed8 bdb_db_open: base de données "cn=authdata" : récupération ignorée en mode lecture-seule. Exécutez une récupération manuelle si des erreurs sont rencontrées.
test du fichier de configuration réussi
bash-3.2# slaptest -v
5cdfef28 bdb_monitor_db_open: surveillance désactivée; configurez la base de données de surveillance pour l'activer
5cdfef28 bdb_db_open: base de données "cn=authdata" : arrêt incorrect détecté ; tentative de récupération.
5cdfef28 bdb_db_open: base de données "cn=authdata" : récupération ignorée en mode lecture-seule. Exécutez une récupération manuelle si des erreurs sont rencontrées.
test du fichier de configuration réussi

Comment puis-je récupérer cela à partir de ma sauvegarde Time Machine sans restaurer complètement le serveur et écraser tout le reste ?

Apparemment, la restauration que j'ai essayée (copier openldap à partir d'une sauvegarde Time Machine) n'a pas fonctionné, car la récupération de la base de données de Postgres bloque à cause de ce qui se trouve dans authdata :

bash-3.2# db_recover -cv -h authdata/
Recherche du dernier LSN de journal valide : fichier : 31 offset 174121
Récupération commençant à partir de [30][28]
db_recover: Erreur de séquence de journal : LSN de page 23 1709981; LSN précédent 30 28
db_recover: La fonction de récupération pour LSN 30 8130 a échoué dans le passage en avant
db_recover: PANIQUE : Argument invalide
db_recover: process-private: impossible de trouver l'environnement
db_recover: DB_ENV->open: DB_RUNRECOVERY : Erreur fatale, exécutez la récupération de la base de données
bash-3.2# db_recover -cv -h openldap-data/
Recherche du dernier LSN de journal valide : fichier : 1 offset 1754044
Récupération commençant à partir de [1][28]
Récupération terminée le Sam 18 Mai 13:45:46 2019
Identifiant de transaction maximum 80000cad Point de contrôle de récupération [1][1754044]

2voto

gctwnl Points 564

J'ai pu réparer cela. Cela a peut-être été de la chance. Ce que j'ai fait:

  1. Copiez tous les private/var/db/openldap/authdata de toutes les sauvegardes Time Machine dans un répertoire de travail (for i in 2019*; do ditto $i/DumbledoreRoot/private/var/db/openldap/authdata/ /tmp/$i/authdata; done). Mon volume de démarrage s'appelle DumbledoreRoot.
  2. Exécutez la récupération après crash sur toutes les copies des authdata, pour voir lesquelles sont récupérables (for i in 2019-0*; do echo $i; db_recover -cv -h $i/authdata/; done)
  3. La plupart signaleraient une erreur. Ce n'est pas étrange, Time Machine ne peut pas vraiment sauvegarder ces données car sauvegarder une base de données en direct donne généralement des résultats incorrects dans la sauvegarde. Je me demande cependant comment une restauration à partir d'une Time Machine fait cela. Il doit y avoir une meilleure façon.
  4. Remplacez /private/var/db/authdata par ce qui se trouve dans cette sauvegarde. J'aurais probablement dû copier openldap-data aussi, étant donné ce qui s'est passé ensuite
  5. Exécutez slapd -T test et remarquez qu'il y avait toujours une certaine corruption (bien que différente):

Sortie:

bash-3.2# /usr/libexec/slapd -T test
5cdff90d bdb_db_open: base de données "dc=Dumbledore,dc=local": arrêt incorrect détecté; tentative de récupération.
5cdff90d bdb_db_open: base de données "dc=Dumbledore,dc=local": récupération ignorée en mode lecture seule. Exécutez une récupération manuelle si des erreurs sont rencontrées.
5cdff90d bdb_monitor_db_open: surveillance désactivée; configurez la base de données de surveillance pour l'activer
5cdff90d bdb_db_open: base de données "cn=authdata": arrêt incorrect détecté; tentative de récupération.
5cdff90d bdb_db_open: base de données "cn=authdata": récupération ignorée en mode lecture seule. Exécutez une récupération manuelle si des erreurs sont rencontrées.
test de fichier de configuration réussi

Désespéré. Puis, par hasard, j'ai démarré Open Directory à partir de Server.app et à ma grande surprise, il a démarré et mes comptes d'utilisateurs réseau étaient de retour.

Donc, je suis probablement juste chanceux et de meilleures réponses pourraient aider aux problèmes futurs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X