Notificación de contraseña expirada
Notificación de contraseña expirada
He estado buscando en estos días, pero sin suerte algún script ya sea en bash, Perl o cualquier lenguaje que envie una notificación a los usuarios siete días antes de que su contraseña del sistema expire. He tratado de hacerlo en bash apoyándome en chage o passwd pero no he logrado nada aún. Si alguien tuviera alguna experiencia en este tema, por favor, compartirla.
Re: Notificación de contraseña expirada
Bueno, 7 días es la cantidad por defecto para el parámetro warning del archivo /etc/shadow, al menos en Debian.
En fin, quizás algo como esto te funcione:
Ojo, este script lo que hace es establecer la alerta de cambio de contraseña en 7 días para todos los usuarios que inician sesión con bash y cuyo id sea mayor que 500. El propio sistema operativo debe emitir la alerta al usuario en cuanto este inicie sesión, por eso no se ha incluido dicha funcionalidad.
En fin, quizás algo como esto te funcione:
Código: Seleccionar todo
#!/bin/sh
LISTADO=`cat /etc/passwd | grep -i "bash" | awk -F: '$3 > 500 {print $1}'`
for USUARIO in ${LISTADO}
do
chage -W 7 ${USUARIO};
done
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke
- Edmund Burke
Re: Notificación de contraseña expirada
Sí, pero la altera a la que me refería era notificación vía correo, esa parte de establecer el warning y la cantidad de días a caducar el password ya la tenía lista, encontré este script y me funciona a las mil maravillas, solo que tuve que traducirlo, lo posteo tal y como estaba en el sitio que lo encontré, ojalá y les sea útil a todos.
#!/bin/sh
#
# Goran Cvetanoski - 19/12/2006
#
# pwage
#
# This script works out the time left before a password expires
#
# It will send a reminder email 10 days and 3 days before the password
# will expire. The email will go to unix.admin@mydomain.com.au unless an
# alternate email address is specified. An email will also be sent if a
# password has expired.
#
# The following command will send results to unix.admin@mydomain.com.au
# pwage oracle
#
# Specify an alternate email address if you would like the results to be
# sent to a different email address.
# ie:
# pwage oracle oracledba@mydomain.com.au
#
#
# CHANGE LOG
# =========================================================================
# 19/12/2006 - Goran Base script created
# 05/08/2009 - Ricky Smith added code to check each user
#
LOG=/tmp/pwage.log
DASHES="-----------------------------"
show()
{
echo "$DASHES $1 $DASHES" >> $LOG
shift
eval "$@" >> $LOG
echo "" >> $LOG
}
SendMail()
{
cat $LOG | mailx -s "$1" "$2"
}
reminder ()
{
echo "Date: `date`"
echo ""
echo "Please change your password within the next $EXPIRE days"
}
expired ()
{
echo "Date: `date`"
echo ""
echo "The password for $USER has expired"
echo "$USER last changed their password on $LSTCNG"
echo "The maximum age for the password is $MAX days"
echo "and it has expired $EXPIRE days ago"
}
CheckUser()
{
USER=$1
EMAIL=$2
CURRENT_EPOCH=`grep $USER /etc/shadow | cut -d: -f3`
if [ "$CURRENT_EPOCH" = "" ]; then
return
fi
# Find the epoch time since the user's password was last changed
EPOCH=`perl -e 'print int(time/(60*60*24))'`
# Compute the age of the user's password
AGE=`echo $EPOCH - $CURRENT_EPOCH | bc`
# Compute and display the number of days until password expiration
MAX=`grep $USER /etc/shadow | cut -d: -f5`
if [ "$MAX" = "" ]; then
return
fi
EXPIRE=`echo $MAX - $AGE | bc`
CHANGE=`echo $CURRENT_EPOCH + 1 | bc`
LSTCNG="`perl -e 'print scalar localtime('$CHANGE' * 24 *3600);'`"
WARN=`grep $USER /etc/shadow | cut -d: -f6`
if [ "$WARN" = "" ]; then
WARN=0
fi
if [ "$EXPIRE" -le "$WARN" ]; then
show "R E M I N D E R" reminder
SendMail "$USER Password Info On `uname -n`" "$EMAIL"
elif [ "$EXPIRE" -lt 0 ]; then
show "E X P I R E D" expired
SendMail "WARNING: $USER Password Expired On `uname -n`" "$EMAIL"
fi
}
# Main Code
domain=$1
if [ "$domain" = "" ]; then
domain=$(dnsdomainname)
fi
minuid=$2
if [ "$minuid" = "" ]; then
minuid=500
fi
IFS=':'
while read user pass uid gid full home shell
do
if [ $uid -ge $minuid ]; then
cat /dev/null > $LOG
CheckUser $user "\"$full\" <$user@$domain>"
fi
done </etc/passwd