===== Ajouter massivement des utilisateurs (OpenLDAP) ===== Admettons que nous sommes dans une école où chaque année les administrateurs doivent entrer une liste conséquente de nouveau compte utilisateurs. Faire ça à la main demanderai beaucoup de temps... Grâce au language de script Bash, il va permettre d'automatiser ces tâches rien qu'en lui fournissant en paramètre le nom d'un fichier dont son contenue est une liste d'utilisateurs du type : tatu bruno btatu tatu eric etatu nicolas sarkozi nsarkozi makarian luc mluc Ainsi on pourra lancer l'exécution du script comme suit : ./ajout_massif_utilisateurs.sh comptes.txt On obtiendra en sortie ce type de fichier : dn: cn=tatu bruno,ou=users,ou=iut,dc=local,dc=net objectClass: top ObjectClass: inetOrgPerson objectClass: posixAccount cn: tatu bruno uid: btatu sn: tatu bruno btatu uidNumber: 1011 gidNumber: 2000 homeDirectory: /home/users/bruno loginShell: /bin/sh userPassword: {crypt}btatu dn: cn=tatu eric,ou=users,ou=iut,dc=local,dc=net objectClass: top ObjectClass: inetOrgPerson objectClass: posixAccount cn: tatu eric uid: etatu sn: tatu eric etatu uidNumber: 1012 gidNumber: 2000 homeDirectory: /home/users/eric loginShell: /bin/sh userPassword: {crypt}etatu dn: cn=nicolas sarkozi,ou=users,ou=iut,dc=local,dc=net objectClass: top ObjectClass: inetOrgPerson objectClass: posixAccount cn: nicolas sarkozi uid: nsarkozi sn: nicolas sarkozi nsarkozi uidNumber: 1013 gidNumber: 2000 homeDirectory: /home/users/sarkozi loginShell: /bin/sh userPassword: {crypt}nsarkozi dn: cn=makarian luc,ou=users,ou=iut,dc=local,dc=net objectClass: top ObjectClass: inetOrgPerson objectClass: posixAccount cn: makarian luc uid: mluc sn: makarian luc mluc uidNumber: 1014 gidNumber: 2000 homeDirectory: /home/users/luc loginShell: /bin/sh userPassword: {crypt}mluc Il nous reste plus qu'a ajouter ces nouvelles entrées : ldapadd -W -D "cn=admin,dc=local,dc=net" -x -H ldap://localhost -f sortie_ajout_massif_utilisateurs.ldif Assez attendu, voici le script : #!/bin/bash # Ce code source provient du site : # https://wiki.bruno-tatu.com/doku.php?id=wiki:ajouter-massivement-utilisateurs-openldap if [ -z $1 ]; then echo Merci de renseigner en paramètre le fichier contenant une liste de compte utilisateurs pour OpenLDAP. exit 1 fi read -p "Merci de renseigner votre CN (ex: dc=local,dc=net) : " cn i=0 # Lecture ligne par ligne du fichier : while read line do # La ligne en cours de lecture sera stocké sous forme de tableau : info=($line) # Enregistrement d'une nouvelle entrée dans un fichier temporaire : cat > out.ldif.$i <<_EOF_ dn: cn=${info[0]} ${info[1]},ou=users,ou=iut,${cn} objectClass: top ObjectClass: inetOrgPerson objectClass: posixAccount cn: ${info[0]} ${info[1]} uid: ${info[2]} sn: ${line[0]} uidNumber: $((i+1010)) gidNumber: 2000 homeDirectory: /home/users/${info[1]} loginShell: /bin/sh userPassword: {crypt}${info[2]} _EOF_ i=$((i+1)) done < $1 # Compilation des entrées dans un seul fichier : cat out.ldif* > sortie_ajout_massif_utilisateurs.ldif rm -r out.ldif* echo "Succès de la compilation du fichier sortie_ajout_massif_utilisateurs.ldif." read -p "Souhaitez-vous mettre à jour la base LDAP ? (o/n) " pass if [ $pass == "o" ]; then read -p "Merci de renseigner le nom du manager (ex : admin) : " nom ldapadd -W -D cn=$nom,$cn -x -H ldap://localhost -f sortie_ajout_massif_utilisateurs.ldif fi Malheureusement le serveur LDAP est chatouilleux, prenez le temps de vérifier dans votre fichier LDIF que les retours à la ligne ne disposent pas de caractères inutiles tel que des espaces! N'oubliez pas de le rendre exécutable ! chmod +x ajout_massif_utilisateurs.sh