Dažniausiai serverio terminalo galite
prisijungti naudodami slaptažodį arba naudojant
SSH raktus. Pats nesaugiausias būdas yra tieisog naudojant slaptažodį. SSH raktų naudojimas padidina prisijungimo saugumą. Tačiau Ubuntu serveris suteikia dar vieną saugią galimybę prisijungti prie serverio - dviguba autorizacija. Ši autorizacija veikia pasitelkiant
Google Authenticator programinę įrangą, kuri naudojama daugumoje didžiausių internetinių svetainių bei servisų. Dviguba autorizacija reikalauja įvesti prisijungimo slaptažodį/viešą raktą bei nuolatos kintančią 6 skaičių reikšmę, kuri pateikiama Google Authenticator programėlėje telefone ir yra paremta
TOTP algoritmu, kuris atitinka IETF standartą.
Šioje pamokoje pateiksime instrukciją, kaip susikonfigūruoti dviejų lygių autorizaciją naudojant patikimą Google autorizacijos algoritmą. Diegimas testuotas naudojant Ubuntu 20.04 OS, tačiau tinka ir naudojant senesnėms Ubuntu versijoms.
0. Preliminarūs reikalavimai
* Dedikuotas serveris su įdiegtu mūsų parengtu Ubuntu OS šablonu.
1. Google Authenticator diegimas bei konfigūravimas serveryje
Prisijunkite prie serverio ir paleiskite žemiau pateiktą komandą, kuri įrašys Google Authenticator programinę įrangą iš pagrindinės Ubuntu repozitorijos:
sudo apt install libpam-google-authenticator
Gali būti, kad sulauksite klaidos:
Unable to locate package libpam-google-authenticator
Tokiu atveju atlikite serverio atnaujinimą su komanda:
Atlikus atnaujinimus iš naujo paleiskite komandą "sudo apt install libpam-google-authenticator". Užbaigus diegimą paleiskite google-authenticator komandą tam, kad sukurtumėte naują saugų raktą namų direktorijoje:
Jums bus pateikiamas klausimas:
Do you want authentication tokens to be time-based (y/n)
Įveskite y raidę ir Jums bus sugeneruotas QR kodas:
Ši kodą galėsite nuskenuoti su programėle telefone. Tam atlikti rekomenduojame naudoti šias programėles:
* Google Authenticator - dažniausiai naudojama TOTP programėlė. Galite įdiegti ją naudojant Google Play ar Apple store platformas telefonu.
* FreeOTP - kadangi Google Authenticator programa nėra atvirojo kodo, todėl, jeigu ja nepasitikite galite naudotis FreeOTP atvirojo kodo TOTP programėle, kuri yra kurta Red Hat kūrėjų.
Atminkite, kad norėdami teisingai nuskenuoti QR kodą jis turi būti matomas visas, todėl gali tekti padidinti terminalo langą. QR kodas yra žinomas tik SSH serverio ir TOTP mobilios programėlės. Kai tik atliksite skenavimą aplikacijoje matysite šešių skaičių kodą telefonu. Standartiškai jis keičiasi kas 30 sekundžių. Šis kodas bus reikalingas norint prisijungti prie Ubuntu per SSH tarnybą.
Terminale žemiau QR kodo matysite sugeneruotą dvigubos autorizacijos kodą, patvirtinimo kodą ir atsarginius kodus. Rekomenduojame išsisaugoti šią informaciją ir laikyti saugioje vietoje.
Toliau į visus klausimus atsakykite įvedę y raidę. Taip atliksite konfigūracijos failo atnaujinimą, išjungsite daugkartinį tos pačios žymės (angl. token) naudojimą, prailginsite laikotarpė per kurį pasikeis kodas ir įjungsite prisijungimų ribojimą kai bandoma prisijungti prie serverio daugiau nei 3 kartus per 30 sekundžių su tuo pačiu kodu.
2. SSH Deamon konfigūracija Google Authenticator naudojimui
Atsidarykite SSH serverio konfigūracijos failą:
sudo nano /etc/ssh/sshd_config
Faile susiraskite žemiau pateiktas eilutes ir patikrinkite ar abi jos turi yes reikšmes:
ChallengeResponseAuthentication yes
UsePAM yes
PAM reiškia prijungiamas autorizacijos modulis (angl. pluggable authentication module). Šis modulis suteikia skirtingų autorizacijos metodų prijungimą prie Linux sistemos. Tam, kad galėtume aktyvuoti Google Authenticator su SSH, PAM ir Challenge-Response parametrai turi būti įjungti. Išsaugokite ir uždarykite failą. Tada atlikite SSH Deamon perkrovimą, tam, kad pakeitimai įsigaliotų:
sudo systemctl restart ssh
Pastaba: norint naudoti 2FA su root naudotoju turi būti pakeistas papildomas parametras į yes reiškmę: PermitRootLogin yes
Pagal nutylėjimą challenge-response autorizacija reikalauja įvesti slaptažodį prisijungimui. Todėl pakeisite PAM taisyklę SSH deamon'e:
sudo nano /etc/pam.d/sshd
Turite matyti tokią reikšmę:
@include
common-auth
Taip pat įjungsime besikeičiantį prisijungimo kodą. Tam pridėkite žemiau pateiktas eilutes:
#One-time password authentication via Google Authenticator
auth required pam_google_authenticator.so
Išsaugokite ir uždarykite failą.
Nuo šiol jungiantis Jūsų bus prašoma įvesti naudotojo slaptažodį ir vėliau patvirtinimo kodą.
3. Public Key naudojimas su Google Authentication kodu
Norint užtikrinti dar saugesnį prisijungimą prie serverio papildomai rekomenduojama nustatyti, kad slaptažodis nebūtų naudojamas. Vietoje būtų naudojamas SSH raktas. Tai atlikti galite pagal šią
instrukciją.
Kai atliksite šiuos veiksmus, galite sujungti viešo rakto autorizacijos naudojimą su patvirtinimo kodu. Tam atlikti visų pirma atsidarykite SSH deamon'o konfigūraciją:
sudo nano /etc/ssh/sshd_config
Ir pridėkite papildomą eilutę failp pabaigoje:
AuthenticationMethods publickey,keyboard-interactive
Išsaugokite ir uždarykite failą. Atlikte SSH deamon'o perkrovimą:
sudo systemctl restart ssh
Papildomai dar reikia pakoreguoti SSH PAM konfigūracinį failą:
sudo nano /etc/pam.d/sshd
Kuriame užkomentukite žemiau pateiktą eilutę naudodami simbolį # prieš @ simbolį ir palikdami tarpą:
# @include
common-auth
Uždarykite failą ir išsaugokite. Nuo šiol prisijungimui bus naudojamas SSH raktas bei Google Authenticator kodas.
Papildomi pastebėjimai:
* kiekvienas naudotojas, kuris jungiasi prie serverio turi atlikti google-authenticator diegimą;
* atsarginis kodas (angl. emergency scratch code) yra atsarginis kodas. Jeigu prarasite telefoną, gali įvesti vieną iš penkių pateiktų atsarginių kodų vietoje kintamo kodo tam, kad prisijungti prie sistemos. Šie kodai gali būti naudojami tik vienam prisijungimui;
* jeigu norite pakeisti slaptą kodą, tiesiog prisijunkite prie serverio ir paleidę komandą google-authenticator pakartotinai ir ~/.google_authenticator failas bus pakoreguotas.
4. Kaip išjungti SSH dviejų lygių autorizaciją
Atsidarykite SSH deamon'o konfigūracijos failą:
sudo nano /etc/ssh/sshd_config
Susiraskite šią eilutę:
AuthenticationMethods publickey,keyboard-interactive
Ir pašalinkite keyboard-interactive reikšmę:
AuthenticationMethods publickey
Išsaugokite ir perkraukite SSH deamon'ą:
sudo systemctl restart ssh
Tai atlikus nebebus naudojama dviejų lugių autorizacija. SSH rakto veikimas, jeigu buvo toks sukonfigūruotas, išliks.