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 rlogin­t és az rsh­t, é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:

  1. - rhosts autentikáció
  2. - rhosts és host-RSA autentikáció (az elsődlegesen használt autentikációs mechanizmus)
  3. - user-RSA autentikáció: az ssh támogatja azt, hogy a felhasználók definiáljanak saját RSA kulcsokat, amelyeket azután távoli gépekre ssh-val való bejelentkezéskor önmaguk azonosítására használhatnak.
  4. - password alapú autentikáció

 

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.

 

 

Opciók

 

 

Mogyorósi Zsolt

G-203i