Ssh

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Ssh as PDF for free.

More details

  • Words: 9,572
  • Pages: 37
SSH 1. Uvod SSH (Secure Shell) je mrežni servis koji korisnicima omogućuje uspostavu sigurnog komunikacijskog kanala između dva računala putem nesigurne računalne mreže. Tradicionalni mrežni servisi kao što su telnet, ftp, rsh i drugi, iako su vrlo praktični i jednostavni za korištenje, ujedno sadrže i jedan veliki nedostatak koji počinje predstavljati sve veće ograničenje na korištenje istih. Radi se o vrlo niskom nivou sigurnosti koji je implementiran kod većine takovih "starijih" mrežnih servisa, budući da se u vrijeme njihova nastanka nije previše pažnje obraćalo na sigurnost računalnih sustava. U današnje vrijeme kada sigurnosni aspekt predstavlja jedan od najvažnijih elemenata svake računalne mreže taj problem svakodnevno dolazi sve više do izražaja. Inherentne slabosti kod takvih mrežnih servisa neovlaštenim korisnicima omogućuju vrlo jednostavan dolazak do povjerljivih korisničkih informacija te prisluškivanje kompletnih mrežnih sesija između klijentskog i poslužiteljskog računala. Također ne postoji nikakav mehanizam koji bi omogućio međusobnu autentikaciju računala, što neovlaštenim korisnicima omogućuje lažiranje mrežnih sesija te lažno predstavljane pod imenom drugih računala. Upravo su gore navedeni elementi bili podloga za nastanak SSH protokola i programa koji ga implementiraju, kako bi se na taj način korisnicima omogućilo sigurno komuniciranje s udaljenim računalima. Također se vodilo računa o području primjene SSH servisa tako da je isti prilično jednostavan, što olakšava njegovo korištenje i manje iskusnim korisnicima. SSH servis svoj rad bazira na korištenju kombinacije simetrične i asimetrične kriptografije, metoda enkripcije koje omogućuju sigurniji prijenos podataka računalnom mrežom. Nešto više riječi o spomenutim metodama biti će dano u sljedećem poglavlju. Trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2, od kojih je SSH2 ona novija koja sadrži određena poboljšanja u odnosu na stariju verziju. Iz navedenih razloga svim se korisnicima preporučuje korištenje nove verzije ovog protokola, kako bi se na taj način u potpunosti iskoristile mogućnosti istog. Treba napomenuti da je originalna verzija SSH protokola razvijena od jedne Finske kompanije koja je na određeni način zaštitila svoj proizvod te samim time ograničila mogućnosti njegovog korištenja. Kao rezultat toga nastala je open-source implementacija istog protokola pod imenom OpenSSH koja se danas najčešće koristi te će kao takva biti opisana u nastavku dokumenta.

2. Enkripcija podataka Kako je rečeno u uvodu ovog poglavlja SSH servis koristi enkripciju podataka u svrhu njihove zaštite od neautoriziranog pristupa. U ovom poglavlju biti će vrlo kratko iznesene osnovne napomene vezane za kriptografiju i enkripciju podataka kako bi se korisniku na taj način omogućilo lakše razumijevanje načina na koji SSH protokol implementira sigurnost. Postoje dvije osnovne grupe algoritama za enkripciju podataka. To su:

z z

simetrični algoritmi (bazirani na jednom tajnom ključu) asimetrični algoritmi (bazirani na tajnom i javnom ključu)

Obje od gore navedenih grupa algoritama baziraju svoj rad na korištenju nekog javno i dobro poznatog algoritma za enkripciju podataka (čija je specifikacija poznata svima). Za sam postupak kriptiranja odnosno dekriptiranja podataka potrebno je dodatno poznavati odgovarajući ključ (engl. key) na temelju kojeg algoritam provodi kriptiranje podataka. To znači da je za enkripciju ili dekripciju podataka osim samog algoritma potrebno poznavati i ključ na temelju kojeg algoritam kriptira podatke. Ovisno u koju od gore navedenih grupa algoritam spada ovisi na koji će se način provoditi enkripcija odnosno dekripcija podataka. Kod simetrične kriptografije isti ključ se koristi i za kriptiranje i dekriptiranje podataka. Pošiljalac kriptira podatke tajnim ključem i tako kriptiranu poruku šalje na odredište. Primalac poruke istim tajnim ključem može dekriptirati poruku odnosno doći do njenog pravog sadržaja.

Slika 2.1 Simetrična kriptografija Odmah se može primijetiti jedan veliki nedostatak ove grupe algoritama, a to je taj da se i pošiljalac i primatelj na neki način moraju dogovoriti oko tajnog ključa koji će koristiti za komunikaciju. Proces dogovora oko tajnog ključa predstavlja poseban problem, budući je razmjenu ključeva potrebno obaviti nesigurnim putem (mail, telefon ili sl) što može ugroziti privatnost ključa. Prednost algoritama ove skupine je ta da su iznimno brzi što je glavni razlog njihove učestale primjene. Najpoznatiji predstavnici ove grupe algoritama su DES, IDEA, 3DES, Blowfish i mnogi drugi. Asimetrični algoritmi svoj rad baziraju na korištenju dva ključa umjesto jednoga. Svaki korisnik u ovome slučaju posjeduje svoj tajni i javni ključ. Ključevi su međusobno kompatibilni na taj način da se poruka kriptirana jednim ključem može dekriptirati samo drugim ključem istog korisnika. Tajni ključ je strogo povjerljiv i poznat je samo njegovom vlasniku, dok se javni ključ slobodno distribuira svim korisnicima s kojima se želi komunicirati ovim putem. Postupak razmjene podataka u tom slučaju je sljedeći:

z

z

pošiljalac poruku kriptira javnim ključem primalaca poruke koji je svima poznat i dostupan primalac poruku dekriptira svojim tajnim ključem koji je poznat jedino njemu

Slika 2.2 Asimetrična kriptografija Na taj način svako svakome može poslati enkripcijom zaštićenu poruku pod jednim jedinim uvjetom, da je poznat javni ključ primalaca poruke. Poruku kriptirana javnim ključem primaoca može se dekriptirati jedino odgovarajućim tajnim ključem koji je poznat isključivo primaocu poruke. Na taj način omogućena je sigurna i jednostavna razmjena podataka između dva korisnika. Javni ključevi korisnika najčešće su dostupni putem web-a ili nekog drugog servisa kako bi se na taj način olakšala njihova distribucija. Samim time uklonjen je i problem razmjene ključeva koji se javljao kod simetrične kriptografije. Najpoznatiji predstavnik ove skupine algoritama je RSA algoritam koji se ujedno koristi i kod SSH protokola. Nedostatak ove metode su nešto veći zahtjevi na procesorsku snagu računala, odnosno nešto duže trajanje postupka enkripcije podataka. Moderne metode enkripcije za svoj rad koriste kombinaciju simetrične i asimetrične kriptografije. Algoritmi asimetrične kriptografije koriste se na početku sesije za sigurno dogovaranje tajnog ključa koji će se kasnije koristiti za kriptiranje samih podataka korištenjem nekog od simetričnih algoritama. Na taj način postižu se optimalne performanse algoritma budući da su iskorištene prednosti obje metode: sigurnost i brzina. Upravo ovakav koncept iskorišten je i kod SSH protokola gdje se razmjena i dogovor oko tajnog ključa sesije obavlja asimetričnim RSA algoritmom, da bi se u sljedećoj fazi tako dogovoreni ključ koristio za simetričnu enkripciju podataka koji se razmjenjuju između udaljenih računala. Sličan pristup koristi se i kod poznatog PGP (Pretty Good Privacy) mail servisa, vrlo popularnog i jednostavnog alata za sigurno slanje e-mail poruka.

3. SSH protokol

SSH servis bazira se kao i većina mrežnih servisa na klijent-poslužitelj modelu. Klijent uspostavlja vezu s poslužiteljskim računalom na kojem je pokrenut SSH demon (tipično na portu 22) nakon čega slijedi razmjena podataka između tih računala. Ovdje su navedene neke osnovne karakteristike SSH protokola: z

z

z

z

z

smanjene mogućnosti provođenja DNS i IP spoofing napada, u kojima neovlašteni korisnik pokušava ostvariti neautorizirani pristup računalnim resursima udaljenog sustava lažiranjem IP adresa i DNS imena strojeva implementirane metode autentikacije računala bazirane na RSA algoritmu simetrične kriptografije mogućnost preusmjeravanja proizvoljnih TCP/IP portova preko sigurnog SSH komunikacijskog kanala (POP, FTP) prije bilo kakve razmjene podataka između dva računala provodi se kompletan postupak međusobne autentikacije klijenta i poslužitelja, čime se bitno smanjuje mogućnost provođenja bilo kakvog napada na SSH servis prilično jednostavna upotreba programa koji implementiraju SSH protokol

