Dwuskładnikowe uwierzytelnianie dla root'a
Kategoria: Artykuły, etykiety: uwierzytelnianie, root, pendrive, pam-usb
Dodany: 2014-07-29 18:38
(zmodyfikowany: 2014-07-29 18:45)
Przez: morfik
Wyświetleń: 8475
Ostatnio natknąłem się na narzędzie libpam-usb , które to w dość ciekawy sposób zabezpiecza dostęp do konta użytkownika root. Cały mechanizm opiera się o pendrive, którego to unikalne cechy są brane pod uwagę przy uwierzytelnianiu podczas logowania się na konto super użytkownika, czyli min. gdy wydajemy polecenia su albo sudo.
Mechanizm pam-usb daje nam dwie możliwości, z których pierwsza zakłada wykorzystanie pendrive'a jako dodatkowego zabezpieczenia, czyli potrzebne będzie hasło do konta root oraz wymagana będzie obecność pendrive'a w porcie usb. Drugą opcją jest obejście hasła do konta root w przypadku obecności tego konkretnego pendrive'a w porcie usb komputera. Ten drugi sposób może ułatwić trochę życie ale trzeba wziąć pod uwagę, że w przypadku braku pendirve'a, zalogowanie na konto root będzie możliwe po podaniu hasła, czyli tak jak w przypadku standardowego logowania się na konto administratora systemu.
Przede wszystkim musimy doinstalować odpowiednie paczuszki:
# aptitude install libpam-usb pamusb-tool
Teraz odpalamy pam-auth-update i zaznaczamy pozycję USB authentication:
┌──────────────────┤ PAM configuration ├───────────────────┐
│ PAM profiles to enable: │
│ │
│ [*] USB authentication │
│ [ ] encfs encrypted home directories │
│ [*] Unix authentication │
│ [ ] Mount volumes for user │
│ [*] GNOME Keyring Daemon - Login keyring management │
│ [*] ConsoleKit Session Management │
│ [*] Inheritable Capabilities Management │
│ <Ok> <Cancel> │
│ │
└──────────────────────────────────────────────────────────┘
Przy pomocy narzędzia pamusb-conf konfigurujemy moduł pam-usb. Wkładamy zatem pendraka do portu usb i wydajemy poniższe polecenie:
# pamusb-conf --add-device=pendrak
Please select the device you wish to add.
* Using "Kingston DT 101 G2 (001CB0EC34A2BC318709104B)" (only option)
Which volume would you like to use for storing data ?
0) /dev/sdb5 (UUID: 9365d879-1715-4346-8fc0-7674684765e7)
1) /dev/sdb6 (UUID: <UNDEFINED>)
2) /dev/sdb4 (UUID: <UNDEFINED>)
3) /dev/sdb1 (UUID: 6bf4d915-2b62-444e-a2c8-16307769b5c2)
4) /dev/sdb2 (UUID: 90ec6f73-8fdb-4c8d-aebd-cadd0f51b412)
5) /dev/sdb3 (UUID: 0dd5e51c-c133-492a-a6ca-d14e0c7d1e39)
[0-5]: 5
Name : pendrak
Vendor : Kingston
Model : DT 101 G2
Serial : 001CB0EC34A2BC318709104B
UUID : 0dd5e51c-c133-492a-a6ca-d14e0c7d1e39
Save to /etc/pamusb.conf ?
[Y/n] y
Done.
Można oczywiście ręcznie edytować plik /etc/pamusb.conf ale lepiej jest korzystać z przeznaczonych do tego celu narzędzi, bo uchroni nas to przez popełnieniem literówek i innych drobnych błędów.
Definiujemy teraz użytkownika, który będzie podlegał pod moduł pam-usb -- w tym przypadku jest to root:
# pamusb-conf --add-user=root
Which device would you like to use for authentication ?
0) bohun
1) pendrak
[0-1]: 1
User : root
Device : pendrak
Save to /etc/pamusb.conf ?
[Y/n] y
Done.
Plik konfiguracyjny powinien zostać uzupełniony o odpowiednie wpisy, zawsze można go podejrzeć i sprawdzić czy aby wszystko jest tak jak być powinno.
Jeśli w tej chwili spróbowalibyśmy się zalogować na kontro użytkownika root, powinniśmy zobaczyć poniższy log:
morfik:~$ su
* pam_usb v0.5.0
* Authentication request for user "root" (su)
* Device "pendrak" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Access granted.
root:~#
Jak widzimy wyżej, dostęp został przyznany bez proszenia o hasło, bo pendrive jest podpięty. Jeśli odłączymy teraz pendrive i ponownie spróbujemy się zalogować, powinniśmy zostać poproszeni o hasło:
morfik:~$ su
* pam_usb v0.5.0
* Authentication request for user "root" (su)
* Device "pendrak" is not connected.
* Access denied.
Password:
root:~#
Jeśli chcemy z modułu pam-usb uczynić dodatkowe zabezpieczenie działające na zasadzie dwuskładnikowego uwierzytelniania, musimy wyedytować plik /etc/pam.d/common-auth i zmienić w nim linijkę z:
auth sufficient pam_usb.so
na:
auth required pam_usb.so
Po zapisaniu zmian, nie da rady zalogować się już na konto roota bez uprzedniego podpięcia pendrive'a, nawet po poprawnym podaniu hasła:
morfik:~$ su
* pam_usb v0.5.0
* Authentication request for user "root" (su)
* Device "pendrak" is not connected.
* Access denied.
Password:
su: Authentication failure
Opcja dwuskładnikowego uwierzytelniania skutecznie może nas ochronić przed wszystkimi atakami zdalnymi zakładającymi wykorzystanie hasła podczas uzyskiwania dostępu do konta root. Trzeba jednak uważać na jedną rzecz -- jednym z parametrów pendrive branym pod uwagę w procesie uwierzytelniania jest UUID wskazanej partycji. Jeśli ten numerek ulegnie zmianie, np. w skutek tworzenia nowego systemu plików, stracimy dostęp do konta root i trzeba będzie ratować się systemem live.
Pisane na podstawie https://github.com/aluzzardi/pam_usb/wiki/Getting-Started .