Migrar usuarios zimbra a ldap

En este entrada se va  a migrar los usuarios de zimbra a un directorio ldap externo en este caso 389 para esto estamos usando la version 8 community.

  • Lo primero que se va a realizar es migrar los usuarios en el servidor zimbra con el siguiente comando, que debe ser ejecutado con el usuario zimbra:

          /opt/zimbra/libexec/zmslapcat  /tmp/ldap
         Este comando exporta nuestra configuración a una carpeta ldap dentro del directorio de temporales,            esto va a generar un archivo llamado ldap.bak.

  • Una vez generado se debe copiar este archivo a la máquina que se quiera migrar, para modificar este archivo estoy usando un servidor Apache con PHP para modificar y es de esta manera como voy a generar el archivo. 
          Para copiarlo estoy usando este comando de copia por consola:
          scp /tmp/ldap/ldap.bak paul@192.168.1.3:/home/paul


  • Una vez copiado lo paso al directorio de apache y le renombre como ldap.txt para saber que es el archivo que estoy migrando, dándole permisos de lectura por apache 
  • Una vez aquí procedo a manipularlo por PHP, para convertirlo en formato ldif, que es el que se puede usar para el intercambio con 389. Aquí dejo la página que realice para realizar esta tarea.

<?php
$file = fopen("ldap.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
$dnArray=array();
$nsArray=array();
$snArray=array();
$homeArray=array();
$uidArray=array();
$gidArray=array();
$uidArray=array();
$object1Array=array();
$object2Array=array();
$object3Array=array();
$object4Array=array();
$object5Array=array();
$uiNArray=array();
$homeDArray=array();
$cnArray=array();
$mailArray=array();
$passwordArray=array();
$createArray=array();
$modifyArray=array();
$nroUsuario=1001;
while(!feof($file))
{
$linea=fgets($file);
if (substr($linea,0,7)=='dn: uid'){
array_push($dnArray,$linea);
  }
if (substr($linea,0,12)=='nsUniqueId: '){
array_push($nsArray,$linea);
  }
if (substr($linea,0,3)=='sn:'){
array_push($snArray,$linea);
  }
if (substr($linea,0,4)=='uid:'){
array_push($uiNArray,$linea);
  }
if (substr($linea,0,3)=='cn:'){
array_push($cnArray,$linea);
  }
if (substr($linea,0,5)=='mail:'){
array_push($mailArray,$linea);
  }
if (substr($linea,0,14)=='userPassword::'){
array_push($passwordArray,$linea);
  }
if (substr($linea,0,16)=='createTimestamp:'){
array_push($createArray,$linea);
  }
if (substr($linea,0,16)=='modifyTimestamp:'){
array_push($modifyArray,$linea);
  }

array_push($homeArray,"loginShell: /bin/bash");
}
fclose($file);
for($i=0;$i<=sizeof($dnArray)-1;$i++){
//echo $i."<br>";
if($i>0){
$nroUsuario+=1;
}
array_push($uidArray,"uidNumber: ".$nroUsuario);
array_push($gidArray,"gidNumber: ".$nroUsuario);
array_push($object1Array,"objectClass: top");
array_push($object2Array,"objectClass: person");
array_push($object3Array,"objectClass: organizationalPerson");
array_push($object4Array,"objectClass: inetorgperson");
array_push($object5Array,"objectClass: posixAccount");
array_push($homeDArray,"homeDirectory: /home/".substr($uiNArray[$i],4,strlen($uiNArray[$i])));
array_push($creatorArray," cn=directory manager");
array_push($modifiersArray," cn=directory manager");
//echo "<tr><td>".$i.
echo $dnArray[$i]."</br>";
echo $nsArray[$i]."</br>";
echo $snArray[$i]."</br>";
echo $homeArray[$i]."</br>";
echo $uidArray[$i]."</br>";
echo $gidArray[$i]."</br>";
echo $object1Array[$i]."</br>";
echo $object2Array[$i]."</br>";
echo $object3Array[$i]."</br>";
echo $object4Array[$i]."</br>";
echo $object5Array[$i]."</br>";
echo $homeDArray[$i]."</br>";
echo $uiNArray[$i]."</br>";
echo $cnArray[$i]."</br>";
echo $mailArray[$i]."</br>";
echo $passwordArray[$i]."</br>";
echo $createArray[$i]."</br>";
echo $modifyArray[$i]."</br><br>";

}

?>


  • Esto me genera en pantalla el formato que necesito, basta con copiar y pegar en un nuevo archivo lo que se muestra en pantalla y se genera un archivo ldap.ldif que sera el que importaremos al servidor de 389.
  • Accedemos al servidor de 389 y desde la consola de administración lo importamos y listo, tenemos nuestro servidor con todos los usuarios de zimbra.
Nota.- De esta manera yo migre en un solo archivo 670 usuarios sin problema, que sería el número con el que puedo dar referencia de carga.


Comentarios

Entradas populares