Tips Export-Import Data Account Zimbra Menjadi Data LDAP
Beberapa waktu yang lalu, team Excellent diminta oleh salah satu klien instansi pemerintah di daerah Bogor untuk melakukan setup Zimbra Mail Server dengan external account authentication menggunakan LDAP. Meski Zimbra sendiri sudah menggunakan LDAP, klien Excellent meminta dibuatkan LDAP tersendiri yang nantinya akan digunakan sebagai pusat account untuk keperluan single identity (SSO/Single Sign On/Single Login)
Konfigurasi LDAP Server menggunakan SUSE Linux Enterprise Server (SLES) tidak terlalu sulit karena bisa mengikuti wizard via YAST | Network Services | LDAP Server. Yang sulit adalah melakukan import data account Zimbra menjadi data LDIF yang bisa diimport ke LDAP server milik SLES.
Bagi rekan-rekan yang mengalami kendala yang sama, berikut adalah script modifikasi dari artikel Script untuk Export-Import Account Zimbra+Password . Script ini saya modifikasi agar memasukkan data home directory, GID, UID dan lain-lain yang diperlukan oleh POSIX Schema. Silakan dimodifikasi sesuai keperluan.
#!/bin/sh #Hapus Layar clear echo -e "###################################################################################" echo -e "# Zimbra export-ldap.sh ver 0.0.1 #" echo -e "# Skrip untuk export account Zimbra berikut profile dan password #" echo -e "# Masim 'Vavai' Sugianto - vavai@vavai.com - https://www.vavai.com #" echo -e "# PT. Excellent Infotama Kreasindo : http://www.excellent.co.id #" echo -e "###################################################################################" # /* Variable untuk bold */ ibold="3[1m""\n===> " ebold="3[0m" # /* Parameter */ echo "" echo -n "Enter Domain Name (ex : vavai.com) : " read NAMA_DOMAIN echo -n "Enter path folder for exported account (ex : /home/vavai/) : " read FOLDER # /* Membuat file hasil export dan mengisi nama domain */ MOD_FILE="$FOLDER/zcs-acc-mod.ldif" LDIF_FILE="$FOLDER/acc-add.ldif" vUID=1004 rm -f $MOD_FILE rm -f $LDIF_FILE touch $MOD_FILE touch $LDIF_FILE # /* Check versi Zimbra yang digunakan */ VERSION=`su - zimbra -c 'zmcontrol -v'`; ZCS_VER="/tmp/zcsver.txt" # get Zimbra LDAP password ZIMBRA_LDAP_PASSWORD=`su - zimbra -c "zmlocalconfig -s zimbra_ldap_password | cut -d ' ' -f3"` touch $ZCS_VER echo $VERSION > $ZCS_VER echo -e $ibold"Retrieve Zimbra User.............................."$ebold grep "Release 5." $ZCS_VER if [ $? = 0 ]; then USERS=`su - zimbra -c 'zmprov gaa'`; LDAP_MASTER_URL=`su - zimbra -c "zmlocalconfig -s ldap_master_url | cut -d ' ' -f3"` fi grep "Release 7." $ZCS_VER if [ $? = 0 ]; then USERS=`su - zimbra -c 'zmprov -l gaa'`; LDAP_MASTER_URL="ldapi:///" fi echo -e $ibold"Processing account, please wait.............................."$ebold # /* Proses insert account kedalam file hasil export */ for ACCOUNT in $USERS; do NAME=`echo $ACCOUNT`; DOMAIN=`echo $ACCOUNT | awk -F@ '{print $2}'`; ACCOUNT=`echo $ACCOUNT | awk -F@ '{print $1}'`; ACC=`echo $ACCOUNT | cut -d '.' -f1` if [ $NAMA_DOMAIN == $DOMAIN ] ; then OBJECT="(&(objectClass=zimbraAccount)(mail=$NAME))" dn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep dn:` displayName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep displayName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'` givenName=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep givenName: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'` userPassword=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep userPassword: | cut -d ':' -f3 | sed 's/^ *//g' | sed 's/ *$//g'` cn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep cn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'` initials=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep initials: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'` sn=`/opt/zimbra/bin/ldapsearch -H $LDAP_MASTER_URL -w $ZIMBRA_LDAP_PASSWORD -D uid=zimbra,cn=admins,cn=zimbra -x $OBJECT | grep sn: | cut -d ':' -f2 | sed 's/^ *//g' | sed 's/ *$//g'` if [ "$giveName" == "" ]; then echo " dn: uid=$ACCOUNT,ou=people,dc=excellent,dc=co,dc=id cn: $displayName sn: $sn uid: $ACCOUNT objectClass: top objectClass: inetOrgPerson objectClass: posixAccount gidNumber: 100 uidNumber: $vUID homeDirectory: /home/$ACCOUNT loginShell: /bin/bash " >> $LDIF_FILE echo "$dn changetype: modify replace: userPassword userPassword:: $userPassword " >> $MOD_FILE else echo " dn: uid=$ACCOUNT,ou=people,dc=excellent,dc=co,dc=id cn: $displayName givenName: $givenName sn: $sn uid: $ACCOUNT objectClass: top objectClass: inetOrgPerson objectClass: posixAccount gidNumber: 100 uidNumber: $vUID homeDirectory: /home/$ACCOUNT loginShell: /bin/bash " >> $LDIF_FILE echo "$dn changetype: modify replace: userPassword userPassword:: $userPassword " >> $MOD_FILE fi echo "Adding account $NAME" fi let vUID=vUID+1 done echo -e $ibold"All account has been exported sucessfully into $MOD_FILE and $LDIF_FILE..."$ebold
Script diatas akan menghasilkan 2 buah file. File pertama adalah acc-add.ldif dan zcs-acc-mod.ldif. File yang pertama digunakan untuk input data LDAP dengan perintah sebagai berikut :
ldapadd -Wx -D "cn=Administrator,dc=excellent,dc=co,dc=id" -H ldap://localhost -f acc-add.ldif
Sedangkan file kedua digunakan untuk modify password agar sesuai dengan password yang ada di Zimbra, dijalankan dengan perintah :
ldapmodify -f zcs-acc-mod.ldif -x -H ldapi:/// -D "cn=Administrator,dc=excellent,dc=co,dc=id" -w PasswordLDAPServer