mercoledì 17 dicembre 2008

Modificare automaticamente la data di scadenza password su Ubuntu/Samba-LDAP

Se si ha un sistema di gestione account basato su LDAP tramite gli smbldap tools è possibile editare automaticamente tutti gli account per modificare la data di scadenza password. Il seguente script accetta come parametro (opzionale) un numero di anni per i quali la password non deve scadere, dopodiché calcola la data di nuova scadenza della password e ricerca tutti gli utenti (Users) nel sistema LDAP per poi modifcarne la data di scadenza tramite smbldap-usermod:

#!/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.

1 commento:

Mimmo ha detto...

Salve,
premetto che mi sto affacciando da poco sul mondo Linux, quindi non sono molto skillato.

Ho messo su un server Linux distribuzione UBUNTU con SAMBA per creare un piccolo dominio composto da 4 macchine Windows XP.

Tutto funziona correttamente. A me interessava in primo luogo il roaming profile e devo dire che con l'accoppiata Linux/Samba ho trovato una soluzione ottimale.

Adesso però ho la necessità che gli account delle macchine cambino la loro password ogni 3 mesi.

Io non ho usato LDAP per i profili, ma i metodi standard basati su file e cartelle con i comandi useradd ecc.. e smbpasswd ecc..

posso comunque abilitare il cambio di password periodico?