Red Hat 6.x / CentOS 6.x
Teorię konfiguracji modułów PAM poznaliśmy przy okazji tekstu Pluggable authentication modules (PAM) - składnia i konfiguracja, więc czas wykorzystać te informacje w praktyce.Najpopularnijszym bodaj modułem PAM, a zarazem pierwszym z jakim miałem styczność jest moduł pam_cracklib.so, dzięki któremu możemy w naszym systemie definiować polityki dotyczące wymogów, jakie muszą spełniać hasła użytkowników.
Moduł ten jest domyślnie załadowany do systemu poprzez moduły /etc/pam.d/password-auth oraz /etc/pam.d/system-auth, ale konfiguracja jego jest bardzo uboga:
password requisite pam_cracklib.so try_first_pass retry=3 type=
Oznacza to, że pozytywne przejście modułu jest wymagane dla typu password. Jak widzimy moduł jest wywołany z trzema opcjami:
* try_first_pass - ta opcja przed spytaniem użytkownika o hasło sprawdzi, czy wcześniej zastackowane hasło nie będzie wystarczające do autoryzacji. Przy zmianie hasła chyba nie wykorzystywane
* retry=3 - określa ile razy zapytać o hasło przed zwróceniem błędu
* type= funkcja jest aliasem dla authok_type, a odpowiada za wyświetlenie części prompta zmiany hasła. Wartość nie powinna zawierać spacji. Wartość pojawi się w postaci: "New WARTOSC_ZE_ZMIENNEJ_TYPE password:" oraz "Retype new WARTOSC_ZE_ZMIENNEJ_TYPE password:" przy próbue zmiany hasła.
Jak widać, żadna z opcji nie określa warunków, jakie hasło powinno spełniać, dlatego pozwolę sobie wymienić i wdrożyć kilka najprzydatniejszych z nich. Zmiany opcji, aby mieć pewność prawidłowego działania nowych reguł należy wdrożyć w obu plikach, tj: password-auth oraz system-auth.
Opcje weryfikacji wymogów dla haseł
Wszystkich z poniższych opcji możemy używać jednocześnie, umieszczając je po sobie oddzielone spacją.* difok=N - użycie opcji wymusza ilość znaków, którymi nowo podane hasło musi różnić się od starego hasła (domyślnie jest to 5)
Konfiguracja:
password requisite pam_cracklib.so try_first_pass retry=3 type= difok=3
Działanie:
-bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:1qaz@WSX
New password:1qaz@WDC
BAD PASSWORD: is too similar to the old one
New password:1qaz#EDC
Retype new password:1qaz#EDC
passwd: all authentication tokens updated successfully.
Changing password for user test.
Changing password for test.
(current) UNIX password:1qaz@WSX
New password:1qaz@WDC
BAD PASSWORD: is too similar to the old one
New password:1qaz#EDC
Retype new password:1qaz#EDC
passwd: all authentication tokens updated successfully.
* lcredit=N
* ucredit=N
* dcredit=N
* ocredit=N
Wymienione powyżej opcje determinują maksymalną ilość tzw. znaków kredytowych w haśle.Znakami tymi są odpowiednio:
l (lowercase) - małe litery
u (uppercase) - duże litery
d (digits) - cyfry
o (other) - znaki specjalne
Ważną właściwością tych opcji jest to, że określają maksymalną, a nie jak by mogło się wydawać naturalne minimalną ilość znaków danego typu w haśle. Szczęśliwie opcaj przyjmuje wartości ujemne odwracając swoje działanie, dlatego jeśli chcemy zdefiniować minimalną wymaganą ilość znaków danego typu wrtość opcji ustawiamy na wartość ujemną (np. ucredut=-3 spowoduje, że w haśle będą musiały wystąpić conajmniej 3 duże litery). Komunikat o niespełnieniu wymagań nie mówi niestety nic o wymogach jakie podawane hasło powinno spełniać. Dla przykładowej konfiguracji:
password requisite pam_cracklib.so try_first_pass retry=3 type= ucredit=-1 dcredit=-2
moduł będzie wymagał minimum 1 dużej litery oraz 2 cyfr. Komunikat przy niepoprawnym haśle będzie mówił:
bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: smallitblog
BAD PASSWORD: is too simple
New password: sma11itBlog
Retype new password:
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: smallitblog
BAD PASSWORD: is too simple
New password: sma11itBlog
Retype new password:
* minlen=N - określa jakiej minimalnie długości ma być hasło. Na pozór zastosowanie okazuje się być oczywiste i proste, ale.... moim zdaniem jest to najbardziej "skopana" opcja modułu. Czemu? Już odpowiadam. W podstawowej konfiguracji, np:
password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=12
bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: tooshort
BAD PASSWORD: is too simple
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: tooshort
BAD PASSWORD: is too simple
Jak się okazuje hasło długości 11 znaków, np: smallitblog będzie wystarczające do spełnienia wymagań modułu. Jest to pierwsza z ingerencji samego modułu w wymaganą długość hasła - jeśli w konfiguracji poza definicją samej minlen nie będziemy wymagać kilku klas kredytowych moduł zmniejszy wymaganą długość hasła o 1 w stosunku do zdeklarowanej przez nas.
Kolejna ingerencja w długość dotyczy również znaków kredytowych. Jeśli przy powyższej konfiguracji w naszym haśle uwzględnimy inne niż lcredit klasy kredytowe, to każda z zastosowanych klas skróci nam wymaganą długość hasła o 1, np:
- hasło smallitblog przejdzie weryfikację dla wymaganej minimalnej długości 12 znaków
- hasło Smallitblog przejdzie weryfikację dla 13 znaków, gdyż zastosowaliśmy jedną dodatkową klasę - dużą literę
- hasło Smallitblo6 przejdzie weryfikację dla 14 znaków. Zastosowaliśmy 2 dodatkowe klasy - dużą literę oraz cyfrę
- hasło Sm@llitblo6 będzie poprawne dla 15 znakowego limitu, gdyż użyliśmy wszystkich klas kredytowych - małej i dużej litery, cyfry oraz znaku specjalnego.
Przy okazji tej opcji trzeba wspomnieć o jeszcze jednej istotnej rzeczy. Cracklib ma hardkodowany drugi limit minimalnej długości 6 znaków dla hasła, który jest sprawdzany bez względu na wartość podaną przez zmienną minlem, więc jeśli chcesz używać haseł krótszych, będziesz musiał całkowicie wyłączyć weryfikację przez cracklib.
* maxrepeat=N - opcja określa maksymalną ilość powtórzeń tego samego znaku w haśle. Domyślnie ma ona wartość 0, czyli nie jest sprawdzana.
password requisite pam_cracklib.so try_first_pass retry=3 type= maxrepeat=1
bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: smallitblog
BAD PASSWORD: contains too many same characters consecutively
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: smallitblog
BAD PASSWORD: contains too many same characters consecutively
* minclass=N - przy pomocy tej opcji możemy wymucić na użytkowniku użycie kilku klas znaków, przy czym nie jest brana pod uwaę ilość znaków z danej klasy, a jedynie jej wystąpienie.
password requisite pam_cracklib.so try_first_pass retry=3 type= minclass=3
bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: SmallItBlog
BAD PASSWORD: not enough character classes
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: SmallItBlog
BAD PASSWORD: not enough character classes
* reject_username - nie pozwoli w haśle użyć nazwy użytkownika
password requisite pam_cracklib.so try_first_pass retry=3 type= reject_username
bash-4.1$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: test123
BAD PASSWORD: it is based on your username
Changing password for user test.
Changing password for test.
(current) UNIX password:
New password: test123
BAD PASSWORD: it is based on your username
* enforce_for_root - ta opcja wymusi na użytkowniku root spełnienie warunków jakie zdeklarowano dla haseł. Domyślnie root może ustawić dowolne hasło dla dowolnego usera.
Brak komentarzy:
Prześlij komentarz