W celu zwiększenia bezpieczeństwa dostępu poprzez protokół SSH do serwera Rootbox można wykorzystać dwuetapowe uwierzytelnianie. Idea rozwiązania polega na połączeniu "czegoś co wiesz", w tym przypadku będzie to login i hasło a także "czegoś co posiadasz" czyli w tym przypadku urządzenia np. smartfona, tabletu lub komputera z zainstalowanym narzędziem generującym co minutę unikatowy 6-cyfrowy kod w standardzie , który należy wpisać tuż po zalogowaniu się z użyciem standardowego loginu i hasła. Poniżej przedstawimy jak skonfigurować dwuetapowe uwierzytelnianie dla systemu Linux Debian 7 Wheezy.

UWAGA! Użytkownicy, którzy nie mają skonfigurowanego uwierzytelniania dwuetapowego nie będą mogli zalogować się do serwera poprzez SSH!

W pierwszej kolejności instalujemy moduł Google Authenticator PAM. Ponieważ wymaganego pakietu nie ma w oficjalnym repozytorium należy pobrać go ręcznie. W tym celu wykonujemy:

wget http://ftp.us.debian.org/debian/pool/main/g/google-authenticator/libpam-google-authenticator_20130529-2_amd64.deb

A następnie instalujemy wymagane pakiety:

apt-get install libqrencode3
dpkg -i libpam-google-authenticator_20130529-2_amd64.deb

Po wykonaniu instalacji możemy przejść do konfiguracji modułu Google Authenticator PAM, wydajemy polecenie:

google-authenticator

Po wydaniu polecenia powinny pojawić się pytania i opcje konfiguracji.

Jako pierwsze pojawi się pytanie:

"Do you want authentication tokens to be time-based (y/n)"

Oczywiście potwierdzamy klawiszem "y". Po potwierdzeniu pojawi się kod QR, który można zeskanować za pomocą aplikacji GAuth/Google Authenticator w smartfonie lub tablecie a także manualny kod aktywacyjny (na obrazku oznaczony kolorem czerwonym) i seria kodów jednorazowych (na obrazu oznaczone kolorem zielonym). Kody jednorazowe są przydatne w momencie gdy nie posiadamy przy sobie urządzenia z aplikacją GAuth/Google Authenticator.

Zaznaczone dane podajemy w aplikacji na smartfonie, tablecie lub komputerze. Do przykładu użyliśmy aplikacji OAuth Authenticator dostępny pod adresem:

https://marketplace.firefox.com/app/gauth-authenticator/

Kod zaznaczony na powyższym obrazku wpisujemy do pola Secret key natomiast jako nazwe konta wpisujemy dowolną nazwę identyfikującą nasz serwer:

UWAGA! Dane te należy bezwględnie zachować! W przypadku ich utraty i zgubieniu urządzenia z aplikacją nie będziemy w stanie zalogować się do systemu za pomocą SSH!

Następnie pojawi się pytanie

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

Odpowiadamy twierdząco wpisując literę "y".

W kolejnym kroku pojawi się pytanie

"Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)".

Jeśli odpowiemy twierdząco, w przypadku pomyłki będziemy musieli poczekać 30 sekund przed kolejną próbą logowania. Odpowiadamy wedle uznaniem, jednak pamiętaj, że opcja ta ma na celu zwiększenie bezpieczeństwa.

Kolejne pytanie:

"By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)".

Jeśli odpowiemy twierdząco, kolejne kody będą generowane co 30 sekund, jest jednak możliwość zwiększenia tego czasu. Odpowiadamy wedle uznania, jednak zalecamy pozostawienie domyślnej wartości 30 sekund i odpowiedź "n".

Kolejny krok konfiguracji to pytanie:

"If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)"

Jeśli odpowiemy twierdząco, będziemy mieli 3 próby logowania co każde 30 sekund. Odpowiadamy wedle uznania, jednak zalecamy pozostawienie domyślnej wartości 3 prób co każde 30 sekund odpowiadając "y".

Po odpowiedzeniu na powyższe opcje pozostało już tylko skonfigurowanie serwera SSH. Za pomocą dowolnego edytora otwieramy plik /etc/pam.d/sshd.

vim /etc/pam.d/sshd

Dodajemy linię:

auth required pam_google_authenticator.so

Następnie otwieramy plik konfiguracyjny serwera SSH /etc/ssh/sshd_config

vim /etc/ssh/sshd_config

I wyszukujemy w nim linie:

ChallengeResponseAuthentication no

A następnie zmieniamy "no" na "yes" i zapisujemy plik:

ChallengeResponseAuthentication yes

Konfiguracja jest zakończona. Aby zmiany zadziałały trzeba jeszcze zrestartować proces ssh. W tym celu wykonujemy polecenie:

/etc/init.d/ssh restart

Od tej chwili możemy logować się za pomocą dwuetapowego uwierzytelniania. Poniżej widok z konsoli SSH podczas logowania oraz aplikacja GAuth Authenticator z wygenerowanym kodem.

Gratulacje! Konfiguracja dwuetapowego uwierzytelniania została zakończona!