Uspostava veze između dva računala SSH protokolom može se podijeliti u nekoliko faza. U prvoj fazi klijent i poslužitelj razmjenjuju podatke o inačici protokola koji će se koristiti, obavlja se identifikacija korištenih SSH programskih paketa, provjerava se ispravnost veze i slično. U ovoj fazi enkripcija podataka još se ne koristi. U sljedećoj fazi klijent i poslužitelj dogovaraju se o tajnom ključu i algoritmu koji će se koristiti u daljnjim fazama komunikacije. Nakon ove faze dogovoren je ključ sesije i dogovoren je protokol koji će se koristiti za kriptiranje podataka. Nakon ove faze svi podatci razmijenjeni između klijenta i poslužitelja biti će kriptirani na dogovoreni način. Slijedi treća faza u kojoj se klijent autenticira kod poslužitelja kako bi se na taj način utvrdio identitet klijenta odnosno provjerile ovlasti pristupa za tog klijenta. Ukoliko je sve prošlo u redu prihvaća se sesija između klijenta i poslužitelja nakon čega je moguća sigurna razmjena podataka. SSH podržava nekoliko načina autentikacije korisnika od kojih je najsigurnija ona koja koristi RSA algoritam te će u dokumentu biti dan naglasak upravo na ovoj metodi. Postoje metode bazirane na .rhost i host.equiv datotekama koje su naslijeđene od rsh i njemu sličnih servisa. Budući da se iz sigurnosnih razloga ne preporučuje korištenje ovih metoda one neće biti detaljnije razmatrane u ovom dokumentu. Najjednostavnija i vrlo često korištena metoda autentikacije je ona koja se bazira na zaporci korisnika. Pristup je identičan kao i kod većine drugih mrežnih servisa s osnovnom razlikom što se ovdje korisnički podatci (korisničko ime i zaporka) šalju mrežom kriptirani. U nastavku će biti opisani osnovni postupci koje je potrebno obaviti kako bi se omogućilo korištenje SSH servisa.

4. Instalacija Instalacija programa pokazala se kao vrlo jednostavan postupak na testiranim

Linux Debian i Linux Mandrake platformama. Openssh programski paket dolazi u distribucijama navedenih Linux sustava, što prilično olakšava postupak njihove instalacije. Kod Mandrake distribucije potrebno je u tu svrhu pokrenuti Software Menager aplikaciju, u kojoj je potrebno odabrati odgovarajuće pakete (openssh, openssh-server, openssh-clients) te pokrenuti njihovu instalaciju. Nakon toga biti će potrebno ubaciti jedan od CD-a nakon čega će uslijediti standardni postupak instalacije paketa. Kod Debian platformi program je moguće instalirati korištenjem dobro poznatog dselect programskog paketa. U tu svrhu potrebno je pokrenuti program dselect naredbom: # dselect te standardnim postupkom pokrenuti postupak instalacije ovog programa. Ukoliko se program želi nadograditi na noviju verziju ili ukoliko se jave problemi kod instalacije programa koji dolazi s distribucijom moguće je program skinuti na matičnoj web stranici openssh projekta http://www.openssh.com/ . Program je moguće skinuti u tar.gz i .rpm arhivama u različitim inačicama. Zadnja najnovija inačica openssh paketa dolazi pod imenom openssh3.1p1.tar.gz. Ukoliko se program instalira zasebno treba napomenuti da instalacija programa zahtjeva Zlib (http://www.gzip.org/zlib/) biblioteku te OpenSSL (http://www.openssl.org) programski paket.

5. Konfiguracija i korištenje klijentskog dijela SSH aplikacije Nakon što je program instaliran moguće se odmah spojiti na bilo koje udaljeno računalo na kojem je instaliran SSH poslužitelj i na kojem korisnik posjeduje valjani korisnički račun. Dovoljno je u naredbenom retku upisati naredbu: # ssh -l nakon čega će se korisniku prikazati poruka koja govori da se radi o pokušaju spajanja na nepoznato računalo. Nakon toga korisnika se traži potvrda za nastavak postupka spajanja, čime se korisnika upozorava da se prvi puta pokušava spojiti na udaljeno računalo. Nakon toga slijedi postupak unosa korisničke zaporke čime se završava proces uspostave SSH sesije s poslužiteljem. Odmah se može uočiti kako je korištenje osnovnih mogućnosti ovog programa vrlo jednostavno, što je bio jedan od osnovnih ciljeva prilikom razvijanja ovog servisa. Primjer: # ssh -l sjusic testing.zesoi.fer.hr Zadavanjem ove naredbe pokreće se postupak spajanja korisnika sjusic na udaljeno računalo testing.zesoi.fer.hr na kojem je pokrenut SSH poslužitelj. Ukoliko je sve ispravno i ukoliko je to prvi pokušaj spajanja s tog računala korisniku se javlja poruka koja indicira da se radi o spajanju na nepoznato računalo te se traži potvrda za nastavak spajanja na isto računalo. The authenticity of host [hostname] can't be established. Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52. Are you sure you want to continue connecting (yes/no)? Nakon što korisnik odgovori potvrdno (yes) nastavlja se postupak spajanja nakon čega se korisnika traži da unese valjanu zaporku za korisničko ime definirano -l parametrom. sjusic@testing's pasword: Ukoliko se unese valjana zaporka korisnik je sigurnim SSH kanalom spojen na udaljeno računalo na kojem može dalje raditi. Ukoliko se prilikom pokušaja spajanja navede nepostojeće korisničko ime (putem -l opcije), SSH poslužitelj neće prijaviti nikakvu grešku o nepostojanju korisnika, već će jednostavno korisnika zatražiti da unese zaporku za istoga. Na ovaj način SSH neovlaštenom korisniku onemogućuje pregledavanje postojećih korisničkih računa na udaljenom računalu, budući da se ne primijeti razlika između pokušaja spajanja na SSH poslužitelj s regularnim i neregularnim korisničkim imenom. Ovakav pristup je sasvim poželjan sa

stanovišta sigurnosti, budući da se ne želi neovlaštenom korisniku omogućiti dolazak do liste postojećih korisnika na udaljenom računalu. Upravo je opisan najjednostavniji primjer spajanja na SSH poslužitelj pomoću zaporke korisnika, jedan od mogućih načina autentikacije. U ovom slučaju kompletni proces autentikacije korisnika bazira se isključivo na njegovoj zaporci te se na ovaj način može spojiti svatko tko zna odgovarajuće korisničko ime i zaporku bilo kojeg korisnika sustava. Ukoliko korisnička zaporka na bilo koji način bude kompromitirana SSH autentikacija ovim putem gubi smisao. Drugi način spajanja na SSH poslužitelj koji će biti upravo opisan bazira se RSA autentikaciji, odnosno na korištenju javnog i tajnog ključa korisnika. Kod ovog pristupa klijent poslužitelju u prvoj fazi postupka autentikacije šalje poruku koja između ostalih informacija sadrži i podatak o svom javnom ključu koji se želi koristiti za autentikaciju. Poslužitelj u svojoj internoj bazi provjerava da li ima podatak o istom korisniku te ukoliko ima vraća korisniku znakovni niz (engl. chalenge) koji je kriptiran javnim ključem tog korisnika. Nakon toga klijent mora dekriptirati primljenu vrijednost te vratiti odgovor poslužitelju koji će potvrditi uspješnu dekripciju primljene vrijednosti. Budući da je dekripciju moguće obaviti jedino pomoću tajnog ključa istog korisnika, poslužitelj prihvaća sesiju i autenticira korisnika. Treba napomenuti da u ovom slučaju poslužitelj nikada ne traži zaporku korisnika budući da je kompletni proces autentikacije obavljen na temelju javnog i tajnog ključa korisnika. Da bi se omogućio ovakav proces autentikacije klijent prvo mora generirati svoj par tajni/javni ključ te nakon toga kopiju javnog ključa pohraniti na poslužitelju kako bi isti na temelju njega mogao obaviti proces autentikacije istoga. U svrhu generiranja parova javni-tajni ključ korisnika koristi se ssh-keygen program koji dolazi u paketu s openssh programom. Zadavanje naredbe # ssh-keygen rezultirati će kreiranjem javnog i tajnog ključa korisnika pod čijim je ovlastima zadana gore navedena naredba. Prilikom postupka generiranja ključeva korisnik će biti upitan da unese takozvani passphrase niz koji pruža dodatni nivo zaštite kod korištenja SSH servisa. Passphrase niz može se jednostavno shvatiti kao zaporka za korisnikov par ključeva a način njegove primjene biti će opisan u nastavku. Iako nije obavezno definiranje ovog niza prilikom postupka generiranja ključeva (moguće je samo pritisnuti <ENTER> i na taj način ostaviti prazan niz) svim se korisnicima iz sigurnosnih razloga preporučuje korištenje istoga. Budući da trenutno postoje dvije verzije SSH protokola, SSH1 i SSH2, moguće je ssh-keygen programu proslijediti -t parametar kojim se definira za koji algoritam se želi stvoriti par ključeva. Budući da datoteke koje sadrže ključeve korisnika sadrže različita imena za svaki od korištenih algoritama moguće je generirati zaseban par ključeva. Na taj način omogućuje se spajanje na različite SSH poslužitelje odnosno izbjegavanje eventualnih problema s kompatibilnošću softvera između klijenta i poslužitelja. Moguće su sljedeće vrijednosti za -t argument ssh-keygen programa:

z z

ssh-keygen -t rsa1 - koristi se za SSH1 verziju protokola ssh-keygen -t dsa i ssh-keygen -t rsa - koriste se za SSH2 verziju protokola

Ključevi generirani bilo kojom od gore navedenih opcija nalaze se u $HOME/.ssh direktoriju korisnika gdje se uvijek za svaki algoritam stvaraju dvije datoteke od kojih jedna sadrži javni ključ, a druga tajni ključ korisnika. Imena su im identična s jedinom razlikom što javni ključ sadrži ekstenziju .pub. Primjer: z

z

