Skip to content

Instantly share code, notes, and snippets.

@davidcrx
Created June 6, 2018 07:16
Show Gist options
  • Save davidcrx/7abac1f4ea99ba6de0eb9c7d4fa86425 to your computer and use it in GitHub Desktop.
Save davidcrx/7abac1f4ea99ba6de0eb9c7d4fa86425 to your computer and use it in GitHub Desktop.
Afegir usuaris automàticament en un entorn LDAP a través d'un fitxer CSV. [BASH]

Per portar a terme aquest mini-projecte treballarem amb 3 fitxers.

  1. Fitxer de configuració (config)
  2. Secret password OpenLDAP (secret)
  3. Script automatització usuaris openldap (adduser.sh)

Crearem el directori /root/ldap

  • mkdir /root/ldap
  • nano /root/ldap/conf (A continuació adjunto el fitxer de configuració OPENLDAP.
  • nano /root/ldap/secret (A continuació adjunto el fitxer per la password)

Donem permisos al script

  • chmod +x adduser.sh
#!/bin/sh
# Author: David Creus
# Programa que automatitza la creació d'usuaris en un entorn OpenLDAP
#################################################################
#Verifiquem que el usuari que executa l'script es root #
#################################################################
if [ "$(id -u)" != "0" ]; then
echo "Tens que ser root per executar aquest script" 1>&2
exit 1
fi
#################################################################
#Comprovem que els paràmetres #
#################################################################
if [ $# -ne 1 ]; then
echo "Funcionament: Tens que introduir el fitxer.csv. Ex [./adduser.sh Alumnes.csv]"
exit 1
fi
#################################################################
#Comprovem que el fitxer existeix o no està buit #
#################################################################
if [ -f $1 ] && [ -n $1 ]; then
echo "Todo OK" > /dev/null
else
echo "Error en el fitxer, no existeix o està buit"
exit 1;
fi
#Especifiquem la configuració LDAP
CONFIG="/root/ldap/config"
#Carguem la configuració LDAP
. $CONFIG
#################################################################
#Tractem el fitxer i eliminem els accents del fitxer que hem #
#passat com a paràmaetre #
#################################################################
sed -i "y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛñÑ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜnN/" $1
#################################################################
#Eliminem els espais de línea (\n) que pugin haver-hi #
#################################################################
sed -i '/^$/d' $1
#################################################################
#Començem a llegir linea per linea el fitxer csv #
#################################################################
while IFS=, read -r apellidos nombre
do
DISPLAYNAME=`ldapsearch -x | grep $nombre`
#checkifexist=`ldapsearch -x | grep $primerainicial.$apellidos2 | cut -c7-100`
#################################################################
#Comprovem si el usuari existeix, si no existeix el crearem. #
#################################################################
if [ -z "$DISPLAYNAME" ]; then
#Extreiem la primera inicial sense espais i amb les lletres amb minúscula
primerainicial=`echo $nombre | cut -c1 | tr '[:upper:]' '[:lower:]' | sed -r 's/\s+//g'`
#Extreiem els cognoms sense espais i amb les lletres amb minúscula
apellidos2=`echo $apellidos | tr '[:upper:]' '[:lower:]' | sed -r 's/\s+//g'`
########################################################################################################
#Comprovem quin es el utlim uidNumber, ordenem recursivament i agafem el primer valor, per exemple 2001#
########################################################################################################
nuid=`slapcat | grep uidNumber | awk '{print $2}' | sort -r | head -1`
########################################################################################################
#Si slapcat esta buit, especifiquem un valor. Ex: 2000 #
########################################################################################################
if [ -z $nuid ]; then
nuid="2000"
fi
########################################################################################################
#Sumem el ultim valor nuid+1 per exemple: 2000+1 #
########################################################################################################
nuidsum=`echo $((nuid + 1)) | bc -l`
########################################################################################################
#Guardem la data actual #
########################################################################################################
date=`date -d now`
########################################################################################################
#Generem un password i l'encriptem. La política d"usuari será nom+123 #
########################################################################################################
PASSWORD=`$SLAPPASSWORD -h '{crypt}' -s $nombre'123'`
(
################################################################################################################
#Creem el fitxer ldif per a cada usuari #
################################################################################################################
cat <<add-user
dn: cn=$nombre $apellidos,ou=Asix,dc=$DOMAIN,dc=$ORG
objectClass: person
objectClass: iNetOrgPerson
objectClass: top
objectClass: posixAccount
#Especifiquem el password del usuari
userPassword: $PASSWORD
sn: $apellidos
#Concatenem la primera inicial + cognoms
mail: [email protected]
uid: $nombre
#Especifiquem el uid number del usuari
uidNumber: $nuidsum
#Especifiquem el grup del usuari
gidNumber: 500
#Especifiquem el directori del usuari
homeDirectory: /home/users/$primerainicial$apellidos2
add-user
) > $TMP/adduser.ldif
$LDAPADDCMD -x -w $LDAPPASS -D "cn=admin,dc=$DOMAIN,dc=$ORG" -f $TMP/adduser.ldif && rm $TMP/adduser.ldif
echo La contrasenya del usuari és: $nombre'123'
#Escribim al log que el usuari s'ha afegit correctament.
echo "$date >> El usuari$nombre $apellidos s'ha afegit correctament a OpenLDAP" >> /var/log/openldap
else
date=`date -d now`
echo "El usuari ja existeix :-("
#Escribim al log que no s'ha afegit
echo "$date >> El usuari$nombre $apellidos NO s'ha afegit a OpenLDAP" >> /var/log/openldap
fi
done < $1
LDAPADDCMD="/usr/bin/ldapadd"
LDAPDELCMD="/usr/bin/ldapdelete"
SLAPPASSWORD="/usr/sbin/slappasswd"
SECRET="/root/ldap/secret"
LDAPPASS=`cat $SECRET`
HOMEDIR="/home/users"
SKEL="/etc/skel"
TMP="/root/ldap/tmp"
UNIT="Alumnes"
ORG="local"
DOMAIN="davidcrx"
GROUP="Alumnes"
MODDATE=`date "+%Y%m%d%H%M%S.%N"`
ARCHIVE=".deleted"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment