MC, 16:18 piątek, 01.06.2012 r.
Ilustracja do artykułu: Linux urandom — Automatyczne generowanie haseł (silnych)

Linux urandom — Automatyczne generowanie haseł (silnych)

W tym artykule postaram się pokazać jak w prosty sposób generować losowe hasła na systemach Linux. Przygotujemy sobie również skrypt, który będzie wykonywał tę operację dla zadanej długości hasła, generując tyle ciągów znaków, o ile go poprosimy.

Po co generować hasła?

Automatyczne generowanie haseł może znacznie uprościć procedurę zakładania kont nowym użytkownikom. A okazuje się, że nic prostszego, ponieważ system Linux ma w swoim posiadaniu dwa wirtualne urządzenia generujące losowe bity. Są to /dev/random oraz /dev/urandom. Różnią się one tym, że /dev/urandom nie jest ograniczone rozmiarem bufora i można nim generować duże ilości znaków, choć o mniejszej losowości. Do generowania tymczasowych haseł nada się idealnie.

Jak generować hasła?

Najpierw zobaczmy co nam "wypluwa" urządzenie /dev/urandom:
$ head -n 1 /dev/urandom
���f��fFR�#�P��+�<�O���㦙Ei2[H�P
No cóż... z punktu widzenia tego, co chcemy osiągnąć, są to bitowe śmieci. Dlatego też zmuszeni jesteśmy wprowadzić pewną selekcję dopuszczalnych znaków. Posłużymy się do tego narzędziem grep. Oto lista parametrów tego programu, które mogą nam się przydać:
  • -E (extended regexp)
  • -i (ignorowanie rozmiaru liter)
  • -m <liczba> (ile ciągów ma znaleźć)
  • -o (zwrócenie tylko ciągu pasującego do wzorca, a nie całej linijki, w której został znaleziony)
  • -a (traktowanie pliku binarnego, a tak będzie widziane /dev/urandom, jako tekstu)
Załóżmy więc, że chcemy wygenerować jedno hasło złożone z pięciu znaków (liter i liczb). Wydajmy polecenie:
$ grep -Eaio -m 1 "[a-z0-9]{5}" /dev/urandom
2yQXU
Prawda, że proste? To wygenerujemy teraz 5 haseł po 10 znaków każde:
$ grep -Eaio -m 5 "[a-z0-9]{10}" /dev/urandom
W7qwQ5IRK9
XsGdCadYrC
WwjEbkILfy
bExdl1VjhM
RYcqkWodT3
Tym prostym sposobem jesteśmy w stanie generować hasła o zadanych parametrach, a co najważniejsze — automatycznie.

Czy można ten proces jeszcze usprawnić?

Jeśli wydaje nam się, że automatyczne generowanie haseł może być nam potrzebne dość często, to warto stworzyć sobie do tego skrypt, który jako parametry będzie przyjmował pożądane cechy — ich liczbę oraz długość ciągu. Tym sposobem będzie można wygodniej podpiąć nasz skrypt do innych skryptów/programów. Proponuję coś na kształt:
#!/bin/bash
# sapientisat.pl
# Przyjmuje dwa argumenty:
#1 - liczba haseł do wygenerowania
#2 - długość hasła

grep -Eaio -m $1 "[a-z0-9]{$2}" /dev/urandom

To jeszcze na koniec przykładowe wywołanie skryptu:

$ sh losujHasla.sh 10 7
vuzFRIl
cF2Zi31
xE88E9g
AomosM6
DneeVn7
vYpyMB7
b55mlO0
h1kJfAt
RUZAWSJ
qO7mMa9

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść:
Wersja angielska: Linux - How to automatically generate random passwords