z

z

z

z

id_rsa - datoteka koja sadrži tajni ključ korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju. id_rsa.pub - datoteka koja sadrži javni ključ korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju id_dsa - datoteka koja sadrži tajni ključ korisnika za SSH2 verziju protokola koja koristi DSA algoritam za enkripciju id_dsa.pub - datoteka koja sadrži javni ključ korisnika za SSH2 verziju protokola koja koristi DSA algoritam za enkripciju identity - datoteka koja sadrži tajni ključ korisnika za SSH1 verziju protokola koja koristi RSA algoritam za enkripciju identity.pub - datoteka koja sadrži javni ključ korisnika za SSH2 verziju protokola koja koristi RSA algoritam za enkripciju

Nakon što su generirani odgovarajući ključevi posebnu pažnju treba posvetiti ovlastima koje su pridjeljene pojedinim datotekama. Sve datoteke koje ne sadrže nastavak .pub sadrže tajni ključ korisnika te kao takve ne smiju biti dostupne nikome osim samome korisniku. Nepažljivo pridjeljivane ovlasti datotekama koje sadrže tajni ključ korisnika mogu ozbiljno ugroziti sigurnost SSH sustava. Primjer:

Na gornjem primjeru može se jasno uočiti kako datotekama koje sadrže tajne ključeve korisnika (one bez .pub ekstenzije) omogućuju pristup samo vlasniku tih datoteka, u ovom slučaju korisnika sjusic. Kao što je već spomenuto, nakon generiranja vlastitog para tajni/javni ključ, kopiju javnog ključa klijent mora pohraniti na poslužitelju na kojeg se želi spajati. Ključ je potrebno pohraniti u $HOME/.ssh/authorized_keys datoteku ukoliko se koristi SSH1 protokol ili u $HOME/.ssh/authorized_keys2 datoteku ukoliko se koristi SSH2 protokol.

To znači da ukoliko se koristi SSH1 verzija protokola potrebno je identity.pub javni ključ kopirati u $HOME/.ssh/authorized_keys datoteku na udaljenom računalu, a ukoliko se koristi verija 2 istog protokola potrebno je kopirati ključeve id_rsa.pub ili id_dsa.pub u $HOME/.ssh/authorized_keys2 datoteku udaljenog računala. Kopiranje javnih ključeva može se obaviti jednostavno korištenjem običnog FTP protokola, budući da ovdje povjerljivost prijenosa podataka nije upitna jer se radi o prijenosu javnog a ne o tajnog ključa. Ukoliko iz sigurnosnih razloga na udaljenom računalu nije dostupan FTP ili telnet servis, potrebno je kontaktirati administratora sustava kako bi on pohranio ključeve na potrebna mjesta. Nakon što je stvorena odgovarajuća $HOME/.ssh/authorized_keys ili $HOME/.ssh/authorized_keys2 datoteka potrebno je ispravno postaviti ovlasti tih datoteka kako bi se veza mogla uspješno uspostaviti. U tu svrhu potrebno je zadati sljedeću naredbu: # chmod 644 .ssh/authorized_keys .ssh/authorized_keys2 što će rezultirati -rw-r-r- ovlastima, koje svim korisnicima sustava dozvoljavaju čitanje ovih datoteka. Ukoliko je sve podešeno na način kako je to upravo upisano potrebno je samo pokrenuti proces spajanja SSH protokolom na udaljeno računalo. # ssh nakon čega je korisnik automatski prijavljen u sustav ukoliko je sve prošlo u redu za vrijeme postupka autentikacije korisnika. Ukoliko je korisnik definirao passphrase niz prilikom generiranja para tajni/javni ključ, biti će potrebno unijeti taj niz ukoliko se želi uspostaviti veza s udaljenim računalom. Na ovaj način dodatno je zaštićen korisnikov par ključeva, budući da je osim poznavanja tajnog ključa u ovom slučaju potrebno i poznavati passphrase niz definiran prilikom postupka generiranja ključeva. Ukoliko se prilikom pokušaja spajanja ne unese ispravan passphrase niz, pokušaj spajanja na udaljeno računalo rezultirati će neuspjehom. Primjer: Na sljedećem primjeru prikazan je pokušaj spajanja na udaljeno računalu u slučaju definiranog passphrase niza:

Može se uočiti kako je za uspješnu uspostavu veze u ovom slučaju potrebno dodatno unijeti definirani passphrase niz čime se dodatno podiže sigurnosni nivo SSH sustava. Ukoliko se pogleda sadržaj $HOME/.ssh direktorija korisnika koji koristi SSH

servis, može se uočiti datoteka pod imenom known_hosts. Ista sadrži listu svih računala s kojima je klijentski dio SSH aplikacije ikada komunicirao, zajedno s njihovim identifikacijskim oznakama (ssh_host_key), što omogućuje dodatnu identifikaciju udaljenog računala s kojim se želi uspostaviti sesija. ssh_host_key je ključ koji sadrži svako računalo s instaliranim SSH servisom i generira se prilikom instalacije programskog paketa. Tako definirani ključ koristi se kasnije u svrhu međusobne identifikacije računala koja međusobno komuniciraju SSH protokolom. Prilikom prvog spajanja na udaljeni SSH poslužitelj aplikacija će javiti da ne poznaje udaljeno računalo te će korisnika tražiti potvrdu za nastavak uspostave veze (situacija prikazana u prvom primjeru ovog poglavlja). Ukoliko korisnik odgovori potvrdno uspostavit će se veza s udaljenim računalom nakon čega će to računalo biti zapisano u known_hosts datoteku zajedno s njegovim ssh_host_key.pub ključem primljenim od strane udaljenog računala. Svaki naknadni pokušaj spajanja na isto računalo neće prijavljivati tu poruku budući da je računalo zabilježeno u spomenutu datoteku zajedno sa svojom identifikacijom. Ovakav pristup smanjuje mogućnost provođenja raznih napada na SSH servis kao što su IP spoofing, Man in The Middle Attack napad te brojni drugi, budući da će pokušaj spajanja na računalo čiji ssh_host_key ne odgovara ključu koji je pohranjen u known_hosts datoteku za to računalo, rezultirati neuspjehom. known_host datoteka biti će opisana u sljedećem poglavlju koje se odnosi na poslužiteljski dio SSH aplikacije. SSH klijent može se pokrenuti s odgovarajućim parametrima čime se može preciznije utjecati na način njegovog rada. Ove opcije potrebno je koristiti ukoliko se žele iskoristiti naprednije mogućnosti SSH servisa kao što su preusmjeravanje portova i slično. Ovdje će biti navedene neke od opcija koje je moguće proslijediti ssh programu u obliku argumeneta: z

z

z

z

-c - definira se simetrični algoritam koji će se koristiti za enkripciju podataka. Moguće su sljedeće vrijednosti ovog parametra: des, blowfish, 3des. Inicijalna vrijednost je 3des, budući da se isti smatra optimalnim. Blowfish je nešto manje sigurniji od 3des algoritma ali je zato znatno brži, dok je des algoritam ovdje moguće navesti isključivo iz razloga kompatibilnosti sa SSH1 verzijom protokola, a iz sigurnosnih razloga ne preporučuje se njegovo korištenje. -f - zahtjeva se od ssh klijenta da radi kao pozadinski proces. Ova se opcija vrlo često koristi u slučajevima kada se želi uspostaviti sigurni SSH kanal između dva računala, koji će se kasnije iskoristiti za tuneliranje drugih TCP protokola. SSH tuneliranje biti će detaljnije opisano u nastavku dokumenta, gdje će biti dan primjer korištenja -f argumenta. -g - dozvoljava se udaljenim računalima spajanje na lokalno preusmjereni port. Ova opcija također je vezana za mogućnost korištenja preusmjeravanja portova, koja je opisana u nastavku dokumenta. -l - definira se korisničko ime (login) korisnika, pod kojim se želi spojiti na udaljeno računalo. Primjer korištenja ovog parametra naveden je na

z

z

z

z

z

z

z

z

nekoliko mjesta u ovom poglavlju. -p - definira se port udaljenog računala na koji će se klijent aplikacija spajati. Inicijalno je to port 22. -x i -X - onemogućavanje i omogućavanje preusmjeravanje X11 sesija peko sigurnog SSH kanala. -C - omogućuje se kompresija podataka koji se prenose SSH kanalom. Koristi se identičan algoritam kao i kod gzip programa, a nivo kompresije može se definirati CompressionLevel parametrom u konfiguracijskoj datoteci klijent programa. -v - omogućuje se takozvani verbose mod rada u kojem program ispisuje detaljne poruke vezane za svoj rad. Ova opcija koristi se u slučaju otklanjanja grešaka kod SSH servisa. -f - definira se konfiguracijska datoteka SSH klijent aplikacije. Ova opcija definira se u slučaju kada se ne želi koristiti inicijalna config datoteka klijenta. Više riječi o konfiguracijskoj datoteci klijenta dano je u nastavku ovog poglavlja. -L port:host:hostport - definira se port port koji će se na lokalnom računalu preusmjeravati putem SSH kanala na port hostport udaljenog računala host. Ova opcija koristi se u svrhu preusmjeravanja proizvoljnih TCP portova preko SSH sigurnog kanala, proces detaljnije opisan u poglavlju 7.7. -R port:host:hostport - definira se port port na udaljenom SSH poslužitelju koji će biti preusmjeren na port hostport lokalnog računala host. Opcija koja se također koristi za preusmjeravanje portova preko sigurnog SSH kanala. -1 - forsira se korištenje verzije 1 SSH protokola. -2 - forsira se korištenje verzije 2 SSH protokola.

