[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 3 # 4 ## $Id: synchro_ldap.sh 7745 2013-03-31 23:53:39Z keyser $ ## 5 # 6 ##### Script de mise en place de la réplication entre le LDAP du Slis et du Se3 ##### 7 8 if [ "$1" = "--help" -o "$1" = "-h" ] 9 then 10 echo "Permet de mettre en place la réplication" 11 echo "avec l'annuaire LDAP du Slis / lcs ou tout autre annuaire distant" 12 echo "Usage : aucune option" 13 exit 14 fi 15 16 #SCRIPT DE MISE EN PLACE DE LA REPLICATION 17 #DU LDAP DU SLIS VERS LE LDAP DU SE3 18 # Stephane Boireau / Franck Molle 19 # 01/2005 20 # modif keyser 13/04/05 21 # 11/2005 ajout tests sur root et cn=profs 22 23 #Couleurs 24 COLTITRE="\033[1;35m" # Rose 25 COLPARTIE="\033[1;34m" # Bleu 26 27 COLTXT="\033[0;37m" # Gris 28 COLCHOIX="\033[1;33m" # Jaune 29 COLDEFAUT="\033[0;33m" # Brun-jaune 30 COLSAISIE="\033[1;32m" # Vert 31 32 COLCMD="\033[1;37m" # Blanc 33 34 COLERREUR="\033[1;31m" # Rouge 35 COLINFO="\033[0;36m" # Cyan 36 37 ERREUR() 38 { 39 echo -e "$COLERREUR" 40 echo "ERREUR!" 41 echo -e "$1" 42 echo -e "$COLTXT" 43 exit 1 44 } 45 46 POURSUIVRE() 47 { 48 REPONSE="" 49 while [ "$REPONSE" != "o" -a "$REPONSE" != "O" -a "$REPONSE" != "n" ] 50 do 51 echo -e "$COLTXT" 52 echo -e "Peut-on poursuivre? ($COLCHOIX}O/n$COLTXT}) $COLSAISIE\c" 53 read REPONSE 54 if [ -z "$REPONSE" ]; then 55 REPONSE="o" 56 fi 57 done 58 59 if [ "$REPONSE" != "o" -a "$REPONSE" != "O" ]; then 60 ERREUR "Abandon!" 61 fi 62 } 63 64 clear 65 echo -e "$COLTITRE" 66 echo "*************************" 67 echo "* SCRIPT DE REPLICATION *" 68 echo "* DU LDAP DU LCS / SLIS *" 69 echo "* VERS LE LDAP DU SE3 *" 70 echo "*************************" 71 72 echo -e "$COLINFO" 73 echo "ATTENTION: Ce script nécessite que l'installation SE3 utilise" 74 echo " pour unique LDAP celui du LCS ou SLIS." 75 echo " Cela signifie que le LDAP du SE3 doit être pour le moment" 76 echo " inutilisé." 77 echo 78 echo -e "$COLTXT" 79 echo " Appuyez sur Entree pour continuer........" 80 read 81 82 echo -e $COLPARTIE 83 echo "--------" 84 echo "Partie 1 : Récupération des données" 85 echo "--------" 86 echo -e "$COLTXT" 87 88 ### on suppose que l'on est sous debian ;) #### 89 WWWPATH="/var/www" 90 91 DEBVER=`cat /etc/debian_version` 92 echo -e "$COLINFO\c" 93 if [ "$DEBVER" = "3.0" ]; then 94 echo "Debian woody détectée." 95 SLAPDCONFIN=slapd_ldbm.conf.in 96 SMBCONFIN=smb.conf.in 97 else 98 echo "Debian sarge/sid détectée." 99 SLAPDCONFIN=slapd_bdb.conf.in 100 SMBCONFIN=smb_3.conf.in 101 SMBVERSION="samba3" 102 fi 103 104 echo -e "$COLTXT" 105 echo "Recherche des informations dans $WWWPATH/se3/includes/config.inc.php" 106 107 ## recuperation des variables necessaires pour interoger mysql ### 108 echo -e "$COLCMD" 109 if [ -e $WWWPATH/se3/includes/config.inc.php ]; then 110 dbhost=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbhost=" | cut -d = -f2 | cut -d \" -f2` 111 dbname=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbname=" | cut -d = -f 2 |cut -d \" -f 2` 112 dbuser=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbuser=" | cut -d = -f 2 | cut -d \" -f 2` 113 dbpass=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbpass=" | cut -d = -f 2 | cut -d \" -f 2` 114 else 115 ERREUR "Fichier de configuration inaccessible, le script ne peut se poursuivre." 116 117 fi 118 119 ### Verification que le serveur ldap est bien sur se3 et non pas déporté" 120 121 IPLDAPMASTER=`echo "SELECT value FROM params WHERE name=\"ldap_server\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 122 IPSE3=`cat /etc/network/interfaces | grep address | sed -e s/address\ // | cut -f2` 123 if [ "$IPSE3" != "$IPLDAPMASTER" ] ; then 124 ### recuperation des parametres actuels de l'annuaire dans la base #### 125 #echo "BASEDN=`echo "SELECT value FROM params WHERE name=\"ldap_base_dn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N`" 126 127 BASEDN=`echo "SELECT value FROM params WHERE name=\"ldap_base_dn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 128 ADMINRDN=`echo "SELECT value FROM params WHERE name=\"adminRdn\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 129 ADMINPW=`echo "SELECT value FROM params WHERE name=\"adminPw\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 130 else 131 ERREUR "Il semble que le LDAP utilisé par votre SE3 soit celui du SE3 lui-même ! " 132 133 fi 134 135 ## verificiation de la bonne configuration du ldap local au cas ou la section 3 du script 136 ## d'install aurait ete zappee 137 RDN_LOCAL=`grep rootdn /etc/ldap/slapd.conf | cut -f3 | sed -e "s/\"//g"` 138 ADMINPW_LOCAL=`grep rootpw /etc/ldap/slapd.conf | cut -f3` 139 140 # echo "valeurs trouvees" 141 # echo $RDN_LOCAL 142 # echo $ADMINPW_LOCAL 143 # read 144 145 if [ "$RDN_LOCAL" == "$ADMINRDN,$BASEDN" -a "$ADMINPW_LOCAL" == "$ADMINPW" ]; then 146 echo -e $COLTXT 147 echo "Ldap local configuré correctement par rapport au ldap distant," 148 echo "le script peut se poursuivre." 149 else 150 echo -e $COLTXT 151 echo "Le ldap local n'est pas configuré correctement par rapport au ldap distant." 152 echo "Sans doute la section 3 a t-elle été passée lors de l'installation de se3." 153 echo "Il est indispensable que slapd soit configuré correctement." 154 155 echo "Le script va maintenant configurer ldap en local." 156 POURSUIVRE 157 SCHEMADIR="\/etc\/ldap\/schema" 158 SLAPDCONF='/etc/ldap/slapd.conf' 159 160 # Configuration du slapd 161 echo -e "$COLTXT" 162 echo -e "Arrêt du serveur LDAP..." 163 echo -e "$COLCMD" 164 /etc/init.d/slapd stop 165 STOPLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'` 166 if [ ! -z "$STOPLDAPOK" ]; then 167 ERREUR "Le serveur Ldap n'a pas été arrêté correctement, arrêtez-le et relancez le script." 168 else 169 echo -e "$COLTXT}Le serveur ldap de se3 a été arrêté avec succès." 170 LDAPSTOP="yes" 171 fi 172 echo -e "$COLCMD\c" 173 174 if [ ! -d /var/lib/ldap ]; then 175 mkdir /var/lib/ldap 176 fi 177 #echo "cp -a /var/lib/ldap /var/lib/ldap.se3sav" 178 cp -a /var/lib/ldap /var/lib/ldap.se3sav 179 SCHEMAD=`echo $SCHEMADIR | sed -e 's/\\\//g'` 180 cd /var/cache/se3_install/ 181 cp -af conf/*.schema $SCHEMAD/ 182 mv $SLAPDCONF $SLAPDCONF.se3sav 183 cat conf/$SLAPDCONFIN | sed -e "s/#SCHEMADIR#/$SCHEMADIR/g" | sed -e "s/#BASEDN#/$BASEDN/g" | sed -e "s/#ADMINRDN#/$ADMINRDN/g" | sed -e "s/#ADMINPW#/$ADMINPW/g" > $SLAPDCONF 184 185 186 # Prise en compte des lignes spécifiques à la version 2.1.x backportée 187 dpkg -s slapd |grep "Version" | grep "2.1." && slapd21="OK" 188 if [ ! -z "$slapd21" ]; then 189 mv $SLAPDCONF $SLAPDCONF.bak 190 echo "allow bind_v2" > $SLAPDCONF 191 echo "modulepath /usr/lib/ldap">>$SLAPDCONF 192 echo "moduleload back_ldbm" >>$SLAPDCONF 193 cat $SLAPDCONF.bak >> $SLAPDCONF 194 rm $SLAPDCONF.bak 195 fi 196 chmod 640 $SLAPDCONF 197 chown root.$LDAPGRP $SLAPDCONF 198 /usr/sbin/slapindex 2>/dev/null 199 echo "UPDATE params SET value=\"/etc/$SLAPDIR/slapd.conf\" WHERE name=\"path2slapdconf\""|mysql -h $dbhost se3db -u se3db_admin -p$dbpass 200 fi 201 #read 202 203 ladate=$(date +"%Y.%m.%d-%H.%M.%S") 204 DOSSIERTMP="/root/export_ldap/$ladate" 205 mkdir -p $DOSSIERTMP 206 207 echo -e "$COLTXT" 208 echo "Certaines informations sensibles vont maintenant être affichées." 209 echo "Veillez à ce qu'aucun oeil malicieux ne traine derrière votre dos." 210 POURSUIVRE 211 212 echo -e "$COLTXT" 213 echo "Voici les informations récupérées de vos fichiers de config:" 214 echo -e "Base du LDAP: ${COLINFO}$BASEDN${COLTXT}" 215 echo -e "Administrateur du LDAP: ${COLINFO}$ADMINRDN${COLTXT}" 216 echo -e "Mot de passe de" 217 echo -e "l'administrateur du LDAP: ${COLINFO}$ADMINPW${COLTXT}" 218 echo -e "IP du LDAP maitre: ${COLINFO}$IPLDAPMASTER${COLTXT}" 219 echo "" 220 echo "Ces informations vont permettre l'extraction des données du LDAP." 221 222 223 echo -e $COLPARTIE 224 echo "--------" 225 echo "Partie 2 : Extraction de l'annuaire distant" 226 echo "--------" 227 echo -e "$COLTXT" 228 POURSUIVRE 229 230 #TST_ROOT_PEOPLE=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW uid=root | grep People | cut -d " " -f2) 231 TST_ROOT_PEOPLE=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW uid=root | grep -i People | cut -d, -f2) 232 if [ ! -z "$TST_ROOT_PEOPLE" ]; then 233 234 #echo -e "$COLCMD" 235 #echo "$TST_ROOT_PEOPLE" 236 237 echo -e "$COLINFO" 238 echo -e "Attention, vous avez un compte root dans la branche People de l'annuaire, \nIl est nécessaire de la supprimer afin d'éviter des dysfonctionnements." 239 echo -e "Par sécurité, une sauvegarde préalable de l'annuaire sera effectuée." 240 echo -e "$COLCMD" 241 ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export_original.ldif || ERREUR "L'exportation LDIF a échoué!" 242 echo "ldapdelete -x -D $ADMINRDN,$BASEDN "$TST_ROOT_PEOPLE" -w "$ADMINPW"" 243 ldapdelete -x -D $ADMINRDN,$BASEDN "uid=root,$TST_ROOT_PEOPLE,$BASEDN" -w "$ADMINPW" 244 fi 245 246 TST_PROFCN=$(ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW cn=profs | grep -v memberUid | grep profs) 247 if [ ! -z "$TST_PROFCN" ]; then 248 echo -e "$COLINFO" 249 echo -e "Attention, vous avez une entrée cn=profs dans votre annuaire à la place de cn=Profs" 250 echo -e "Il est nécessaire de modifier cette entrée afin d'éviter des dysfonctionnements." 251 echo -e "$COLCMD" 252 ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW "cn=Profs" | grep -v "memberUid" | sed -e "s/cn: profs/cn: Profs/"> $DOSSIERTMP/profscn.ldif 253 ldapmodify -x -D $ADMINRDN,$BASEDN -w "$ADMINPW" -f $DOSSIERTMP/profscn.ldif 254 fi 255 256 257 #Extraction LDIF 258 echo -e "$COLCMD" 259 echo "ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export.ldif" 260 ldapsearch -x -LLL -D $ADMINRDN,$BASEDN -w $ADMINPW > $DOSSIERTMP/export.ldif || ERREUR "L'exportation LDIF a échoué!" 261 262 echo -e "$COLTXT\c" 263 echo "L'export LDIF a été effectué avec succès." 264 265 266 echo -e $COLPARTIE 267 echo "--------" 268 echo "Partie 3 : Importation de l'annuaire extrait sur se3 " 269 echo "--------" 270 echo -e "$COLTXT" 271 272 273 POURSUIVRE 274 #Arrêt du serveur LDAP local si necessaire 275 if [ "$LDAPSTOP" != "yes" ]; then 276 echo -e "$COLTXT" 277 echo "Arrêt du serveur LDAP du SE3:" 278 echo -e "${COLCMD}" 279 /etc/init.d/slapd stop 280 281 STOPLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'` 282 if [ ! -z "$STOPLDAPOK" ]; then 283 ERREUR "Le serveur Ldap n'a pas été arrêté correctement, arrêtez-le et relancez le script." 284 else 285 echo -e "${COLTXT}Le serveur ldap de se3 a été arrêté avec succès." 286 fi 287 fi 288 289 # sauvegarde et vidage du ldap du se3 290 mv /var/lib/ldap /var/lib/ldap.sauve_$ladate 291 mkdir /var/lib/ldap 292 if [ "$DEBVER" != "3.0" ]; then 293 cp -a /var/lib/ldap.sauve_${ladate}/DB_CONFIG /var/lib/ldap 294 fi 295 296 #Import LDIF 297 echo -e "$COLTXT" 298 echo "Importation de l'extraction LDIF dans la base LDAP du SE3:" 299 echo "Cela peut être long si votre annuaire contient beaucoup de données..." 300 echo -e "$COLCMD" 301 echo "slapadd -b $BASEDN -l $DOSSIERTMP/export.ldif" 302 slapadd -b $BASEDN -l $DOSSIERTMP/export.ldif || ERREUR "L'importation du fichier LDIF a échoué!" 303 slapindex 304 305 echo -e "${COLTXT}L'importation LDIF est effectuée." 306 307 echo -e "$COLTXT" 308 309 echo -e $COLPARTIE 310 echo "--------" 311 echo "Partie 4 : Basculement du ldap en mode autonome sur se3 " 312 echo "--------" 313 echo -e "$COLTXT" 314 315 echo -e "Les deux annuaires sont désormais identiques, on repasse le ldap se3 en mode autonome." 316 echo -e "$COLTXT" 317 318 echo "Arrêt du serveur Samba de SE3:" 319 echo -e "${COLCMD}\c" 320 /etc/init.d/samba stop 321 322 echo -e "$COLTXT" 323 echo -e "Mise à jour des fichiers de configuration Ldap et Samba..." 324 echo -e "${COLCMD}\c" 325 326 # mise a jour du parametre mysql 327 echo "UPDATE params SET value=\"$IPSE3\" WHERE name=\"ldap_server\""|mysql -h $dbhost se3db -u se3db_admin -p$dbpass 328 # Mise à jour de /etc/ldap/slapd.conf 329 330 # 331 cp -f /etc/ldap/slapd.conf /etc/ldap/slapd.conf.ori 332 cat /etc/ldap/slapd.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" > /etc/ldap/slapd.conf 333 chmod 600 /etc/ldap/slapd.conf 334 # 335 # Mise à jour de /etc/ldap/ldap.conf 336 # 337 cp -f /etc/ldap/ldap.conf /etc/ldap/ldap.conf.ori 338 cat /etc/ldap/ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" >/etc/ldap/ldap.conf 339 chmod 644 /etc/ldap/ldap.conf 340 # 341 # Mise à jour de /etc/pam_ldap.conf 342 # 343 cp -f /etc/pam_ldap.conf /etc/pam_ldap.conf.ori 344 cat /etc/pam_ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g" > /etc/pam_ldap.conf 345 chmod 644 /etc/pam_ldap.conf 346 # 347 # Mise à jour de /etc/libnss-ldap.conf 348 # 349 cp -f /etc/libnss-ldap.conf /etc/libnss-ldap.conf.ori 350 cat /etc/libnss-ldap.conf.ori | sed -e "s/$IPLDAPMASTER/$IPSE3/g"> /etc/libnss-ldap.conf 351 chmod 644 /etc/libnss-ldap.conf 352 # 353 # Mise à jour de /etc/samba/smb.conf 354 # 355 cp -f /etc/samba/smb.conf /etc/samba/smb.conf.ori 356 if [ "$SMBVERSION" = "samba3" ]; then 357 cat /etc/samba/smb.conf.ori | sed -e "s/ldap:\/\/$IPLDAPMASTER/ldap:\/\/$IPSE3/g" > /etc/samba/smb.conf 358 else 359 cat /etc/samba/smb.conf.ori | sed -e "s/ldap server = $IPLDAPMASTER/ldapserver = $IPSE3/g" > /etc/samba/smb.conf 360 fi 361 chmod 644 /etc/samba/smb.conf 362 363 #Redémarrage des service LDAP et Samba du SE3: 364 echo -e "$COLTXT" 365 echo "Démarrage des serveurs LDAP et Samba de SE3:" 366 echo -e "${COLCMD}" 367 /etc/init.d/slapd start 368 STARTLDAPOK=`ps aux | grep slapd | sed -e '/grep slapd/d'` 369 if [ -z "$STARTLDAPOK" ]; then 370 ERREUR "Le serveur Ldap n'a pas été relancé correctement." 371 else 372 echo -e "${COLTXT}Le serveur Ldap a été relancé correctement." 373 fi 374 375 echo -e "${COLCMD}" 376 /etc/init.d/samba start 377 STARTSMBOK=`ps aux | grep slapd | sed -e '/grep smbd/d'` 378 if [ -z "$STARTSMBOK" ]; then 379 ERREUR "Le serveur Samba n'a pas été relancé correctement." 380 else 381 echo -e "${COLTXT}Le serveur Samba a été relancé correctement." 382 fi 383 echo "" 384 echo -e "$COLTITRE" 385 echo "/!\ ------- ATTENTION A LIRE ATTENTIVEMENT ------- /!\ " 386 echo "" 387 echo "Les annuaires du SLIS / LCS et du SE3 sont maintenant identiques." 388 echo "Votre annuaire est désormais hébergé sur se3, mais n'est pas encore répliqué." 389 echo "" 390 echo " AVANT TOUTE CRÉATION DE COMPTE," 391 echo "ACTIVEZ LA RÉPLICATION DANS LES INTERFACES WEB SE3 ET SLIS / LCS." 392 393 394 echo -e "$COLTITRE" 395 echo -e "Terminé $COLTXT" 396 397 exit 0 398
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |