Jak skonfigurować uwierzytelnianie dwuskładnikowe na Raspberry Pi

Photo of author

By maciekx

Raspberry Pi stał się niezwykle popularny, co przyciągnęło uwagę cyberprzestępców oraz zagrożeń. W tym artykule przedstawimy, jak wprowadzić dwuskładnikowe uwierzytelnianie, aby zwiększyć bezpieczeństwo Twojego urządzenia.

Cudowny świat Raspberry Pi

Raspberry Pi to jednopłytkowy komputer, który został uruchomiony w Wielkiej Brytanii w 2012 roku. Jego celem było zachęcenie dzieci do nauki programowania oraz tworzenia własnych projektów. Oryginalny model miał wielkość karty kredytowej i był zasilany przez standardową ładowarkę do telefonu.

Komputer ten oferuje wyjście HDMI, porty USB i łączność sieciową oraz obsługuje system Linux. W późniejszych wersjach pojawiły się mniejsze modele, przeznaczone do integracji w produktach lub jako systemy bezgłowe. Ceny zaczynają się od 5 USD za minimalistyczny model Pi Zero, a sięgają 75 USD za Pi 4 B / 8 GB.

Raspberry Pi odniósł ogromny sukces, sprzedając ponad 30 milionów egzemplarzy na całym świecie. Entuzjaści stworzyli z nim wiele inspirujących projektów, jak np. wystrzelenie w kierunku granicy kosmosu na balonie.

Jednakże, rosnąca popularność platformy przyciąga również uwagę cyberprzestępców. Niepokojące jest, że wiele osób korzysta z domyślnych nazw użytkowników i haseł. Jeśli Twoje Pi jest dostępne w Internecie przez Secure Shell (SSH), konieczne jest wprowadzenie środków bezpieczeństwa.

Nawet jeśli na Twoim Pi nie przechowujesz żadnych wrażliwych danych, powinno być zabezpieczone, ponieważ może stać się punktem dostępu do Twojej sieci. Gdy cyberprzestępca zyska dostęp do Twojego urządzenia, może przejść do innych, bardziej wartościowych zasobów w Twojej sieci.

Czym jest uwierzytelnianie dwuskładnikowe?

Uwierzytelnianie to proces uzyskiwania dostępu do systemu i wymaga przynajmniej jednego elementu. Możemy wyróżnić trzy kategorie składników:

  • Coś, co wiesz: np. hasło lub fraza.
  • Coś, co masz: np. telefon komórkowy, token lub klucz sprzętowy.
  • Coś, czym jesteś: np. odcisk palca lub skan siatkówki.

Uwierzytelnianie wieloskładnikowe (MFA) wymaga hasła oraz co najmniej jednego elementu z innych kategorii. W tym przypadku użyjemy hasła oraz telefonu komórkowego. Telefon uruchomi aplikację Google Authenticator, podczas gdy Raspberry Pi będzie korzystać z modułu uwierzytelniania Google.

Aplikacja na telefonie łączy się z Twoim Pi poprzez zeskanowanie kodu QR, co pozwala na synchronizację algorytmów generujących kody. Wygenerowane kody to hasła jednorazowe oparte na czasie (TOTP).

Podczas próby połączenia, Raspberry Pi generuje kod. Używasz aplikacji na telefonie, aby odczytać aktualny kod, a następnie Pi poprosi Cię o podanie hasła oraz kodu uwierzytelniającego. Oba muszą być poprawne, aby uzyskać dostęp.

Jak skonfigurować Raspberry Pi?

Przypuszczalnie korzystasz z SSH na Raspberry Pi, co oznacza, że jest to system bezgłowy. W związku z tym skonfigurujemy go przez połączenie SSH.

Najlepiej jest wykonać dwa połączenia SSH: jedno do konfiguracji, a drugie jako zabezpieczenie. Dzięki temu, jeśli przypadkowo zablokujesz dostęp do jednego połączenia, drugie pozostanie aktywne. Zmiany w ustawieniach SSH nie wpłyną na trwające połączenie, co pozwala na cofnięcie niepożądanych zmian.

W przypadku całkowitego zablokowania dostępu przez SSH, można podłączyć Raspberry Pi do monitora, klawiatury i myszy, aby zalogować się w tradycyjny sposób. Możesz również pozostawić jedno połączenie SSH jako zabezpieczenie, dopóki nie upewnisz się, że uwierzytelnianie dwuskładnikowe działa poprawnie.

Ostatecznością jest ponowna instalacja systemu operacyjnego na karcie micro SD Pi, ale lepiej tego unikać.

Najpierw nawiążmy nasze dwa połączenia z Pi. Wprowadź poniższe polecenie:

ssh pi@watchdog.local

Nazwa Twojego Pi to „watchdog”, ale wpisz swoją nazwę. Jeśli zmieniłeś domyślną nazwę użytkownika, użyj jej; w naszym przypadku to „pi”.

Pamiętaj, aby dla bezpieczeństwa wpisać to polecenie w dwóch różnych oknach terminala, aby mieć dwa połączenia z Twoim Pi. Zminimalizuj jedno z nich, aby nie przeszkadzało i nie zostało przypadkowo zamknięte.

Po nawiązaniu połączenia zobaczysz powitanie. Monit wyświetli nazwę użytkownika (w tym przypadku „pi”) oraz nazwę Pi (w tym przypadku „watchdog”).

Musisz edytować plik „sshd_config”. Użyj do tego edytora tekstu nano:

sudo nano /etc/ssh/sshd_config

Przewiń plik do momentu znalezienia następującego wiersza:

ChallengeResponseAuthentication no

Zmień „no” na „yes”.

Naciśnij Ctrl + O, aby zapisać zmiany, a następnie Ctrl + X, aby zamknąć plik. Wpisz poniższe polecenie, aby zrestartować demona SSH:

sudo systemctl restart ssh

Kolejnym krokiem jest zainstalowanie Google Authenticator, co jest częścią modułu PAM (Pluggable Authentication Module). Aplikacja SSH wywołuje interfejs Linux PAM, który znajdzie odpowiedni moduł do obsługi żądanego typu uwierzytelnienia.

Wpisz poniższe polecenie:

sudo apt-get install libpam-google-authenticator

Instalacja aplikacji

Google Authenticator jest dostępny na iPhone oraz Android. Zainstaluj odpowiednią wersję dla swojego urządzenia. Możesz również skorzystać z Authy lub innych aplikacji, które obsługują ten typ kodu uwierzytelniającego.

Konfiguracja dwuskładnikowego uwierzytelniania

Zaloguj się na swoje konto, którego używasz do połączenia z Pi przez SSH i uruchom poniższe polecenie (bez przedrostka sudo):

google-authenticator

Pojawi się pytanie, czy chcesz, aby tokeny były oparte na czasie; naciśnij Y, a następnie Enter.

Generowany jest kod QR, ale może być zaszyfrowany, ponieważ jest szerszy niż 80-kolumnowe okno terminala. Rozszerz okno, aby zobaczyć cały kod.

Pod kodem QR znajdziesz również kilka kodów bezpieczeństwa, które są zapisywane w pliku „.google_authenticator”. Warto je skopiować, na wypadek gdybyś utracił dostęp do TOTP (np. w przypadku zgubienia telefonu).

Musisz odpowiedzieć na cztery pytania, zaczynając od:

Do you want me to update your "/home/pi/.google_authenticator" file? (y/n)

Naciśnij Y, a następnie Enter.

Następne pytanie dotyczy tego, czy chcesz zapobiec wielokrotnemu używaniu tego samego kodu w ciągu 30-sekundowego okna. Naciśnij Y, a następnie Enter.

Trzecie pytanie dotyczy rozszerzenia okna akceptacji tokenów TOTP. W odpowiedzi naciśnij N, a następnie Enter.

Ostatnie pytanie brzmi: „Czy chcesz włączyć ograniczanie prędkości?” Naciśnij Y, a następnie Enter.

Powrócisz do wiersza poleceń. Jeśli to konieczne, rozciągnij okno terminala i/lub przewiń w górę, aby zobaczyć cały kod QR.

Na telefonie otwórz aplikację uwierzytelniającą, a następnie kliknij znak plus (+) w prawym dolnym rogu. Wybierz „Zeskanuj kod QR” i zeskanuj kod z terminala.

Nowy wpis pojawi się w aplikacji uwierzytelniającej, a jego nazwa będzie odpowiadać nazwie hosta Pi. Obok będzie widoczny sześciocyfrowy kod TOTP, który należy wpisać jako jedną liczbę, bez spacji.

Animowane kółko obok kodu informuje o czasie ważności kodu: pełne kółko to 30 sekund, półkole to 15 sekund i tak dalej.

Integracja wszystkich elementów

Musimy jeszcze raz edytować jeden plik, aby powiedzieć SSH, którego modułu uwierzytelniania PAM użyć:

sudo nano /etc/pam.d/sshd

Wprowadź poniższe wiersze na początku pliku:

#2FA

auth required pam_google_authenticator.so

Możesz również wybrać, kiedy chcesz być proszony o podanie TOTP:

  • Po wprowadzeniu hasła: wprowadź wcześniej wspomniane wiersze poniżej „@include common-auth”.
  • Przed wprowadzeniem hasła: wprowadź wcześniejsze wiersze powyżej „@include common-auth”.

Pamiętaj, aby używać podkreśleń (_) w „pam_google_authenticator.so” zamiast myślników (-), które były używane w poleceniu apt-get do instalacji modułu.

Naciśnij klawisze Ctrl + O, aby zapisać zmiany, a następnie Ctrl + X, aby zamknąć edytor. Musimy ostatni raz zrestartować SSH:

sudo systemctl restart ssh

Rozłącz to połączenie SSH, ale pozostaw inne aktywne połączenie SSH z siecią bezpieczeństwa, aż nie zweryfikujesz następnego kroku.

Upewnij się, że aplikacja uwierzytelniająca na telefonie jest gotowa, a następnie otwórz nowe połączenie SSH z Pi:

ssh pi@watchdog.local

Powinieneś zostać poproszony o podanie hasła oraz kodu. Wprowadź kod z telefonu komórkowego jako jedną, sześciocyfrową liczbę, bez spacji. Nie będzie on wyświetlany na ekranie.

Jeśli wszystko przebiegło pomyślnie, powinieneś mieć dostęp do Pi; jeśli nie, skorzystaj z połączenia SSH z siecią bezpieczeństwa, aby sprawdzić poprzednie kroki.

Lepiej dmuchać na zimne

Czy zauważyłeś, że „r” w słowie „bezpieczniejsze” jest wyraźniejsze?

Tak, teraz jesteś znacznie bezpieczniejszy podczas łączenia się z Raspberry Pi, ale nic nie jest całkowicie odporne na ataki. Istnieją metody, które mogą obejść uwierzytelnianie dwuskładnikowe, polegające na inżynierii społecznej, atakach typu man-in-the-middle czy zamianie kart SIM, ale nie będziemy ich omawiać.

Dlaczego warto się tym zajmować, skoro nie ma idealnych zabezpieczeń? Odpowiedź jest taka sama, jak powód, dla którego zamykasz drzwi, gdy wychodzisz – większość ludzi nie potrafi ich otworzyć, nawet jeśli są tacy, którzy potrafią.


newsblog.pl