Ovdje su ukratko navedeni i opisani neki od parametara koje je moguće proslijediti ssh klijent aplikaciji. U nastavku poglavlja biti će opisane moguće primjene nekih od ovdje navedenih opcija. Za detaljno upoznavanje sa svim parametrima i mogućnostima ssh klijent aplikacije, korisniku se preporučuje proučavanje man stranice ovog programa. Konfiguracijska datoteka ssh klijenta SSH klijentski dio aplikacije svoje konfiguracijske parametre prima iz sljedećih izvora: z z

komandna linija $HOME/.ssh/config konfiguracijska datoteka korisnika

z

/etc/ssh/ssh_config globalna konfiguracijska datoteka

Sve opcije koje se zadaju putem naredbenog retka nadjačavaju one definirane u $HOME/.ssh/config datoteci, a sve definirane u $HOME/.ssh/config datoteci nadjačavaju one definirane u globalnoj /etc/ssh/ssh_config datoteci. Svi parametri koje je moguće proslijediti putem naredbenog retka moguće je definirati u navedenim konfiguracijskim datotekama. Konfiguracijski parametri mogu se definirati za svako računalo na koje se želi spajati tako da se navede ključna riječ Host koja definira na koja se sva računala parametri odnose. Navedeni parametri vrijede sve do sljedeće ključne riječi Host nakon koje se navede parametri za sljedeću vezu. Na taj način moguće je definirati različite parametre sesije za spajanje na različita udaljena računala. Ovo može biti vrlo korisna opcija, pogotovo ukoliko korisnik posjeduje korisničke račune na više različitih SSH poslužitelja. Primjer: Ovdje je dan jedan tipični primjer konfiguracijske datoteke klijentskog dijela SSH aplikacije: Host * PasswordAuthentication yes HostbasedAuthentication no ForwardX11 no FallBackToRsh no Zvjezdica znači da se navedeni parametri odnose na sva računala na koja se spaja SSH klijentom. U danom primjeru omogućena je autentikacija na temelju korisničke zaporke dok je onemogućena autentikacija temelju .rhost. Preusmjeravanje X11 sesija je također onemogućeno trećim parametrom. Zadnji parametar FallBackToRsh omogućuje automatsko pokretanje rsh servisa ukoliko se korisnik pokuša spojiti sftp protokolom na udaljeno računalu na kojem sftp servis nije pokrenut. Rsh (Remote Shell) je servis koji korisniku omogućuje izvršavanje naredbi na udaljenom računalu samo što je prijenos podataka nekriptiran. Više riječi o sftp servisu može se naći u nastavku dokumenta (7.7 Tuneliranje FTP protokola). SSH klijent posjeduje iznimno velik broj konfiguracijskih parametara koji se mogu definirati te stoga oni ovdje neće biti detaljno opisivani. Za detaljnije informiranje o mogućim parametrima i načinu njihovog korištenja korisniku se preporučuje čitanje man stranice ssh programa.

6. Poslužiteljski dio aplikacije Osnovni zadaci SSH programa poslužitelja su da osluškuje mrežne zahtjeve SSH klijenata, da provede odgovarajuće postupke autentikacije istih, da kriptira podatke na dogovoreni način te da omogući klijentu korištenje svih mogućnosti SSH servisa. Konfiguracija SSH programa poslužitelja nalazi se u /etc/ssh/sshd_config konfiguracijskoj datoteci. Pokretanje SSH poslužitelja potrebno je omogućiti prilikom svakog podizanja sustava, što je moguće postići dodavanjem odgovarajućih start skripti u /etc/rc direktorij kako je to opisano u dokumentaciji o poslužiteljima (Upute za rad na poslužiteljima, rev 1.0, 195/01-1, LSS-FER_ZESOI, http://pingvin.carnet.hr/linux_u_obrazovanju/dokumentacija.php ). Program je moguće pokretati s brojim konfiguracijskim parametrima, a ovdje su navedeni samo neki od njih: z

z

z

z

z

z

z

-b - definira se veličina ključa kojeg poslužitelj generira prilikom instalacije. Inicijalno je to 768 bitova. -d - pokretanje moda za otklanjanje grešaka. Ukoliko se zada ova opcija sustav će u log datoteke bilježiti sve akcije vezane za rad poslužitelja a ujedno će se i u konzoli generirati odgovarajuće poruke što olakšava otklanjanje grešaka. -f - definira se konfiguracijska datoteka iz koje se čita konfiguracija. Koristi se ukoliko se ne koristi inicijalna /etc/ssh/ssh_config datoteka -g - definira se vrijeme koje se klijentu dozvoljava za izvršavanje postupka autentikacije. Ukoliko se klijent ne autenticira za to vrijeme poslužitelj prekida sesiju s klijentom. Inicijalna vrijednost ovog parametra je 600 sekundi) -h - definira se datoteka iz koje se čita javni ključ poslužitelja. Ovaj parametar potrebno je definirati u slučajevima kada se sshd program pokreće pod ovlastima drugog korisnika budući da isti nema ovlasti pristupa ssh_host_key datoteci koja inicijalno sadrži ovu vrijednost. U tom slučaju korisnik definira vlastitu datoteku kojoj ima pristup te je nakon toga navede kao parametar sshd poslužitelju. -i - ovaj parametar definira se u slučajevima kada se sshd program pokreće putem inetd poslužitelja (pogledati dokumentaciju o poslužiteljima). U principu se ovakav pristup ne preporučuje, budući da se na taj način nešto usporavaju performanse sustava. -p - definira se mrežni port na kojem poslužitelj osluškuje zahtjeve klijenta. Na ovaj način moguće je ssh demon programu zadati bilo koji port koji će se koristiti za uspostavu mrežnih sesija (Inicijalno port 22).

Postoji još nekoliko parametara koje je moguće na ovaj način zadati ssh

programu ali zbog manje važnosti isti ovdje nisu navedeni. Za detaljnije informacije korisniku se preporučuje proučavanje man stranice sshd programa poslužitelja. 6.1. Konfiguracijska datototeka Kako je već ranije spomenuto sshd program svoju konfiguraciju čita iz /etc/ssh/ssh_config (osim ukoliko nije drugačije definirano -f parametrom). U spomenutoj datoteci moguće je definirati brojne ključne riječi kojima se utječe na rad sshd poslužitelja. Ovdje su navedeni samo neki od njih, dok se za detaljnije informiranje korisniku preporučuje proučavanje ranije spomenute man stranice. z

z

z

z

z

z

z

z

AllowGroups - parametar koristi se za definiranje grupe korisnika koja ima prava pristupa SSH poslužitelju. Moguće je navesti više korisničkih grupa pri čemu se iste odvajaju razmakom. Inicijalno je dozvoljeno spajanje korisnika bez obzira kojoj grupi isti pripada. Moguće je korištenje wildcard znakova * i ? za preciznije definiranje liste korisničkih grupa. AllowUsers - slično kao i AllowGroups parametar samo što se odnosi na korisnike, a ne na grupe korisnika. AllowTCPForwarding - ovaj parametar omogućuje tuneliranje ostalih protokola preko SSH sigurnog kanala. Inicijalno je ovaj parametar postavljen na vrijednost "yes". Banner - ovim parametrom definira se datoteka čiji će se sadržaj prikazati korisniku prilikom uspostave veze s udaljenim računalom. Ova opcija omogućena je samo kod SSH2 verzije protokola. Chipers - definiraju se grupe algoritama koje se mogu koristiti za kriptiranje podataka. Moguće je definirati sljedeće algoritme: aes128cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour.Moguće je definirati više algoritama pri čemu se isti u tom slučaju odvajaju zarezom. CheckMail - definira se da li sshd poslužitelj mora provjeravati mail korisnika prilikom njegovog spajanja. Inicijalna vrijednost ovog parametra je "no". Deny Groups i Deny Users - parametri kojima se na sličan način kao i kod AllowGroups i AllowUsers omogućuje zabrana pristupa SSH servisu. Korištenjem ovih parametara moguće je vrlo precizno definirati kojim korisnicima je omogućeno korištenje SSH servisa. IgnoreRhosts - onemogućuje se autentikacija korisnika na temelju .rhosts i hosts.equiv datoteka. Inicijalna vrijednost ovog parametar je "yes" , budući da se ovaj način autentikacije smatra manje sigurnim.

z

z

z

z

z

z

z

z

z

z

