#!/bin/bash
# considero che incremento di anno ho, se non ne ho nessuno
# allora incremento di default di 4 anni
YEAR_INCREMENT=$1
if [ -z "$YEAR_INCREMENT" ]
then
YEAR_INCREMENT=4
fi
DATE_CMD=`which date`
CURRENT_YEAR=`$DATE_CMD +'%Y'`
FINAL_YEAR=$(( CURRENT_YEAR + YEAR_INCREMENT ))
EXPIRE_DATE="${FINAL_YEAR}-12-31"
echo "Verra' impostata la data di password expiration per $EXPIRE_DATE"
PWD_CMD=`which smbldap-usermod`
PWD_OPTIONS=" --shadowExpire $EXPIRE_DATE --shadowMax 700"
SEARCH_CMD=`which ldapsearch`
SEARCH_OPTIONS=" -x uid "
GREP_CMD=`which grep`
GREP_OPTIONS=" uid:"
AWK_CMD=`which awk`
AWK_OPTIONS="'{print \$2;}' "
EVAL_CMD="eval"
SUCCESSES=0
FAILURES=0
for utente in `$EVAL_CMD "$SEARCH_CMD $SEARCH_OPTIONS | $GREP_CMD $GREP_OPTIONS | $AWK_CMD $AWK_OPTIONS" `
do
echo -en "Processo utente <$utente>..."
$PWD_CMD $PWD_OPTIONS $utente > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo -en "ok\n"
SUCCESSES=$(( SUCCESSES + 1 ))
else
echo -en "KO\n"
FAILURES=$(( FAILURES + 1 ))
fi
done
echo -en "\n\n\nFinito:\n\t $SUCCESSES processati correttamente,\n\t $FAILURES falliti\n"
Si noti che siccome la ricerca dei vari uid avviene tramite una ricerca ldap, filtrata da awk, occorre usare un eval per l'esecuzione del comando per impedire alla shell di interpretare male i caratteri di comando awk.
Lo script di cui sopra mostra poi il risultato della sua esecuzione informando l'utente del numero di utenti modificati e di quelli in cui il comando è fallito.
Sebbene sia consigliabile la modifica delle password periodica, un simile script è utile per quegli ambienti dove gli utenti si autenticano in modo automatico tramite chiavi SSH, e quindi dove non sono interessati a mantenere la propria password che può quindi essere modificata in automatico da un amministratore o da una procedura automatizzata.