User Tools

Site Tools


ssh_kriptosistem

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ssh_kriptosistem [2017/04/28 10:25] (current)
Line 1: Line 1:
 +\\
 +U [[http://​www.onlamp.com/​pub/​a/​bsd/​2002/​10/​31/​FreeBSD_Basics.html|zadnjem clanku]], naucili smo da se kriptosistem koristi da zastiti privatnost, integritet, i autenticnost podataka dok putuju mrezom. U danasnjem clanku, videcemo kako SSH kriptosistem omogucava ove opcije. ​
 +
 +Ako koristite FreeBSD noviji od verzije 4.0, vas FreeBSD sistem koristi OpensSSH koji je instaliran i spreman. Kao sto to i ime upucuje, ovo je open source implementacija SSH kriptosistema. Mozete saznati vise na [[http://​www.openssh.org/​|OpenSSH web stranici]]. ​
 +
 +U proslom clanku (pogledajte [[http://​www.onlamp.com/​pub/​a/​bsd/​2001/​03/​26/​FreeBSD_Basics.html|IP Packets Revealed]]),​ demonstrirali smo kako se telnet moze koristiti da se ulogujete na udaljeni racunar sa drugog sistema. Kada se ulogujete, korisnik moze uciniti sve na tom udaljenom sistemu kao da fizicki sedi ispred njega. To znaci, svaki pritisak tastera na tastaturi se salje udaljenom sistemu i tretira se kao da je dosao sa tastature koja je prikacena na taj udaljeni sistem (iako je taj unos na tastaturi prvo morao da putuje preko mreze). Isto tako u clanku smo videli da se svaki pritisak dirke na tastaturi i odgovor na nju salje u formi cistog teksta, sto znaci da neko ko slusa moze da prati celi tok sesije. ​
 +
 +Svaki SSH kriptosistem ce omoguciti korisniku da se uloguje na udaljeni sistem i radi kao da je fizicki prisutan tamo. Ali, pre nego sto se korisniku prikaze login prompt, generise se kljuc za enkriptovanje i dekriptovanje svih podataka koji ce se kretati izmedju dva kompjutera. ​
 +
 +Posto se SSH koristi za pristup drugom kompjuteru, mora da postoji korisnicki nalog na kompjuteru kojem se pristupa. Kompjuter kojem se pristupa se naziva SSH server i mora da ima pokrenut SSH daemon; podrazumevano,​ ovaj daemon slusa na TCP portu 22. Masina za kojom sedite se naziva SSH klijent; i kontaktira daemona na drugoj masini. ​
 +
 +Vas FreeBSD sistem je podrazumevano konfigurisan da vam dozvoli da koristite SSH. Prvo cemo demonstrirati podrazumevanu konfiguraciju,​ i onda prelaziti na neke promene koje cete zeleti da uradite da bi povecali sigurnost SSH. 
 +
 +Koristicemo dva kompjutera. 10.0.0.1 ce biti SSH daemon, kompjuter kome zelimo da pristupimo, i 10.0.0.2 koji ce biti SSH klijent, kompjuter ispred kojeg sedimo. Na oba sistema, kreirali smo korisnicki nalog "​genisis"​. Primeticete da se kriptosistem naziva OpenSSH. Koristi protocol obicno napisan kao SSH velikim slovima, i komande koje kucate, ssh i sshd, su napisane malim slovima. Mozete koristiti ssh komandu da pristupite IP adresi ili imenu hosta. U ovonedeljnom clanku, namerno cemo koristiti IP adrese. U sledecem clanku blize cemo pogledati probleme rezolucije imena kada se koristi SSH. 
 +
 +Prvo, provericemo dali su host kljucevi kreirani na sistemu koji ce biti server. Na 10.0.0.1, pokrenucemo ovu komandu:
 + 
 +  ls /etc/ssh
 +
 +Ako dobijemo sledece: ​
 +
 +  moduli ssh_host_dsa_key.pub ssh_host_rsa_key
 +  ssh_config ssh_host_key ssh_host_rsa_key.pub
 +  ssh_host_dsa_key ssh_host_key.pub sshd_config
 +
 +onda imamo neophodne kljuceve. Ali, ako dobijemo sledece: ​
 +
 +  moduli ssh_config sshd_config
 +
 +ne postoje nikakvi host kljucevi i moracemo ih generisati pre nego sto startujemo SSH daemon. Ako smo nestrpljivi i pokusamo da pokrenemo SSH daemon pre kreiranja kljuceva, odbice da se pokrene i umesto toga cemo dobiti ovu gresku: ​
 +
 +  sshd
 +  Could not load host key: /​etc/​ssh/​ssh_host_key
 +  Could not load host key: /​etc/​ssh/​ssh_host_dsa_key
 +  Disabling protocol version 1. Could not load host key
 +  Disabling protocol version 2. Could not load host key
 +  sshd: no hostkeys available -- exiting.
 +
 +Postoji nekoliko nacina za generisanje tih kljuceva. Ako ste napredan korisnik kome nije tesko da cita startup skripte, potrazite ssh u ''/​etc/​rc.network''​ da vidite koje komande vas FreeBSD sistem koristi da generise host kljuceve. Umesto toga demonstriracemo rezultat pokretanja te skripte. Najlaksi nacin da se neophodni kljucevi generisu i da se SSH pokrene zajedno sa sistemom je da se doda sledeca linija u ''/​etc/​rc.conf'': ​
 +
 +  sshd_enable="​YES"​
 +
 +Kada sacuvamo promene, kucamo: ​
 +
 +  shutdown now
 +
 +Kada dobijemo prompt, pritisnucemo enter i ukucati exit. Dok se startup skripte pokrecu ponovo, videcemo sledecu poruku: ​
 +<​code>​
 +Starting final network daemons: creating ssh1 RSA host key
 +Generating public/​private rsa1 key pair.
 +Your identification has been saved in /​etc/​ssh/​ssh_host_key.
 +Your public key has been saved in /etc/ ssh/​ssh_host_key.pub.
 +The key fingerprint is:
 +12:​d9:​3d:​f3:​95:​92:​0e:​e7:​6b:​54:​09:​80:​77:​a0:​3e:​cf root@hostname
 +creating ssh2 RSA host key
 +Generating public/​private rsa key pair.
 +Your identification has been saved in /​etc/​ssh/​ssh_host_rsa_key.
 +Your public key has been saved in /​etc/​ssh/​ssh_host_rsa_key.pub.
 +The key fingerprint is:
 +4b:​cf:​7e:​af:​f1:​a8:​01:​08:​64:​1b:​c0:​79:​e3:​a2:​58:​78 root@hostname
 +creating ssh2 DSA host key
 +Generating public/​private dsa key pair.
 +Your identification has been saved in /​etc/​ssh/​ssh_host_dsa_key.
 +Your public key has been saved in /​etc/​ssh/​ssh_host_dsa_key.pub.
 +The key fingerprint is:
 +22:​69:​d7:​05:​23:​c6:​db:​d9:​55:​2a:​20:​a3:​34:​bd:​f4:​ef root@hostname
 +</​code>​
 +Pogledajmo sada ovaj izlaz. Primeticete das u generisana tri odvojena para kljuceva: jedan za rsa1, jedan za rsa, i jedan za dsa. Prepoznacete RSA i DSA akronime iz zadnjeg ckanka o kriptografskim terminima. Ali zasto toliko para kljuceva? Postoje dve verzije SSH protokola, i OpenSSH podrzava oba. Naravno rsa1 par kljuceva koristi SSH verzije 1. Iz izlaza mozete videti da ssh2 (verzija 2) podrzava i RSA i DSA. 
 +
 +Svaki kljuc u paru kljuceva se cuva u posebnom fajlu. Mozete prepoznati fajlove javnih kljuceva, zato sto imaju .pub ekstenziju. Svaki javni kljuc ima dodeljeni fingerprint koji je jedinstven za taj kljuc. Videcemo taj fingerprint opet. 
 +
 +Ne samo da su se neophodni kljucevi generisali, nego se i SSH daemon startovao. Ovo se moze proveriti sockstat komandom: ​
 +
 +  sockstat | grep ssh
 +  ​
 +  root     ​sshd ​    ​69820 ​   3 tcp4   ​*:​22 ​                 *:*                  ​
 +  root     ​sshd ​    ​69820 ​   3 tcp46  *:22                  *:*
 +
 +Dobro, sada kad 10.0.0.1 slusa na portu 22, pogledajmo sta se dogadja kada koristimo ssh komandu sa 10.0.0.2 kao korisnik genisis: ​
 +
 +  ssh 10.0.0.1
 +  The authenticity of host '​10.0.0.1 (10.0.0.1)'​ can't be established.
 +  DSA key fingerprint is 22:​69:​d7:​05:​23:​c6:​db:​d9:​55:​2a:​20:​a3:​34:​bd:​f4:​ef.
 +  Are you sure you want to continue connecting (yes/no)? yes
 +  Warning: Permanently added '​10.0.0.1'​ (DSA) to the list of known hosts.
 +  Password:
 +
 +Kada ukucamo ispravnu lozinku za korisnika genisis, prikazace se motd i uredjeni prompt. Onda kucamo "​exit"​ da zavrsimo sesiju: ​
 +
 +  exit
 +  logout
 +  Connection to 10.0.0.1 closed.
 +
 +Sada cemo ponoviti po drugi put: 
 +
 +  ssh 10.0.0.1
 +  Password:
 +
 +Odvojimo sada sta se ovde desilo. Prvi put kada smo koristili SSH, bili smo upitani da verifikujemo fingerprint serverovog DSA javnog kljuca. Kada smo dva puta proverili da je ispravan i ukucali yes, kopija serverovog javnog kljuca je smestena na klijentu ili 10.0.0.2: ​
 +<​code>​
 +more ~genisis/​.ssh/​known_hosts
 +10.0.0.1 ssh-dss AAAAB3NzaC1kc3MAAACBAPiOFgV4PpsbXfkaxGD+hCr02Cv9P3OJDKfaXge059
 +cSohLN/​n/​kd2Nz/​E1mDvT4Y8nSAQL7M667iMeqJ0WTpcdI59ktuPtvOsYBc7SNoJ6aPqqoKo682mAfC
 +NpUFZ3jirbWGFnaF3WpJsWFyeOY6vyD4hVT6CkunL2ovoYSJND7AAAAFQDjZ2TNBixZByXB+h00wxCN
 +tHZ8zQAAAIEAl4lePs+e5v9f1H93l2GLXtxXhXyasr+X42HnKgKQTMR+iLgxhtD0Eb/​ftTMK+n2ECn9
 +3MwCNTgx5tdGX06dyBdK5xEfjV4tJnmnP42UweBwOHKpRkNLiMBN4onh7KKXjhXWmH0MpO5fhaHy6k0
 +f+yTTLckCKd2IO/​TgGJitjlo4AAACBAM+3JMr8M+MQoa6D7BU0pNJVGoTmGdxrLotMNLmUdqM0xIFKr
 +3dBrgqY+gsDciQEG1CSqDDhusrkz3LRBmnuG68tE7WPPjzGZrT46ZYCmMeZume67xVN0dDd57BuxmhK
 +B7iKvmlM0v+EkvJ0XTlNCwBTWuU3cdTdhkWT7swxGhvf
 +</​code>​
 +Sledeci put kada smo koristili SSH, serverov javni kljuc je uporedjen sa kopijom tog kljuca na klijentu; posto su isti, SSH zna da se povezujem sa ispravnim serverom tako da nisam upitan da ponovo verifikujem fingerprint. Umesto toga, samo smo dobili login prompt na serveru. ​
 +
 +Zakljucimo sada sta se desava iza scene: ​
 +
 +  -ssh kontaktira ssh server na portu 22
 +  -ssh server salje ssh klijentu kopiju svog javnog kljuca da bi dokazao svoj intenditet
 +  -ssh klijent uporedjuje serverov javni kljuc sa svojom kopikom serverovog javnog kljuca. Ako ne poseduje kopiju serverovog kljuca, onda pita korisnika da verifikuje fingerprint
 +  -Kada je server autorizovan,​ kreira se kljuc koji ce se koristiti za sifrovanje i desifrovanje podataka koji se salju izmedju klijenta i servera
 +  -Sada je red na korisnika da se autorizuje; podrazumevano,​ server ce zatraziti korisnicku lozinku koja ce biti poslata sifrovano
 +  -Kada se korisnik autorizuje, dobice svoj shell na drugom sistemu, i svi podaci poslati izmedju dva sistema ce biti sifrovani
 +
 +OpenSSH podrzava i druge metode autentifikacije,​ ali ovo se desava u podrazumevanoj konfiguraciji na vasem FreeBSD sistemu. Mozda ste primetili da je server poslao svoj DSA javni kljuc, sto znaci da je koristio SSH verziju 2. Ovo je dobar pocetak, zato sto je verzija 2 sigurnija nego verzija 1. 
 +
 +Mozda ste primetili i da korisniku nije potreban par kljuiceva u podrazumevanoj konfiguraciji,​ vec samo lozinka. Hajde da to promenimo. Prvo, moramo da generisemo par kljuceva za korisnika genisis koristeci ssh-keygen komandu na 10.0.0.2: ​
 +<​code>​
 +ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​home/​genisis/​.ssh/​id_rsa): ​
 +Enter passphrase (empty for no passphrase): ​
 +Enter same passphrase again: ​
 +Your identification has been saved in /​home/​genisis/​.ssh/​id_rsa.
 +Your public key has been saved in /​home/​genisis/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +fd:​5a:​cc:​cf:​a9:​f0:​ea:​9c:​93:​ea:​1a:​04:​48:​b1:​47:​14 genisis@hostname
 +</​code>​
 +Kada koristite ''​ssh-keygen'',​ morate da koristite ''​t''​ opciju da odredite koji par kljuceva da kreirate. Posto je SSH verija 2 sigurnija nego verzija 1, i posto je RSA sigurniji od DSA, odabrali smo da kreiramo RSA par kljuceva SSH verzije 2. Upitani smo i za passphrase koja ce se ubuduce koristiti da dokaze da ste vlasnik para kljuceva, ili, jos vaznije, privatnog kljuca. passphrase je slican lozinci, ali treba da bude duzi ali i da se upamti. Kad god budem zeleo da koristim privatni kljuc, bicu upitan za passphrase. Ako ikada zaboravim passphrase, moracu da generisem novi par kljuceva. ​
 +
 +Zapamtite da je javni kljuc u paru kljuceva i namenjen da bude javan a na vama je da osigurate na privatni kljuc ostane privatan. Pogledajmo podrazumevane dozvole za ove kljuceve: ​
 +
 +  ls ~genisis/​.ssh
 +  total 4
 +  -rw------- ​ 1 genisis ​ genisis ​ 951 Nov  9 15:00 id_rsa
 +  -rw-r--r-- ​ 1 genisis ​ genisis ​ 247 Nov  9 15:00 id_rsa.pub
 +
 +Privatni kljuc, id_rsa, je dostupan samo korisniku genisis. Javnom kljucu, id_rsa.pub, mogu pristupati svi. Ako koristimo file alatku, videcemo da su oba fajla ASCII tekst, sto znaci da se mogu pregledati: ​
 +
 +  file ~genisis/​.ssh/​*
 +  id_rsa: ​    ASCII text
 +  id_rsa.pub: ASCII text
 +
 +<​code>​more id_rsa.pub
 +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA1gfc4NRnq9K17TLqhhKT3L6feKUttHTJvM054k+WhjI
 +vsdt4YoeNa3m6lplnOxwOh2w6o+xu+xuiHa/​CQkvkAdxFU1ZGtnxtQWV06QJdodUEk55U/​0y417TaDF
 +H1aYjsgPPSpjulKCLQv263C9KOSpjDrjZ74ZLOlQHtsJINY2c= genisis@hostname
 +</​code>​
 +Primetite da sam vam prikazao samo moj javni kljuc, ne i moj privatni kljuc. ​
 +
 +Kreiranje para kljuceva nije dovoljno. Jos uvek moram da kopiram moj javni kljuc u moj home direktorijum na SSH serveru. Kada server bude imao kopiju mog javnog kljuca, kad god budem koristio SSH zatrazice moj javni kljuc tako da moze da ga uporedi sa njegovom kopijom. Ako su isti, bicu autorizovan. ​
 +
 +Koristicu scp ili secure copy komandu da kopiram kljuceve na server. Ova alatka dolazi sa OpenSSH i dozvoljava vam da prenesete fajlove preko sifrovane sesije. Njegova sintaksa je slicna regularnoj cp komandi; jedina razlika je da odredisni fajl pocinje sa IP adresom masine na koju hocete da kopirate fajl, pa onda dve tacke, praceno sa imenom koje hocete da fajl dobije kada se prekopira. ​
 +
 +Znaci, na 10.0.0.2, izdacu sledecu komandu da kopiram moj javni kljuc na server: ​
 +
 +  scp ~/​.ssh/​id_rsa.pub 10.0.0.1:​~/​.ssh/​authorized_keys
 +  Password:
 +  id_rsa.pub:​ 100% |***************************| ​  ​247 00:​00
 +
 +Primetite da sam bio pazljiv i kopirao moj javni kljuc, a ne privatni kljuc; to jest, odabrao sam fajl sa .pub ekstenzijom. Morao sam i da promenim ime odredisnog fajla u ~/​.ssh/​authorized_keys. Bio sam upitan za svoju lozinku na odredisnom sistemu pre nego sto je kopiranje pocelo. ​
 +
 +Sada kada je moj javni kljuc kopiran, pokusacu jos jednom da se konektujem preko SSH: 
 +
 +  ssh 10.0.0.1
 +
 +Ovog puta, nisam bio upitan za lozinku. Umesto toga, posto je moj javni kljuc ispravan, odmah sam dobio moj shell prompt na serverskoj masini. Iako se cini da je manje bezbedno da vam se ne zatrazi nista, autorizacija javnim kljucem je sigurnija nego autorizacija lozinkom. Ali, bezbednost sistema i dalje zavisi od vas. Kao sto ne dajete svoju lozinku ostalim korisnicima,​ nemojte ostalim korisnicima davati vas privatni kljuc niti vas passphrase. Ako ikada posumnjate da je vas privatni kljuc kompromitovan,​ generisite novi par kljuceva koristeci drugi passphrase i kopirajte novi javni kljuc do SSH servera. ​
 +
 +Kada koristite ssh, ne morate da budete ulogovani istim nalogom na klijent masini sa kojim zelite da pristupite server masini. Na primer, ako sam trenutno ulogovan kao biko ali zelim da pristupim genisis nalogu na serverskoj masini, mogu da koristim l opciju ili login opciju na klijentu: ​
 +
 +  ssh -l genisis 10.0.0.1
 +
 +Isto tako mogu da koristim i ovu komandu: ​
 +
 +  ssh genisis@10.0.0.1
 +
 +Posto ne postoji kopija genisisovog javnog kljuca u home direktorijumu bika, bicu upitan za lozinku. Moracu da upisem lozinku za korisnika genisis, ne za korisnika biko. Iako je malo teze zapamtiti ko sam zapravo na svakom sistemu, to znaci da ne moram da kreiram korisnicki nalog genisis na obe masine. ​
 +
 +Pogledajmo sada sta se desava ako pokusam da koristim SSH sa superuser naloga: ​
 +
 +  ssh 10.0.0.1
 +  Password:
 +  Password:
 +  Password:
 +  root@10.0.0.1'​s password:
 +  Permission denied. Please try again.
 +  root@10.0.0.1'​s password:
 +  ^c
 +
 +Iako sam ukucao tacnu lozinku za superuser nalog, pristup je odbijen. Ovo je veoma dobro. Kao sto se nikada ne trebate direktno logovati kao root, nemojte nikada da koristite ssh da se povezete na drugi sistem koristeci root nalog. Ako vam treba superuser pristup udaljenom sistemu, koristite ssh preko regularnog korisnickog naloga koji ima dozvolu da postane superuser kada se bude ulogovao na udaljeni sistem. ​
 +
 +Da bi promenili i ostale podrazumevane opcije, pogledacemo blize parameter u SSH konfiguracionim fajlovima. Ostavimo to za drugi put. U medjuvremenu,​ mozete zaviriti u man stranice za ''​ssh_config''​ i ''​sshd_config''​. Isto tako i [[http://​www.employees.org/​%7Esatch/​ssh/​faq/​ssh-faq.html|ssh FAQ]] moze biti interesantan.
 +
 +\\
 +\\
 +Izvor: http://​www.onlamp.com/​pub/​a/​bsd/​2002/​11/​14/​FreeBSD_Basics.html
 +
  
ssh_kriptosistem.txt ยท Last modified: 2017/04/28 10:25 (external edit)