IgnoreUserKnownHosts - definira se da li sshd poslužitelj uzima u obzir known_hosts datoteku prilikom procesa autentikacije korisnika. Inicijalna vrijednost ovog parametar je "yes". PaswordAutenthication - definira se da li je korisniku dozvoljeno prijavljivanje na sustave na temelju korisničke zaporke. Inicijalna vrijednost ovog parametar je "yes". PermitRootLogin - definira se da li je dozvoljeno prijavljivanje pod korisničkim računom administratora sustava. Inicijalna vrijednost ovog parametra je "yes". Moguće je definirati sljedeće vrijednosti ovog atributa: yes, no, forced-commands-only i without-password. Without-password vrijednost omogućuje spajanje administratora bez korisničke zaporke, a forced-commands-only vrijednost omogućuje prijavljivanje administratora na temelju njegovog para tajni/javni ključ. Port - definira se mrežni port na kojm sshd poslužitelj osluškuje zahtjeve (Inicijalno port 22). Protocol - definira se verzija protokola koju koristi sshd program poslužitelj. Moguće vrijednosti ovog atributa su 1 i 2, a inicijalna vrijednost parametra je 2,1. PubkeyAuthentication - definira se da li je dozvoljena autentikacija korisnika na temelju para javni/tajni ključ. Inicijalna vrijednost ovog parametra je "yes". ReverseMappingCheck - vrlo korisna opcija sa stanovišta sigurnosti, kojom se od sshd poslužitelja zahtjeva da provjeri IP adresu i ime računala s kojeg zahtjev dolazi. Na ovaj način pruža se dodatna zaštita od IP i DNS spoofing napada u kojima neovlašteni korisnik lažira IP adresu ili ime računala s kojeg konekcija dolazi , kako bi na taj način ostvario neautorizirani pristup resursima drugog sustava. RhostsAutenthication - definira se da li je moguća autentikacija samo na temelju .rhosts ili hosts.equiv datoteka. U normalnim okolnostima ne preporučuje se korištenje ove metode budući da se smatra manje sigurnom. Iz sigurnosnih razloga inicijalna vrijednost ovog parametra je "no". RhostsRSAAuthentication - definira se da li je dozvoljena autentikacija korisnika na temelju .rhosts ili hosts.equiv datoteka u kombinaciji s RSA autentikacijom. Ova metoda nešto je sigurnija u odnosu na prethodno navedenu, ali je također iz sigurnosnih razloga vrijednost ovog parametra postavljena na vrijednost "no". RSAAutenthication - definira se da li je dozvoljena autentikacija korisnika na temeljuRSA algoritma, odnosno na temelju para javni/tajni ključ korisnika. Inicijalna vrijednost ovog parametra je "yes", budući da se ovaj

mehanizam autentikacije smatra prilično sigurnim. z

z

Subsystem - definira se dodatni vanjski podsustav (npr. sftp podsustav za prijenos datoteka). U tu svrhu potrebno je navesti ime podsustava koji se želi koristiti. Inicijalno ovdje nije naveden niti jedan podsustav. X11Forwarding - omogućuje se preusmjeravanje X11 protokola putem sigurnog SSH kanala. Inicijalno je ova mogućnost isključena.

Ovdje su navedeni samo neki od parametara koje je moguće navesti sshd programu, a kompletnu listu istih zajedno s mogućnostima njihove primjene korisnik može naći u man stranicama ovog programa. Pomoću ovih parametara moguće je vrlo precizno definirati ponašanje SSH demon programa. U nastavku će biti ukratko opisane spomenute neke važnije datoteke koje su bitne za rad SSH servisa, kako bi se korisniku na taj način olakšalo razumijevanje načala rada SSH servisa. Authorized_keys datoteka Kako je već ranije spomenuto $HOME/.ssh/authorized_keys datoteka sadrži popis javnih RSA ključeva svih korisnika koji se na ovaj način žele spajati na SSH poslužitelj. Kod SSH1 verzije protokola ta datoteka nosi ime authorized_keys, dok kod SSH2 verzije ta ista datoteka nosi ime authorized_keys2. Na istom sustavu moguće je koristiti obje datoteke ukoliko se želi da poslužitelj jednako podržava SS1 I SSH2 verzije protokola. Svaki redak ove datoteke sadrži jedan javni ključ (RSA ili DSA, ovisno o korištenom algoritmu enkripcije) korisnika. Znak # kao i većini drugih slučajeva predstavlja početak komentara te se kao takav ignorira. /etc/ssh_host_key, /etc/ssh_host_dsa_key, /etc/ssh_host_rsa_key datoteke Navedene datoteke sadrže privatne ključeve tog računala. Slično kao što i svaki korisnik posjeduje svoj par javni/tajni ključ, tako i svako računalo koje koristi SSH servis ima svoj zasebni par ključeva. Ove datoteke iz tog razloga moraju imati ovlasti koje samo administratoru sustava omogućuju njihovo pregledavanje i mijenjanje. Sshd program se iz sigurnosnih razloga neće htjeti pokrenuti ukoliko su ovlasti ovih datoteka krivo postavljene. /etc/ssh_host_key.pub,/etc/ssh_host_dsa_key.pub,/etc/ssh_host_rsa_key datoteke. Navedene datoteke sadrže javne ključeve računala na kojem se nalaze. Za razliku od tajnog ključa opisanog u prethodnoj stavci ova datoteka može biti dostupna ostalim korisnicima . Njezin sadržaj se također generira korištenjem ssh-keygen naredbe. $HOME/.ssh/authorized_keys datoteka Gore navedena datoteka sadrži RSA javne ključeve svih korisnika koji se žele

