Az ötlet
Az ötlet a következő: mivel egyszer majd szeretném a blogomat saját webszerverről üzemeltetni, ezért szeretném annyira biztonságossá tenni, amennyire lehet.
Nyilván a blog üzemeltetéséhez felhasznált komponensek bármelyike sebezhető lehet, de úgy gondolom, amit meg tudunk, meg kell tennünk a védelem érdekében.
Így jutott eszembe, hogy a leendő blog alapját képező linux ssh-elérését kétlépcsőssé teszem, ugrókóddal. Ezen a ponton joggal merülhet fel a kérdés: minek marháskodok én itt egyéb megoldásokkal, mikor ott a kulcsos belépés lehetősége?
Nos, a kulcsos belépés akkor igazán kétlépcsős, ha a privát kulcs fizikailag is elkülönül az elérést inicializáló rendszertől, például pendrive-on van. Szerintem nem kell sorolnom ennek a megoldásnak a hátrányait, mindannyian fel tudtok sorolni legalább hármat.
A kétlépcsős megoldás kivitelezésében a Google volt segítségemre: a megoldás egyik fele egy Google Authenticator nevű alkalmazás, ami iOS-re, Blackberry-re és Androidra érhető el a cégtől, de készültek egyéb third-party megoldások is egyéb platformokra.
A megoldás másik fele a libpam-google-authenticator nevű PAM, amelyet használatba kell vennünk az ssh szerver konfigurációjában. A Google Authenticator-t itt lehet elérni a Play Store-ban, a libpam opensource modul Ubuntu 11.10-től elérhető repository-ban – ami azt is jelenti, hogy a jelenlegi stabil Debianban még fordítani kell.
Kivitelezés
Első lépésként a telefonunkra kerüljön fel a Google Authenticator alkalmazás, mert ebbe fogjuk importálni a PAM által generált kulcsot.
Ubuntu 11.10-től a telepítéshez semmi extra művelet nem kell, csak ennyi (ugyanez igaz a származtatott rendszerekre is, amelyek használják az Ubuntu tárolókat):
sudo apt-get install libpam-google-authenticator
Debianos bűvészkedés pedig így:
sudo apt-get install mercurial libqrencode3 libpam0g-dev - a függőségek telepítése
hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator - a forrás beszerzése
cd google-authenticator/libpam
make
make install
cd ../..
rm -r google-authenticator/
Ezután terminálban adjuk ki a következő parancsot:
google-authenticator
Forrás: Tombuntu
Ekkor kapunk egy QR-kódot, egy OTP-s URL-t, egy titkos kulcsot, egy verification kódot és 5 darab scratch kódot, valamint néhány kérdést, amit értelemszerűen kell megválaszolni.
Mielőtt terminálból elérhetetlenné válna a QR-kód, indítsuk el a telefonunkon a Google Authenticatort és vegyünk fel egy új accountot. Itt tudunk barcode-ot scannelni is, így minden információ azonnal bekerül a telefonunkba, ha a QR-kódot megmutatjuk az alkalmazásnak.
Ha nem, egyesével kell minden szükséges információt megadni, a scratch kódokat pedig jól tegyük el, vész esetén ezek mindig be fognak engedni a rendszerbe, de ezek egyszer használatos kódok. Megtaláltam őket a ~/.google_authenticator fájlban, nem tettem kísérletet arra, hogy írjak bele másikat – még nem volt rá szükségem.
Nos, már csak meg kell mondanunk a PAM-nak, hogy van egy új modulunk, illetve az ssh-szervernek, hogy ezt az új modult is használja azonosításkor:
sudo vi /etc/pam.d/sshd
és illesszük be:
auth required pam_google_authenticator.so
sudo vi /etc/ssh/sshd_config
valamint keressük meg a ChallengeResponseAuthentication sort és állítsuk át yes-re, végül indítsuk újra az ssh-szervert.
A végeredmény:
sh4d0w@XXX:~$ ssh bla.bla.bla.bla
Password:
Verification code:
Welcome to Linux Mint 13 Maya (GNU/Linux 3.2.0-23-generic i686)
Welcome to Linux Mint
* Documentation: http://www.linuxmint.com
Last login: Thu Nov 22 13:59:05 2012 from XXX
sh4d0w@lmtest ~ $
Készen vagyunk. Ezután minden ssh belépéskor a jelszavunkon kívül az éppen érvényes időalapú kódot is meg kell adnunk.
Forrás: Google
Köszönettel tartozom O Nuno-nak és a HowToGeeknek.