On 26/11/15 03:21, mathias dufresne wrote:
> Hi,
>
> Use pwdLastSet + your AD password policy to know when password will expire.
>
> Expiration will happen at pwdLastSet + how long this password is valid.
>
> Cheers,
>
> mathias
Thanks. It was very useful for me. This is the first version of the script.
Regards, Amaury.
#!/bin/bash
#=============== Parámetros que s pueden modificar
==================================================
# Dias para que expire la contrasena en el AD, por defecto: 90 días.
RESTRICCION_EXPIRACION=90
# Segundos antes para enviar el correo, por defecto: 7 días
DIAS_PARA_NOTIFICAR=7
# Servidor de directorio activo
H="192.168.56.10"
# Puerto de directorio activo
P="389"
# Usuario de directorio activo
DN="cn=mailadmin,ou=services,dc=diveppr,dc=co,dc=cu"
# Contraseña de directorio activo
PW="p@ssw0rd"
# Base de directorio activo
B="ou=services,dc=diveppr,dc=co,dc=cu"
# Tiempo de consulta por usuario
TIEMPO_POR_USUARIOS=0
# Sitio para que los usuario cambien la contraseña
SITIO="
https://cambiarcontrasena.diveppr.co.cu"
# Logs para el reporte diario
FILE_LOGS="/var/log/reporte-comprobacion-expiracion-de-cuentas.log"
# Fecha para el reporte
TIME="$(date '+%Y-%m-%d %H:%M')"
# Dirección remitente
FROM="root"
# Dirección destino
TO="root"
# Asunto del reporte
ASUNTO="Reporte de expiración de contraseña de los usuarios"
#======================================== Ejecución del script
============================================
echo > $FILE_LOGS
chmod 777 $FILE_LOGS
enviarCorreo(){
DIAS_QUE_FALTAN=$1
USUARIO=$2
FECHA_EXPIRACION=$3
from="$4"
to=$2
subject="Su cuenta espira en $1 días"
body=" Su cuenta espira en $1 días o sea el $3 usted puede cambiar la
contraseña en la siguiente dirección:
$SITIO
Administrador de servicios telemáticos.
"
mail -s "$subject" -r "$from" "$to" <<< "$body"
}
# Comando base
CMD="ldapsearch -D "$DN" -w $PW -p $P -h $H -b "$B""
# Filtro base
FP="(objectclass=person)"
USERS=$($CMD -s sub "$FP" userPrincipalName | grep userPrincipalName |
cut -d ' ' -f2)
ACTUALUNIX=`date "+%s"`
echo "Comprobación de expiración de las cuentas" >> $FILE_LOGS
echo "" >> $FILE_LOGS
echo "Inicio de la comprobación: $TIME" >> $FILE_LOGS
echo "" >> $FILE_LOGS
for USER in $USERS ; do
if [ $USER != "requesting:" ] ; then
PWDLASTSET=$($CMD -s sub "(&$FP(userPrincipalName=$USER))"
pwdLastSet | grep pwdLastSet: | cut -d' ' -f2)
if [ $PWDLASTSET != "0" ] ; then
LASTSETUNIX=`expr $PWDLASTSET / 10000000 - 11644473600`
else
WHENCREATED=$($CMD -s sub "(&$FP(userPrincipalName=$USER))"
whenCreated | grep whenCreated: | cut -d' ' -f2)
DATECREATED=${WHENCREATED:0:8}
LASTSETUNIX=`date -d $DATECREATED "+%s"`
fi
let REST=" ($RESTRICCION_EXPIRACION*86400) "
EXP=$(expr $LASTSETUNIX + $REST)
TEMP=$(expr $LASTSETUNIX + $REST - $ACTUALUNIX)
DIAS=$(expr $TEMP / 86400)
FECHAEXP=$(date --date="@$EXP")
echo "Comprobación del usuario: $USER" >> $FILE_LOGS
echo " Fecha que vence: $FECHAEXP" >> $FILE_LOGS
echo " Días que faltan: $DIAS" >> $FILE_LOGS
if [ $DIAS -le $DIAS_PARA_NOTIFICAR ] ; then
echo "El usuario a sido notificado" >> $FILE_LOGS
enviarCorreo "$DIAS" "$USER" "$FECHAEXP" "$FROM"
fi
echo "" >> $FILE_LOGS
fi
#Esto es importante para que no sature el correo, o sea, cada 2 segundos
comprobar un usuario.
sleep $TIEMPO_POR_USUARIOS
done
mail -s "$ASUNTO" -r "$FROM" "$TO" << EOF
$(cat $FILE_LOGS)
EOF