spojiti SSH protokolom na udaljeno računalo pomoću svog para tajni/javni ključ. Za ovu datoteku osim što je na raspolaganju korisniku u čijem se home direktoriju nalazi , također se preporučuje da bude dostupna administratoru sustava. U ovu datoteku će korisnici kopirati svoj javni ključ za SSH1 verziju prtokola, ili preciznije rečeno identity.pub datoteku. $HOME/.ssh/authorized_keys2 datoteka Slično kao i gore navedena datoteka samo što korisnici u istu kopiraju ključeve vezane za SSH2 verziju protokola, odnosno id_rsa.pub i id_dsa.pub datoteke. etc/ssh_known_hosts and $HOME/.ssh/known_hosts datoteke Ove datoteke koriste se u slučajevima kada se proces autentikacije provodi na temelju .rhosts datoteke u kombinaciji sa RSA postupkom. Javni ključ računala koje se žele spojiti se mora nalaziti u ovoj datoteci ukoliko se želi uspješno uspostaviti veza sa SSH poslužiteljem. Iste datoteke klijent SSH aplikacija koristi kako bi provjerila identitet udaljenog računala na koje se pokušava spojiti. Ukoliko se u ovome koraku primijete bilo kakve neregularnosti sesija se prekida. /etc/hosts.allow, /etc/hosts.deny Datoteke kojima se može točno kontrolirati dozvola pristupa pojedinim servisima instaliranim na istom računalu. Datoteke se koriste u kombinaciji sa tcp_wraper programskim paketom u svrhu povećane kontrole pristupa pojedinim TCP mrežnim servisima. Više o načinu korištenja tcp_wrapper programskog paketa i njegovim mogućnostima može se pogledati u dokumentaciji o poslužiteljima. (Upute za rad na poslužiteljima, rev 1.0, elaborat 195/01-1, LSS-FER_ZESOI, poglavlje 1.3. TCP Wrapper program,http://pingvin.carnet.hr/linux_u_obrazovanju/dokumentacija.php) $HOME/.rhosts Ovdje će biti ukratko spomenuto uloga već nekoliko puta spominjane .rhost datoteke kako bi se korisnike na taj način upoznalo s njezinim značajem. Ova datoteka sadrži razmakom odvojene vrijednosti korisničko ime-ime računala, i svi tako navedeni korisnici sa navedenog računala mogu se spojiti na to računalo bez navođenja korisničke zaporke. Korištenje .rhosts datoteke naslijeđeno je od starijih mrežnih servisa kao što su rsh, i rlogin koji se danas više ne koriste. Iz navedenog odmah se može zaključiti zašto se korisnicima nikako ne preporučuje korištenje ovakvog mehanizma autentikacije, budući da je isti prilično nesiguran. Ukoliko se želi omogućiti ovakav načina autentikacije to je potrebno eksplicitno navesti u konfiguracijskoj datoteci sshd poslužitelja. $HOME/.shosts Shosts datoteka je posebno određena datoteka koja obavlja ulogu .rhosts datoteke, s jedinom razlikom da se koristi isključivo za ssh servis. /etc/hosts.equiv U ovoj datoteci navedena su imena računala koja se mogu spojiti na dotično računalo bez odgovarajuće korisničke zaporke, pod pretpostavkom da korisnik

ima isto korisničko ime na oba računala. Slično kao i kod .rhost datoteke korisnicima se iz sigurnosnih razloga ne preporučuje korištenje ove datoteke u svrhu autentikacije udaljenih korisnika. /etc/shosts.equiv Isto kao i /etc/hosts.equiv, samo što datoteka vrijedi isključivo za SSH servis.

7. Tuneliranje ili preusmjeravanje TCP portova Preusmjeravanje portova, popularno zvano tuneliranje, je mehanizam koji korisniku omogućuje preusmjeravanje inače nesigurnog TCP prometa preko sigurnog SSH komunikacijskog kanala. Na ovaj način moguće je proizvoljne, inače nesigurne (nekriptirane) mrežne servise kao što su POP, IMAP, SMTP, telnet i drugi, preusmjeriti preko SSH kanala te ih na taj način zaštiti od neovlaštenog promatranja. Princip rada ovog mehanizma prikazan je na sljedećoj slici:

Slika 7.1 Tuneliranje protokola Na slici je prikazan princip na kojem se bazira tuneliranje ostalih protokola preko SSH sigurnog kanala (Slika 7.1). Princip je sljedeći: z

z

z

z

z

SSH klijentu potrebno je reći koji se port na lokalnom računalu želi tunelirati kroz sigurni SSH kanal, i na koji port udaljenog računala se taj promet želi preusmjeriti. Kako je pokazano u primjeru koji slijedi u tu svrhu koristi se -L opcija ssh klijenta, spomenuta u poglavlju o ssh klijentu. Nakon toga kompletni promet lokalnog računala koji se šalje na u prethodnoj fazi definirani port biti će putem sigurnog SSH kanala preusmjeren na sshd poslužitelj navedenog udaljenog računala. Sshd poslužitelj prima kriptirani promet na SSH portu 22 i prosljeđuje ga servisu na port koji je u prvom koraku definiran kod ssh klijenta. Servis vraća odgovor na primljeni zahtjev te ga prosljeđuje sshd poslužitelju, koji ga putem SSH kanala vraća klijentskom dijelu aplikacije. SSH klijent prima odgovor i prosljeđuje ga servisu koji je inicirao sesiju.

Općenita sintaksa naredbe kojom se omogućuje tuneliranje odnosno preusmjeravanje protokola je: # ssh -f -L [local port]:[full name of remote host]:[remote port] [some command] Parametar -f nije obavezan, ali ga je poželjno navesti kako bi kreirani ssh tunel radio kao pozadinski proces. Na taj način nakon uspostave SSH tunela konzola

se oslobađa te je na taj način moguće zadavanje drugih naredbi. Ukoliko se ne proslijedi parametar -f nakon uspostave SSH kanala korisnik će morati preći u drugu konzolu ukoliko želi izvršavati naredbe na lokalnom računalu. Parametar -L služi za definiranje parametara postupka tuneliranja, odnosno za definiranje portova koji će biti preusmjereni. Način korištenja ovog parametra opisan je u primjeru koji slijedi. Ukoliko se ssh klijent želi pokretati kao pozadinski proces (parametar -f) neophodno je na kraju naredbe zadati naredbu koju će poslužitelj izvršiti nakon prihvaćanja sesije. U primjerima je u tu svrhu korištena naredba sleep koja ujedno korisniku daje dovoljno vremena da se klijent aplikacijom servisa koji se tunelira (telnet, FTP) spoji na udaljeno računalo. Naredba sleep kao argument prima broj sekundi koji će udaljeni proces biti spreman prihvatiti zahtjev klijenta. Primjer korištenja sleep naredbe također je opisan u primjeru koji slijedi. Primjer: U ovom primjeru prikazano je kako se može inače nesiguran i nekriptirani telnet protokol zaštiti SSH tuneliranjem. # ssh -f -L 5555:testing.zesoi.fer.hr:23 testing.zesoi.fer.hr sleep 20 Nakon zadane naredbe korisnika se traži unos zaporke ili passphrase niza (ovisno o načinu autentikacije), nakon čega je uspostavljena SSH veza sa udaljenim računalom (u ovom slučaju testing.zesoi.fer.hr). Nakon zadavanje ove naredbe ssh klijent (na računalu teuta.zesoi.fer.hr) uspostaviti će SSH sesiju s udaljenim računalom testing.zesoi.fer.hr. Nakon uspješne autentikacije korisnika sav promet koji stigne na port 5555 lokalnog računala biti će preko sigurnog SSH kanala preusmjeren na port 23 udaljenog računala (Slika 7.2) Port 5555 je proizvoljno odanbrani nezauzeti port. Prilikom odabira istog preporučuje se uzimanje nekog visokog porta koji nije korišten od strane nekih drugih aplikacija. Lista portova koji su zauzeti od strane drugih programa može se naći u datoteci /etc/services. Parametar -f omogućuje pokretanje ssh klijenta kao pozadinskog procesa, što nakon stvaranja sigurnog SSH kanala omogućuje oslobađanje konzole. Na taj način druge aplikacije (u ovom primjeru telnet) mogu se pokretati iz iste konzole, dok je za sve to vrijeme u pozadini prisutan SSH kanal između dva računala.

Slika 7.2 Tuneliranje telnet protokola U sljedećoj fazi korisnik se spaja lokalno telnet servisom na definirani 5555 port, nakon čega bi se trebao pojaviti odgovor poslužitelja s druge strane komunikacijskog kanala. Razlog tomu je taj što će kompletni promet na portu 5555 biti SSH sigurnim kanalom biti preusmjeren na port 23 udaljenog računala na kojemu je pokrenut telnet servis. Naredba sleep 20 na kraju naredbenog retka daje korisniku 20 sekundi vremena da se telnet servisom spoji na port 5555, budući da će toliko vremena biti otvoren SSH kanal prema udaljenom računalu. Nakon što se veza uspostavi u zadanom roku ista će biti prisutna sve dok korisnik ne terminira sesiju naredbom exit ili logout. sjusic@teuta:~$ telnet localhost 5555 Trying 127.0.0.1... Connected to teuta. Escape character is '^]'. testing.zesoi.fer.hr (Linux release 2.4.8-26mdk #1 Sun Sep 23 17:06:39 CEST 2001) (5) login: sjusic Password: Last login: Fri Mar 15 16:34:00 from lelna.zesoi.fer.hr You have new mail. [sjusic@testing sjusic]$ hostname testing.zesoi.fer.hr [sjusic@testing sjusic]$ [sjusic@testing sjusic]$ Kao što se može vidjeti na danom primjeru, spajanje na port 5555 lokalnog računala rezultirati će uspješnom uspostave veze telnet servisom na udaljeno računalo. Pokretanje ssh klijenta može se pokrenuti i bez -f opcije i u tom slučaju ne postoji vremensko ograničenje roka u kojem se klijent mora spojiti na udaljeno računalo preko stvorenog SSH kanala. # ssh -L 5555:testing.zesoi.fer.hr:23 testing.zesoi.fer.hr U ovom slučaju SSH kanal sa udaljenim računalom je stalno prisutan dok

korisnik ne upiše naredbu exit. Nedostatak ovog pristupa je taj što je konzola u kojoj je pokrenut ssh klijent cijelo vrijeme zauzeta. Ukoliko korisnik želi izvršavati druge naredbe na lokalnom računalu morat će preći u drugu konzolu. Pokušaj analiziranja mrežnog prometa u ovom slučaju neće rezultirati uspjehom, budući da je kompletni promet u ovom slučaju kriptiran, za razliku od normalnog telnet protokola. Slika 7.3 prikazuje kako izgleda kriptirani mrežni telnet promet preko SSH kanala.

Slika 7.3 Kriptirani telnet promet Tuneliranje telnet servisa teoretski nema previše smisla, budući da je SSH sam po sebi sigurna zamjena za telnet servis. Ovdje je telnet servis uzet samo kao primjer kako bi se korisnicima objasnio koncept tuneliranja. Na isti način moguće je bilo koji TCP protokol tunelirati kroz SSH kanal (POP, POP3, IMAP, FTP, i sl), samo je potrebno umjesto porta 23 navesti odgovarajući port servisa koji se želi tunelirati kroz sigurni kanal. Protokoli koji su najveći kandidati za SSH preusmjeravanje su oni koji ne implementiraju nikakve mehanizme zaštite podataka, a jedan od njih i je POP protokol. Tuneliranje POP protokola korisnicima će omogućiti sigurno primanje e-mail poruka, a način na koji je to moguće opisan je u nastavku.

8. Tuneliranje POP protokola Upravo opisana mogućnost tuneliranja, odnosno preusmjeravanja portova sigurnim SSH kanalom može se odlično iskoristiti za sigurno primanje e-mail poruka sa proizvoljno definiranog POP (POP3) poslužitelja. Jedini uvjet je da taj poslužitelj ima osim POP servisa pokrenut i sshd program poslužitelj. Za korisnike koji su nešto manje upoznati sa načinom funkcioniranja mail servisa, odnosno s mehanizmom slanja i primanja e-mail poruka, treba napomenuti kako je POP (POP3) jedan od protokola koji korisnici koriste za skidanje e-mail poruka sa njihovog mail poslužitelja. Budući da se POP protokolom podatci s udaljenim računalom razmjenjuju u čistom tekstualnom obliku, bez ikakve zaštite podataka, postoji velika opasnost od njihovog neovlaštenog promatranja. Na taj način neovlašteni korisnik promatranjem lokalnog mrežnog prometa može doći do povjerljivih korisničkih podataka kao što su korisnička imena i zaporke na POP poslužitelju, a također je moguć dolazak i do sadržaja samih e-mail poruka. Upravo je to osnovni razlog zašto je POP protokol jedan od osnovnih kandidata za preusmjeravanje kroz sigurni SSH kanal. U nastavku su opisani osnovni postupci koje je potrebno provesti kako bi se korisniku omogućilo sigurno primanje e-mail poruka na ovaj način. U primjeru koji slijedi pokazano je kako se preusmjeravanje portova može na odličan način iskoristiti na Windows računalima za sigurno skidanje pošte s udaljenog POP poslužitelja. U tu svrhu korišten je dobro poznati Outlook Express programski paket kao primjer podešavanja mail klijenta te SecureCRT ssh klijent za Windows sustave koji je u ovom slučaju iskorišten za uspostavljane sigurnog ssh kanala. SecureCRT SecureCRT je jedan od najpoznatijih ssh klijent programskih paketa za Windows operativne sustave. Program radi u standardnom Windows grafičkom okruženju i vrlo je jednostavan za korištenje.

Slika 8.1 Sučelje SecureCRT programskog paketa Implementirane su sve mogućnosti vezane za SSH protokol, što ga čini vrlo korisnim i praktičnim alatom za sve Windows korisnike. Uspostava veze SSH protokolom s udaljenim računalom vrlo je jednostavan postupak. Potrebno je odabrati File->Connect karticu, nakon čega se korisniku prikazuje lista ranije definiranih sesija koje je moguće pokrenuti (Slika 8.1).

Slika 8.2 Lista definiranih SSH sesija

Ukoliko se želi definirati nova sesija potrebno je u gornjem dijelu prozora pritisnuti gumb New Session (Slika 8.2), nakon čega se otvara korisničko sučelje za definiranje parametara nove veze (Slika 8.3).

Slika 8.3 Korisničko sučelje za definiranje nove sesije Na priloženoj slici mogu se uočiti brojni parametri koje je moguće podesiti za pojedinu sesiju. S lijeve strane prozora za podešavanje parametara pojedine veze nalazi se okvir u kojemu je moguće obaviti naprednija podešavanja ssh klijenta. Ovdje je tako moguće definirati preusmjeravanje TCP portova, preusmjeravanje X11 sesija, definiranje log datoteka, izgled prozora i slično. Nakon što je definirana nova SSH sesija moguće je istu odabrati unutar prozora koji se korisniku prikazuje nakon pritiska na karticu Connect (Slika 8.2). Pritiskom na istu pokreće se postupak spajanja na udaljeno računalo, nakon čega će se u kratkom vremenu od korisnika zatražiti da unese odgovarajuću korisničku zaporku (Slika 8.4). Ukoliko je ista ispravna sesija s udaljenim računalom je uspostavljena i korisnik može nastaviti rad na istome, s napomenom da je kompletni prijenos podatka između računala zaštićen odabranim algoritmom enkripcije podataka.

Slika 8.4 Sučelje za unos korisničkih podataka U primjeru koji slijedi SecureCRT programski paket iskorišten je za kreiranje sigurnog SSH kanala koji će se u sljedećoj fazi iskoristiti za tuneliranje POP protokola. Stvaranje sigurnog SSH kanala SecureCRT programom Kako bi se omogućilo preusmjeravanje POP ili bilo kojeg drugog protokola, potrebno je prvo kreirati sigurni SSH kanal. U ranije navedenom primjeru to se obavljalo u naredbenom retku slijedećom naredbom: # ssh -L 5555:testing.zesoi.fer.hr:23 testing.zesoi.fer.hr Za POP protokol ta ista linija izgledala bi ovako, # ssh -L 5555:testing.zesoi.fer.hr:110 testing.zesoi.fer.hr budući da POP3 protokol za komunikaciju koristi mrežni port 110. Istu stvar biti će potrebno definirati i kod SecureCRT programskog paketa samo što se u ovom slučaju kompletna podešavanja obavljaju putem grafičkog korisničkog sučelja. Biti će potrebno definirati zasebnu sesiju za koju će se definirati željeno preusmjeravanje portova (ono što je u gornjem primjeru učinjeno parametrom -L). U tu svrhu potrebno je odabrati karticu za definiranje nove sesije, nakon čega je potrebno podesiti odgovarajuće parametre.

Potrebno je definirati ime sesije (proizvoljno), zatim ime udaljenog računala na koje se želi spajati, korisničko ime korisnika, SSH port na koji se klijent spaja, odabir načina autentikacije i sl.

Slika 8.5 Definiranje parametar SSH tuneliranja Nakon toga potrebno je u okviru s lijeve strane odabrati opciju Port Forwarding označenu crvenom bojom na slici (Slika 8.5). Nakon toga potrebno je odabrati karticu Add, što će rezultirati otvaranjem prozora za definiranje parametara vezanih za tuneliranje veze (Slika 8.6).

Slika 8.6 Podešavanja tuneliranja POP protokola Nakon toga u Connect prozoru postojati će nova sesija pod imenom Tuneliranje POP protokola (Slika 8.7), koju je potrebno pokrenuti za uspostavu sigurnog SSH kanala s udaljenim računalom.

Slika 8.7 Pokretanje SSH sesije Pokretanjem sesije Tuneliranje POP protokola uspostavit će se veza s udaljenim računalom nakon čega će korisnik morati unijeti odgovarajuću zaporku SSH servisa. Nakon toga (ukoliko je zaporka ispravna) sigurni SSH kanal biti će uspostavljen između dva računala. Nakon ove faze može se prijeći na konfiguraciju mail klijenta kako bi isti znao iskoristiti upravo stvoreni SSH kanal. Podešavanje mail klijenta U ovdje navedenom primjeru opisano je podešavanje Outlook Express programskog paketa, popularnog mail klijenta za Windows operativne sustave. Kako bi se omogućilo tuneliranje POP protokola kroz ranije stvoren SSH kanal potrebno je definirati novi korisnički račun koji je potrebno ispravno podesiti za sigurno skidanje pošte s udaljenog mail poslužitelja. U tu svrhu potrebno je odabrati karticu Tools -> Accounts, gdje su izlistani svi podešeni korisnički računi (mail, news, ). Unutar toga prozora potrebno je dalje odabrati karticu Add-> Mail (Slika 8.8), nakon čega će se otvoriti prozor za podešavanje parametara mail korisničkog računa.

Slika 8.8 Podešavanje parametara novog korisničkog računa Pokretanjem postupka definiranja novog korisničkog računa uslijediti će niz pitanja o korisniku kao što su mail adresa, osobno ime i prezime i sl. Nakon toga biti će potrebno definirati ime poslužitelja koji će se koristiti za primanje i slanje e-mail pošte, naziv protokola (POP3) te korisničkog imena i zaporke korisnika. Ovdje je važno napomenuti da je u polje Incoming mail server potrebno obavezno upisati localhost vrijednost (Slika 8.9).

Slika 8.9 Definiranje mail poslužitelja To znači da će se Outlook Express mail klijent prilikom skidanja pošte (kada korisnik pritisne na karticu Recieve) spajati na lokalno, a ne na udaljeno računalo na kojem se nalazi POP poslužitelj. Ukoliko se još pravilno podesi port na lokalnom računalu na koji će se klijent spajati prilikom skidanja pošte, biti će omogućen prijenos podataka POP protokolom putem sigurnog SSH kanala. Da bi se na ispravan način prilagodio port POP protokola na koji se klijent spaja potrebno je odabrati karticu Properties za definirani korisnički račun (Slika 8.8), nakon čega će se pojaviti odgovarajući prozor unutar kojega se mogu modificirati parametri odabranog korisničkog računa. Unutar tog prozora potrebno je odabrati Advanced karticu gdje se definiraju parametri protokola kojim se dobavlja mail pošta ( u ovom slučaju POP). Na tome mjestu potrebno je definirati isti onaj lokalni port koji je prilikom podešavanja SecureCRT programa odabran kao onaj koji će se biti preusmjeren kroz sigurni SSH kanal. U danom primjeru to je bio port 5555 (Slika 8.10). Ukoliko sada korisnik pokrene postupak skidanja pošte putem novo definiranog korisničkog računa (pritiskom na karticu Recieve), kompletni POP promet odvijati će se putem postojećeg SSH kanala. Treba napomenuti da SSH sesija s udaljenim računalom treba biti uspostavljena u svakom trenutku skidanja mail pošte, budući da je to put kojim se podatci prenose između dva računala.Na sličan način može se podesiti i sigurno slanje pošte te siguran pristup News servisu. U slučaju sigurnog slanja pošte potrebno je unutar Outgoing Mail server polja (Slika 8.9) navesti localhost te unutar Advanced kartice (Slika 8.11) odabrati odgovarajući port putem kojeg će se tunelirati SMTP protokol za slanje pošte. Zabtuneliranje SMTP protokola potrebno je odabrati neki drugi nezauzeti mrežni

port (npr. 5556).

Slika 8.10 Tuneliranje POP protokola Nakon toga potrebno je ssh (SecureCRT) klijentom uspostaviti sigurni SSH kanal s udaljenim računalom preko toga istoga porta, (u primjeru port 5556) na način kako je to opisano u ovome poglavlju. Moguće je naravno definirati jedan korisnički račun koji će koristiti istovremeno tuneliranje POP i SMTP protokola. U tom slučaju biti će potrebno stvoriti dva sigurna SSH kanala sa poslužiteljem. Jedan tunel koristit će se za tuneliranje POP protokola (port 5555), dok će se drugi kanal koristiti za tuneliranje SMTP protokola (port 5556). Treba spomenuti jedan maleni nedostatak kod opisane mogućnosti tuneliranja protokola. U svakom trenutku kada se žele primati ili slati e-mail poruke ovim putem potrebno je u pozadini imati stvorene SSH tunele s udaljenim poslužiteljem. To znači da je prije pritiska na karticu Send/Receive, potrebno bilo kojim SSH klijentom kreirati spomenute SSH tunele, jer se u suprotnom mail klijent neće moći spojiti na POP i SMTP poslužitelje. Što se tiće brzine rada, tijekom testiranja nisu primjećeni nikakvi ozbiljniji problemi kao posljedica tuneliranja protokola.

Slika 8.11 Tuneliranje SMTP protokola Ukoliko se želi tunelirati NNTP protokol koji se koristi za pristup News servisu potrebno je na sličan način podesiti svoj klijent program na način kako je to opisano za POP protokol. Iako je u primjeru korišten MS Outlook Express programski paket, ovdje iznesene napomene vrijede i za gotovo sve ostale klijent programe ovog tipa.

9. Tuneliranje FTP protokola Ručno tuneliranje FTP protokola na način kako je to opisano u ovom poglavlju nešto je kompleksnije u odnosu na ostale protokole kao što su telnet, POP, NNTP i drugi. Razlog tomu je taj što FTP konekcija koristi dva porta za komunikaciju, jedan kontrolni i jedan podatkovni, a stvar se dodatno komplicira budući da postoje dva moda rada FTP protokola aktivni i pasivni. Korištenja dva porta umjesto jednoga korisniku u određenoj mjeri otežava postupak podešavanja tuneliranja FTP protokola. Ovdje se neće razmatrati način rada FTP protokola, budući da to izlazi van tematskog područja ove dokumentacije. Biti će opisani načini na koji se može ssh programski paket iskoristiti za sigurnije korištenje FTP protokola, budući da FTP slično kao i telnet servis podatke mrežom šalje u čistom tekstualnom obliku. Sftp je program koji dolazi u paketu s openssh programskim paketom, a omogućuje sigurnije korištenje FTP protokola pomoću SSH protokola. Korištenje sftp programa preporučuje se svim korisnicima kao sigurnija zamjena za tradicionalni FTP servis. Korištenje programa je vrlo jednostavno, budući da su sve naredbe naslijeđene od običnog FTP protokola. Kako bi se uspostavila sigurna veza FTP protokolom s udaljenim računalom dovoljno je upisati naredbu # sftp Primjer: Uspostava veze sftp programskim paketom. [sjusic@testing sjusic]$ sftp teuta.zesoi.fer.hr Connecting to teuta.zesoi.fer.hr... Warning: Permanently added 'teuta.zesoi.fer.hr' (RSA) to the list of known hosts. [email protected]'s password: sftp> ls drwxr-sr-x 16 sjusic sjusic 4096 Mar 13 18:58 . drwxrwsr-x 6 root staff 4096 Mar 15 20:21 .. -rw-r--r-- 1 sjusic sjusic 504 Feb 1 19:42 .bashrc -rw-r--r-- 1 sjusic sjusic 373 Feb 1 19:42 .bash_profile -rw-r--r-- 1 sjusic sjusic 174 Feb 1 19:42 .bash_logout -rw-r--r-- 1 sjusic sjusic 266 Feb 1 19:42 .alias -rw-r--r-- 1 sjusic sjusic 375 Feb 1 19:42 .cshrc drwxr-sr-x 2 sjusic sjusic 4096 Feb 1 19:42 .netscape Na ovom primjeru može se uočiti kako se kompletni prijenos podatak odvija preko SSH protokola, budući da se autentikacija korisnika odvija na temelju RSA para javni/tajni ključ. Na priloženoj slici može se uočiti kako je kompletni promet između dva računala kriptiran, što neovlaštenim korisnicima otežava dolazak do povjerljivih informacija drugih korisnika (Slika 9.1).

Slika 9.1 Kriptirani FTP promet S openssh programskim paketom dolazi i scp (Secure Copy) program koji također omogućuje sigurno kopiranje datoteka između lokalnog i udaljenog računala. Sigurno kopiranje datoteka bazira se na korištenju SSH protokola, odnosnu kriptiranju podataka koji se prenose računalnom mrežom. Korištenje scp naredbe je vrlo slično korištenju klasične cp Linux/Unix naredbe s jedinom razlikom što se kopiranje odvija između udaljenih računala. U nastavku je dano nekoliko primjera korištenja scp naredbe. Primjer: # scp local_dir/filename myname@host:remote_dir Gore navedena naredba rezultirati će kopiranjem datoteke filename unutar lokalnog direktorija local_dir u direktorij remote_dir na udaljenom računalu host. Myname parametar definira korisničko ime korisnika na udaljenom računalu. # scp local_dir/* myname@host1:remote_dir Slično kao i u gornjem primjeru samo što se kopira kompletni sadržaj direktorija local_dir. Primjer: Dan je primjer kopiranja sadržaja home direktorija korisnika sjusic sa lokalnog računala (test1), u home direktorij istog korisnika na računalo test2

#scp /home/sjusic/* sjusic@test2:/home/sjusic Za kompletne upute o načinu korištenja i mogućnostima scp programa korisniku se preporučuje čitanje njegova man stranice. Osim sigurnosti koju nude, dodatna prednost sftp i scp programa je ta što ne zahtijevaju instalaciju dodatnih programa poslužitelja na udaljenom računalu. Razlog tomu je taj što oba programa svoj rad baziraju na SSH protokolu te kao takvi koriste sshd poslužitelj. 9.1. WinSCP programski paket WinSCP (Secure CoPy) je besplatni programski paket za Windows operativne sustave (Win 98/95/NT/2000/ME/XP), koji omogućuje kopiranje datoteka između lokalnog i udaljenog računala. Instalaciju programa moguće je skinuti na stranici http://www.freedownloadscenter.com/Network_and_Internet/FTP_and_Archie_C Program svoj rad bazira na ranije spomenutom SCP (Secure Copy) protokolu koji dolazi kao dio ssh paketa. Podržane su obje verzije SSH protokola (SSH1 i SSH2) te autentikacija korisnika na temelju RSA para javni/tajni ključ odnosne zaporke korisnika. Program je vrlo jednostavan za korištenje, a grafičko sučelje se može usporediti sa većinom ostalih grafičkih FTP klijent aplikacija. Nakon pokretanja programa otvara se korisničko sučelje u koje je potrebno upisati ime udaljenog računala na koje se korisnik želi spojiti te odgovarajuće korisničko ime i zaporku (Slika 9.2).

Slika 9.2 Login prozor Nakon što su uneseni valjani parametri program će uspostaviti vezu s navedenim računalom te će se korisniku prikazati glavni prozor WinSCP programa. Glavni prozor podijeljen je na dva osnovna dijela. S lijeve strane prikazana je datotečni sustava lokalnog računala, dok se s desne strane nalazi datotečni sustav udaljenog računala (Slika 9.3). Jednostavnim odabirom pojedinih datoteka moguće ih je kopirati, pomicati te provoditi druge slične radnje.

Slika 9.3 Korisničko sučelje WinSCP programa Da bi se moglo uspješno WinSCP klijent aplikacijom uspostaviti veza s udaljenim računalom, potrebno je na njemu imati pokrenut sshd program poslužitelj, budući da se kompletna veza odvija putem SSH protokola.

10. Tuneliranje X11 aplikacija Na sličan način kao i kod ostalih protokola moguće je tunelirati i X11 sesije putem SSH kanala. U tu svrhu potrebno je na klijentskom računalu pokrenuti SSH klijenta sa sljedećim parametrima: # ssh -f -X -l Parametar -f omogućuje pokretanje ssh klijenta kao pozadinskog procesa, -X parametar omogućuje tuneliranje X11 protokola, dok -l parametar standardno označava korisničko ime korisnika. Kao zadnji parametar potrebno je navesti ime aplikacije koja se želi pokrenuti na udaljenom računalu. Također je potrebno na udaljenom računalu na kojem se žele pokretati X aplikacije dodati datoteku pod imenom enviroment u home direktorij korisnika koji ih želi pokretati. Datoteka mora imati sljedeći sadržaj: XAUTHORITY=/home/sjusic/.Xauthority Primjer:

# ssh -f -X -l sjusic testing xterm Gore navedena naredba pokrenuti će X terminal xterm na udaljenom računalu testing.zesoi.fer.hr pod ovlastima korisnika sjusic. Svim korisnicima koji žele na bilo koji način pokretati X aplikacije na udaljenom računalu preporučuje se korištenje ovog načina, budući da je u ovom slučaju kompletni promet kriptiran. Pokretanje X aplikacija na udaljenom računalu vrlo je praktično rješenje u određenim situacijama, s jednom manom što se i ovdje kompletni promet šalje u čistom tekstualnom obliku. Udaljeno izvršavanje aplikacija na ovaj način može biti vrlo nesigurno rješenje budući da neovlašteni korisnik može analizirati kompletni promet između računala. Upravo je to osnovni razlog zašto se svim korisnicima preporučuje sigurno izvođenje X aplikacija na ovaj način. Treba napomenuti da se gore navedene naredbe mora zadati u grafičkoj konzoli (pod X sustavom), ukoliko se želi uspostaviti X sesija s udaljenim računalom.

11. Zaključak U ovom poglavlju dan je kratki pregled osnovnih karakteristika SSH protokola te neke od mogućnosti njegove primjene. Opisani su temeljni programski paketi neophodni za korištenje istoga kao i osnovni postupci njihove konfiguracije. Kako se moglo vidjeti osnovna namjena ovog protokola je da omogući kreiranje sigurnih sesija između dva računala. Na taj način uklanja se najveći nedostatak mrežnih servisa kao što su telnet, ftp i njima slični, a to je nezaštićenost prijenosa podataka. Podaci se kod takovih protokola prenose računalnom mrežom u čistom tekstualnom obliku što neovlaštenim korisnicima omogućuje jednostavan dolazak do povjerljivih korisničkih informacija. Upravo zato se svim korisnicima preporučuje prelazak na sigurnije implementacije istih servisa, korištenjem SSH protokola. Iz istih razloga poseban naglasak dan je na sigurnosnim svojstvima ovog protokola, što je ujedno i njegova najveća snaga.

Related Documents

Ssh
November 2019 46
Ssh
December 2019 69
Ssh Copy
November 2019 41
Ppp-ssh
June 2020 24
Ssh Linux
November 2019 44
Ssh Install
June 2020 18