Az SSH muködése
Az ssh (Secure Shell) egy program, ami arra való, hogy távoli gépekre jelentkezzünk be és/vagy parancsokat hajtsunk végre távoli gépeken. Célja az, hogy helyettesítse az rlogint és az rsht, és biztonságos (titkosított) kapcsolatot biztosítson két gép között. X11 kapcsolatokat és tetszőleges TCP/IP portokat szintén lehet a biztonságos csatornára továbbítani (forwardolni). Az ssh kapcsolódik és belép a megadott hostname gépre. A felhasználó több módszerrel is igazolhatja azonosságát.
Az ssh RSA kulcsokon alapul. Minden ssh-t használó gépnek van egy host-azonosító RSA kulcsa (alapértelmezésben 1024 bit). A szerver gépen az sshd démon ezen kívül generál egy szerver RSA kulcsot is (alapértelmezésben 768 bit), amelyet óránként frissít, és amit soha nem tárol a merevlemezen.
Amikor egy kliens (ssh) hozzákapcsolódik a szerverhez (sshd), először a szerver azonosítása történik meg. A szerver elküldi a host- és szerver-kulcsok publikus részét a kliensnek. A kliens összehasonlítja a host-azonosító publikus kulcsot az adatbázisában lévővel és ellenőrzi, hogy az változatlan-e. Ezután a kliens generál egy 256 bites véletlenszámot, amit a szerver host- és szerver-kulcsával egyaránt titkosít, majd ezt visszaküldi a szervernek. A szerver az RSA kulcsai ismeretében vissza tudja fejteni a titkosított véletlenszámot, amit a továbbiakban a két oldal a forgalom titkosító kulcsául (session key) fog használni - ettől a ponttól kezdve minden titkosított, IDEA, DES, 3DES, ARCFOUR (RC4) vagy TSS algoritmust használva.
A következő lépés a kliens-azonosítása (autentikáció). Több módszer áll ehhez a rendelkezésünkre:
Az ssh automatikusan alkalmazza az RSA authentikációs protokollt. A felhasználó az ssh-keygen(1) futattásával automatikusan létrehozza az ő RSA kulcspárját. Ezzel a privát kulcs a .ssh/identity-be kerül, míg a nyilvános kulcs a .ssh/identity.pub-ba, a felhasználó home könyvtárában. A felhasználónak ezután a saját identity.pub-ját a .ssh/authorized_keys-ba kell másolnia a home könyvtárában a távoli gépen (az authorized_keys fájl megfelelt a hagyományos .rhosts fájlnak, és soronként egy kulcsot tartalmaz, bár a sorok nagyon hosszúak lehetnek). Ezután a felhasználó beléphet, anélkül hogy a jelszavát megadná. Az RSA authentikáció sokkal biztonságosabb mint az rhosts authentikáció.
Az RSA authentikáció egy authentikációs közvetítő (agent) segítségével használható a legkényelmesebben. Lásd az ssh-agent(1)-et további információkért.
Amikor a felhasználó azonosságát elfogadja a szerver, akkor vagy végrehajtja a megadott parancsot, vagy belép a gépbe, és a felhasználónak egy szokásos shell-t ad a távoli gépen, de más kapcsolatok elokészítéseként különböző szolgáltatásokat kérhet a szervertől: pszeudo-terminál allokálását, az X11-es kapcsolatok átirányítását a biztonságos csatornára, tetszőleges TCP/IP kapcsolatok átirányítását a biztonságos csatornára vagy az úgynevezett authentication agent kapcsolat átirányítását a biztonságos csatornára. Minden, a távoli parancsal vagy shell-el történő kommunikáció automatikusan titkosítva lesz.
Egy session akkor ér véget, amikor a parancs végrehajtása vagy a shell a távoli gépen véget ér, és az összes X11 és TCP/IP kapcsolat lezárult. Az ssh a távoli program kilépési értékével (exit status) lép ki. Ha a felhasználó X11-et használ (a DISPLAY környezeti változó be van állítva), az X11 displayhez való kapcsolat automatikusan forwardolódik a távoli géphez, oly módon, hogy minden a shellből (vagy parancsból) indított X11 program a titkosított csatornán jön át, az igazi X szerverrel való kapcsolat pedig a lokális gépről jön létre. A felhasználónak nem kell kézzel beállítania a DISPLAY-t. Az X11 kapcsolatok forwardolásást a parancssoron vagy a konfigurációs fájlokban lehet beállítani.
Az ssh által beállított DISPLAY a szerver gépre mutat, de zérónál nagyobb display számmal. Ez azért van, mert az ssh egy ,,proxy'' X szervert állít fel a szerver gépen a kapcsolatok titkosított csatornán való továbbításához.
Ha egy felhasználó egy authentikációs közvetítőt (agent) használ, akkor a közvetítőhöz való kapcsolatot automatikusan forwardolja a távoli gépre, hacsak ez nincs letiltva a parancssoron vagy egy konfigurációs fájlban.
Tetszőleges TCP/IP kapcsolatoknak a biztonságos csatornán való forwardolását a parancssoron vagy egy konfigurációs fájlban lehet megadni. A TCP/IP forwardolásnak egy lehetséges alkalmazása egy elektronikus pénztárcához való biztonságos kapcsolódás; egy másik a tűzfalakon való átjutás.
Az ssh automatikusan fenntart és ellenőriz egy adatbázist, amely tartalmazza az összes olyan gép RSA-alapú azonosítását, amellyel valaha is használva volt. Az adatbázis a .ssh/known_hosts-ban van, a felhasználó home könyvtárában. Ezenkívül az ismert gépeket a /etc/ssh/ssh_known_hosts-ban is leellenőrzi. Minden új gép automatikusan hozzáadódik a felhasználó fájljához. Ha egy gép nyilvános kulcsa megváltozik, az ssh figyelmeztet és megtiltja a jelszóval való belépést, nehogy a felhasználó jelszavát egy ,,trójai faló'' lopja el. Ennek a mechanizmusnak egy másik célja a ,,középen a támadó'' (man-in-the-middle attack) megakadályozása, amely egyébként meghiúsítaná a titkosítást. A StrictHostKeyChecking opciót lehet arra használni, hogy megakadályozzuk az olyan gépekre való belépést, amelyeknek a kulcsa nem ismert vagy megváltozott.
Mogyorósi Zsolt
G-203i