Script bash per generare password da dizionario per un di elenco utenti

A volte si ha l'esigenza, avendo un elenco di persone, di generare in automatico un elenco di utenti con relative password.

Per quanto riguarda le password, si vuole fare in modo che siano facilmente ricordabili ma allo stesso tempo abbastanza sicure e difficilmente attaccabili da un eventuale attacco brute force.

Affinchè siano facilmente ricordabili è comodo che siano parole da dizionario, mentre per renderle abbastanza sicure è bene che siano formate da almeno 2 o 3 parole che aumenta enormemente le combinazioni possibili.

Per avere un idea della validità della password esistono molti siti online che danno una stima di tempo per scoprirla, uno di questi è quello di Kaspersky.

Ad esempio, se la password è piovere, è veramente facile da scoprire con un attacco brute force, all'incirca 8 secondi con un normale PC:

password debole

se aggiungiamo una seconda parola, piovere svagava, aumenta di molto il tempo portandolo a secoli per un normale PC e, stando a quanto dice Kaspersky, circa 7 giorni per il supercomputer più potente del mondo, il cinese Tianhe-2:

password debole

siccome non ci va che i cinesi (ne nessun altro abbia un supercomputer) scoprano la nostra password, aggiungiamo un ulteriore parola: piovere svagava esportai.
Ora possiamo dire di avere una password facile da ricordare ma anche abbastanza sicura perfino da un attacco brute force fatto con Tianhe-2:

password forte

A questo punto non resta che farci uno script per generare password casuali da dizionario. Su Linux sono già presenti dei dizionari nel percorso /usr/share/dict/ ma se ne possono trovare molti altri in internet.

Supponendo di avere un file dictionary.txt contenente 60453 parole, possiamo creare uno script chiamato generate_random_password con il seguente codice:

#!/bin/bash

generate_random() {
    RANDOM_NUMBER=`/usr/bin/perl -e 'print int(rand(60453));'`
}

generate_random
randomWord1=`head -$RANDOM_NUMBER ./dictionary.txt | tail -1`

generate_random
randomWord2=`head -$RANDOM_NUMBER ./dictionary.txt | tail -1`

generate_random
randomWord3=`head -$RANDOM_NUMBER ./dictionary.txt | tail -1`

echo "$randomWord1 $randomWord2 $randomWord3"

Provando ad eseguirlo nel seguente modo

./generate_random_password

si dovrebbe ottenere come output un elenco casuale di 3 parole.

Ora non resta che creare il file degli utenti che volevamo all'inizio.

Supponiamo di avere il seguente elenco di persone in un file CSV:

FINARDI;PAOLO
GARIBALDI;GIUSEPPE
MAZZINI;GIUSEPPE
PAPERINO;PAOLINO
CHE GUEVARA;ERNESTO
WASHINGTON;GEORGE
LINCOLN;ABRAHAM
TSE TUNG;MAO
D'ALESSANDRO;MARCO

vorremmo ottenere un file CSV in output con le seguente struttura:

  • UserName: composto dalla prima lettera del nome (FirstName) e dall'intero cognome (LastName) senza spazi od apostrofi, tutto minuscolo
  • Cognome (LastName)
  • Nome (FirstName)
  • Gruppo di dominio: fisso "domusers"
  • Password: formata da 3 parole casuali da dizionario

Lo script, che chiameremo generate_users, avrà il seguente codice:

#!/bin/bash

# Eseguibile che genera password random
PwdGen="./generate_random_password"

# definisco il separatore del CSV
IFS=";"

while read LastName FirstName
do

    # Genera una password random
    Pwd=$($PwdGen)

    # converto nome e cognome in minuscolo
    FirstNameLC=${FirstName,,}
    LastNameLC=${LastName,,}

    # elimino spazi e apostrofi (') dal cognome
    LastNameLC="$(echo -e "$LastNameLC" | tr -d '[[:space:]]')"
    LastNameLC="$(echo -e "$LastNameLC" | tr -d \')"

    # ...altre info
    UserName=${FirstNameLC:0:1}$LastNameLC
    Group=domusers

    # output dati utente nel file user_out.csv
    echo $UserName,$LastName,$FirstName,$Group,$Pwd

done < users_in.csv > users_out.csv

Eseguendo lo script nel seguente modo:

./generate_users

otterremo il file users_out.csv con il seguente contenuto:

pfinardi,FINARDI,PAOLO,domusers,biasimi frequento affettavi
ggaribaldi,GARIBALDI,GIUSEPPE,domusers,affiaterai universi vesti
gmazzini,MAZZINI,GIUSEPPE,domusers,avvicini sognerebbe barassi
ppaperino,PAPERINO,PAOLINO,domusers,spill danzaste schedario
echeguevara,CHE GUEVARA,ERNESTO,domusers,cercando crollava ammireremo
gwashington,WASHINGTON,GEORGE,domusers,durereste slittare insacchera
alincoln,LINCOLN,ABRAHAM,domusers,bruscolo fiaccati truccano
mtsetung,TSE TUNG,MAO,domusers,spezzerete fascerete alterno
mdalessandro,D'ALESSANDRO,MARCO,domusers,badano stillando sboccia

ovviamente, ad ogni esecuzione le password cambierebbero.

Spero possa essere utile come lo è stato per me 😉

Potrebbero interessarti anche i seguenti articoli:

(Letto 683 volte di cui 1 negli ultimi 30gg)
twitterlinkedinmailby feather

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *