This shows you the differences between two versions of the page.
uso:laboratoare:laborator-05:services [2021/11/02 00:46] liza_elena.babu [Conectarea folosind autentificare cu chei] |
uso:laboratoare:laborator-05:services [2023/11/02 19:54] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Servicii și clienți de rețea ====== | ====== Servicii și clienți de rețea ====== | ||
- | Dispozitivele pe care le folosim noi devin din ce în ce mai mici, mai eficiente și ieftine. Asta se întâmplă deoarece multe dintre aplicațiile care până nu de curând rulau pe calculatorul propriu s-au mutat în spațiu online. De exemplu, în loc să descărcăm filme și să le urmărim de pe calculator, folosim o aplicație cum ar fi Netflix pentru a transmite prin Internet filmul pe care vrem să îl urmărim. Un alt exemplu relevant este Google Drive, care ne permite să stocăm, să replicăm și să edităm documente într-o interfață web, în loc să le păstrăm local pe calculatorul pe care îl folosim. Toată puterea de procesare și tot spațiul de stocare s-a mutat de pe calculatorul propriu pe servere aflate în Internet. | + | Dispozitivele pe care le folosim noi devin din ce în ce mai mici, mai eficiente și ieftine. Asta se întâmplă deoarece multe dintre aplicațiile care până nu de curând rulau pe calculatorul propriu s-au mutat în spațiu online. De exemplu, în loc să descărcăm filme și să le urmărim de pe calculator, folosim o aplicație cum ar fi Netflix pentru a ne transmite prin Internet filmul pe care vrem să îl urmărim. Un alt exemplu relevant este Google Drive, care ne permite să stocăm, să replicăm și să edităm documente într-o interfață web, în loc să le păstrăm local pe calculatorul pe care îl folosim. Toată puterea de procesare și tot spațiul de stocare s-a mutat de pe calculatorul propriu pe servere aflate în Internet. |
Vom numi aceste aplicații care rulează în Internet **servicii**. | Vom numi aceste aplicații care rulează în Internet **servicii**. | ||
Line 53: | Line 53: | ||
* Deschideți într-un editor de text pagina web descărcată pentru a vedea conținutul HTML. | * Deschideți într-un editor de text pagina web descărcată pentru a vedea conținutul HTML. | ||
* Descărcați pagina web de la adresa ''%%www.facebook.com%%''. Afișați conținutul fișierului descărcat. | * Descărcați pagina web de la adresa ''%%www.facebook.com%%''. Afișați conținutul fișierului descărcat. | ||
- | |||
<note> | <note> | ||
Line 60: | Line 59: | ||
* Descărcați pagina web de la adresa ''%%http://wttr.in/%%''. Afișați conținutul fișierului descărcat. | * Descărcați pagina web de la adresa ''%%http://wttr.in/%%''. Afișați conținutul fișierului descărcat. | ||
- | * Descărcați fișierul ''%%http://elf.cs.pub.ro/uso/res/final/07-feb/heroes.csv%%''. Ce tip de fișier este acesta? | + | * Descărcați fișierul ''%%http://elf.cs.pub.ro/uso/res/final/141/ex5.csv%%''. Ce tip de fișier este acesta? |
===== Accesul la distanţă în linie de comandă ===== | ===== Accesul la distanţă în linie de comandă ===== | ||
<note> | <note> | ||
- | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container%%'' comanda ''%%./lab_prepare.sh install ssh%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect ssh%%'' | + | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%'' comanda ''%%./lab_prepare.sh install ssh%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect ssh%%'' |
</note> | </note> | ||
Line 78: | Line 77: | ||
<code > | <code > | ||
student@uso:~$ hostname | student@uso:~$ hostname | ||
- | uso | + | uso.local |
student@uso:~$ ssh root@10.10.10.3 | student@uso:~$ ssh root@10.10.10.3 | ||
The authenticity of host '10.10.10.3 (10.10.10.3)' can't be established. | The authenticity of host '10.10.10.3 (10.10.10.3)' can't be established. | ||
Line 121: | Line 120: | ||
* Autentificați-vă la stația cu adresa IP ''%%12.12.12.3%%'' folosind utilizatorul ''%%student%%'' și parola ''%%student%%''. | * Autentificați-vă la stația cu adresa IP ''%%12.12.12.3%%'' folosind utilizatorul ''%%student%%'' și parola ''%%student%%''. | ||
- | Observație: | + | <note> |
Atunci când ne conectăm la o stație folosind protocolul SSH este necesar să precizăm un nume de utilizator valid. Dacă utilizatorul nu există, serverul nu va preciza faptul că utilizatorul nu există pe sistem, ci va cere parola utilizatorului, dar nu va permite autentificarea la stație. De ce serverul SSH nu specifică dacă utilizatorul exista sau nu? | Atunci când ne conectăm la o stație folosind protocolul SSH este necesar să precizăm un nume de utilizator valid. Dacă utilizatorul nu există, serverul nu va preciza faptul că utilizatorul nu există pe sistem, ci va cere parola utilizatorului, dar nu va permite autentificarea la stație. De ce serverul SSH nu specifică dacă utilizatorul exista sau nu? | ||
+ | </note> | ||
==== Rularea unei singure comenzi prin SSH ==== | ==== Rularea unei singure comenzi prin SSH ==== | ||
Line 158: | Line 156: | ||
==== Transferul fișierelor la distanţă ==== | ==== Transferul fișierelor la distanţă ==== | ||
- | Pentru a transfera fișiere la distanță folosim ''%%scp%%'' (secure copy). Comanda | + | Pentru a transfera fișiere la distanță folosim ''%%scp%%'' (secure copy). Comanda ''%%scp%%'' se folosește de protocolul SSH pentru transferul de date între stații, astfel ne putem folosi de modelul de autentificare de la SSH, ca în comanda de mai jos: |
- | ''%%scp%%'' se folosește de protocolul SSH pentru transferul de date între stații, | + | |
- | astfel ne putem folosi de modelul de autentificare de la SSH, ca în comanda de | + | |
- | mai jos: | + | |
<code > | <code > | ||
Line 277: | Line 271: | ||
* Efectuați modificările necesare astfel încât să vă puteți autentifica drept utilizatorul ''%%student%%'' de pe stația ''%%10.10.10.3%%'' fără parolă. | * Efectuați modificările necesare astfel încât să vă puteți autentifica drept utilizatorul ''%%student%%'' de pe stația ''%%10.10.10.3%%'' fără parolă. | ||
+ | ===== Controlul la distanță în mediul grafic ===== | ||
+ | Există anumite tipuri de aplicații care funcționează în mod implicit în mediul grafic și aceste aplicații nu pot fi rulate în interfața în linie de comandă. De exemplu, installer-ul unui joc nu poate să fie rulat din linie de comandă. | ||
+ | |||
+ | Controlul acestor aplicații se poate reduce la două probleme: | ||
+ | |||
+ | * controlul întregului desktop; | ||
+ | * controlul unei singure aplicații. | ||
+ | |||
+ | ==== Controlul desktopului la distanţă ==== | ||
+ | |||
+ | Pentru control complet al unei sesiuni desktop grafice există o mai multe soluții, cum ar fi VNC, sau FreeRDP, dar noi ne vom concentra pe soluția numită TeamViewer, deoarece oferă suport pentru toate sistemele convenționale. | ||
+ | |||
+ | TeamViewer poate fi descărcat de la [[https://www.teamviewer.com/en/download/linux/|această]] adresă și permite autentificarea la o mașină folosind un ID și o parolă generate de aplicația server. | ||
+ | |||
+ | {{:uso:laboratoare:laborator-05:teamviewer_start.png?500|Aplicația TeamViewer}} | ||
+ | |||
+ | === Recapitulare - Instalarea aplicației TeamViewer === | ||
+ | |||
+ | Descărcați și instalați aplicația TeamViewer pe mașina virtuală ''%%USO%%'' și pe stația voastră fizică. | ||
+ | |||
+ | === Folosirea TeamViewer === | ||
+ | |||
+ | Pentru a ne conecta la o mașină la distanță avem nevoie de ID-ul mașinii și parola conexiunii. Aceste informații se găsesc în primul ecran al aplicației TeamViewer, cum se vede mai jos. | ||
+ | |||
+ | Vom scrie ID-ul stației la care vrem să ne conectăm în câmpul ''%%Partner ID%%'' de pe calculatorul de pe care vrem să ne conectăm (stația client). | ||
+ | |||
+ | {{:uso:laboratoare:laborator-05:teamviewer_id.png?500|ID în TeamViewer}} | ||
+ | |||
+ | După ce apăsăm tasta ''%%Enter%%'' apare promptul pentru parolă, unde completăm parola stației la care vrem să ne conectăm. | ||
+ | |||
+ | {{:uso:laboratoare:laborator-05:teamviewer_pass.png?500|Parola în TeamViewer}} | ||
+ | |||
+ | După ce am introdus parola a apărut pe ecran desktop-ul mașinii la care am vrut să mă conectez. În cazul de față este vorba de un sistem MacOS pe care am rulat TeamViewer. | ||
+ | |||
+ | {{:uso:laboratoare:laborator-05:teamviewer_connection.png?500|Controlul calculatorului de la distanță}} | ||
+ | |||
+ | Deasupra cadrului în care apare desktop-ul de la distanță apar butoane ce ne permit să închidem conexiunea, sau să trimitem acțiuni și fișiere către calculatorul server. | ||
+ | |||
+ | === Exercițiu - Conectarea la distanță folosind TeamViewer === | ||
+ | |||
+ | Conectați-vă la mașina virtuală USO de pe stația voastră fizică. | ||
+ | |||
+ | ==== Controlul unei ferestre la distanţă ==== | ||
+ | |||
+ | Pentru controlul unei ferestre de pe stația server putem să folosim protocolul SSH în modul //X Forwarding// (se referă la //X Window System//, care este un protocol de afișare al ferestrelor întâlnit în Linux). În acest fel se afișează pe stația client datele aplicației grafice care ar fi afișate pe stația server. | ||
+ | |||
+ | Acest mod de transfer nu este rapid, deoarece transferul se face printr-un protocol care nu este menit pentru aplicații care au nevoie să fie responsive, cum sunt ferestrele interactive, dar pot fi folosite pentru aplicații cum ar fi kituri de instalare ale programelor. | ||
+ | |||
+ | Pentru a porni o aplicație grafică pe un calculator la distanță trebuie să ne conectăm la această stație folosind opțiunea ''%%-X%%'' a comenzii ''%%ssh%%''. | ||
+ | |||
+ | {{:uso:laboratoare:laborator-05:xforwarding.png?500|Controlul ferestrelor prin SSH}} | ||
+ | |||
+ | Pentru a rula browserul ''%%firefox%%'' pe stația de la adresa ''%%10.10.10.3%%'', ne-am conectat la aceasta folosind comanda ''%%ssh%%'' cu opțiunea ''%%-X%%'' și am pornit aplicația ca și când am porni-o local. | ||
+ | |||
+ | Observație: | ||
+ | |||
+ | Nu putem să preluăm controlul unei aplicații dacă aceasta a fost pornită deja pe stația de la distanță, deoarece putem doar sa primim semnalul video pentru aplicații nou pornite. | ||
+ | |||
+ | |||
+ | === Exercițiu - Controlul une ferestre la distanță === | ||
+ | |||
+ | Deschideți aplicația grafică ''%%qbittorrent%%'' ca utilizatorul ''%%student%%'' pe stația ''%%10.10.10.3%%''. | ||
+ | |||
+ | ===== Securizarea conexiunii la Internet folosind un VPN ===== | ||
+ | |||
+ | <note> | ||
+ | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%'' comenzile ''%%./lab_prepare.sh install openvpn%%'', ''%%./lab_prepare.sh install openvpn-client1%%'' și ''%%./lab_prepare.sh install openvpn-client2%%''. Pentru a ne conecta la infrastructura necesară acestei secțiuni, vom folosi comanda ''%%./lab_prepare.sh connect openvpn-client1%%'' pentru stația ''%%openvpn-client1%%'' și ''%%./lab_prepare.sh connect openvpn-client2%%'' pentru a vă conecta la stația ''%%openvpn-client2%%''. | ||
+ | </note> | ||
+ | |||
+ | O aplicație de tip VPN (//Virtual Private Network//) este o aplicație care permite crearea rețelelor de calculatoare în Internet fără ca acestea să fie neapărat în aceeași rețea fizică. | ||
+ | |||
+ | Funcționalitatea unui VPN este încapsularea datelor trimise de către un calculator, criptarea și trimiterea lor către un server care le va trimite mai departe către destinație. | ||
+ | |||
+ | Primul avantaj al folosirii unui VPN este "ascunderea" traficului între client și serverul VPN-ului. Astfel, acesta nu mai pot fi văzute de alte entități până când ajung la serverul VPN. Mai mult, datele care se vor îndrepta spre o destinație pot să depășească anumite filtre bazate pe locație, deoarece locația de unde provin va fi înlocuită de serverul VPN. | ||
+ | |||
+ | Al doilea avantaj al VPN-urilor este interconectarea facilă între calculatoare care se află în rețele locale diferite. De exemplu, pentru a juca un joc în LAN (Minecraft pe rețea), putem folosi un VPN, cum ar fi Hamachi((https://www.vpn.net/ | ||
+ | )) , la care se conectează doi utilizatori. Serverul de VPN va primi datele de la clienți și le va trimite mai departe dintr-o rețea locală în alta. | ||
+ | |||
+ | |||
+ | ==== Recapitulare - Identificarea adreselor IP ale interfețelor ==== | ||
+ | |||
+ | Identificați adresele IP configurate pe interfețele stațiilor ''%%openvpn-client1%%'' și ''%%openvpn-client2%%''. | ||
+ | |||
+ | ==== Recapitulare - Verificarea conexiunii între două stații ==== | ||
+ | |||
+ | Verificați conectivitatea între cele două stații folosind adresele IP identificate mai sus. | ||
+ | |||
+ | <note> | ||
+ | Nu există conectivitate între cele două stații, deoarece acestea se află în rețele locale diferite. | ||
+ | </note> | ||
+ | |||
+ | Pentru a porni VPN-ul, vom folosi comanda ''%%openvpn%%''. Rulați următoarea comandă pe ambele stații pentru a porni clientul de VPN: | ||
+ | |||
+ | <code > | ||
+ | root@openvpn-client1:~# openvpn --config ./openvpn-client1.ovpn --daemon | ||
+ | root@openvpn-client1:~# ip address show | ||
+ | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
+ | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
+ | inet 127.0.0.1/8 scope host lo | ||
+ | valid_lft forever preferred_lft forever | ||
+ | 3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 | ||
+ | link/none | ||
+ | inet 192.168.255.6 peer 192.168.255.5/32 scope global tun0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | 45: eth0@if46: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default | ||
+ | link/ether 02:42:0a:0a:0a:0f brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | inet 10.10.10.15/24 brd 10.10.10.255 scope global eth0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | |||
+ | root@openvpn-client2:~# openvpn --config ./openvpn-client2.ovpn --daemon | ||
+ | root@openvpn-client2:~# ip address show | ||
+ | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
+ | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
+ | inet 127.0.0.1/8 scope host lo | ||
+ | valid_lft forever preferred_lft forever | ||
+ | 2: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 | ||
+ | link/none | ||
+ | inet 192.168.255.10 peer 192.168.255.9/32 scope global tun0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | 47: eth0@if48: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default | ||
+ | link/ether 02:42:0b:0b:0b:0f brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
+ | inet 11.11.11.15/24 brd 11.11.11.255 scope global eth0 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | </code> | ||
+ | Observăm că a apărut o nouă interfață de rețea în sistem care nu are o componentă fizică. Adresa IP setată pe această interfață este adresa care identifică stațiile în rețeaua VPN-ului. Observați că ambele adrese de pe interfețele ''%%tun0%%'' sunt foarte similare. Asta înseamnă că cele două stații sunt acum în aceeași rețea virtuală. | ||
+ | |||
+ | ==== Recapitulare - Verificarea conexiunii între două stații ==== | ||
+ | |||
+ | Testați conectivitatea de pe stația ''%%openvpn-client1%%'' cu stația ''%%openvpn-client2%%''. Folosiți adresele IP configurate pe interfețele ''%%tun0%%'' de pe fiecare stație. | ||
+ | |||
+ | ==== Modificarea drumului prin care trec datele ==== | ||
+ | |||
+ | Pentru a valida că datele chiar trec prin VPN, rulăm comanda ''%%traceroute 8.8.8.8%%'' și observăm că mesajele spre Internet nu trec prin interfața ''%%eth0%%''. Mesajele trec prin interfața ''%%tun0%%'', ajung la serverul VPN identificat prin adresa ''%%192.168.255.1%%'' în pasul 1, iar abia apoi sunt lansate mai departe spre Internet. | ||
+ | |||
+ | <code > | ||
+ | root@openvpn-client1:~# traceroute 8.8.8.8 | ||
+ | traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets | ||
+ | 1 192.168.255.1 (192.168.255.1) 6.033 ms 6.031 ms 5.881 ms | ||
+ | 2 10.10.10.253 (10.10.10.253) 8.582 ms 8.447 ms 8.306 ms | ||
+ | 3 10.0.2.2 (10.0.2.2) 8.165 ms 8.031 ms 7.808 ms | ||
+ | 4 * * * | ||
+ | 5 * * * | ||
+ | 6 r-c3550-l3-vlan11.bucharest.roedu.net (141.85.0.65) 8.308 ms 5.578 ms 4.876 ms | ||
+ | 7 172.31.255.93 (172.31.255.93) 4.681 ms 6.882 ms 6.855 ms | ||
+ | 8 po-23.acc1.buc.roedu.net (37.128.225.225) 16.711 ms 16.151 ms 16.751 ms | ||
+ | 9 bu-13.core2.buc.roedu.net (37.128.232.177) 9.248 ms 9.268 ms 9.232 ms | ||
+ | 10 hu-0-0-0-0.core3.nat.roedu.net (37.128.239.101) 8.510 ms 8.466 ms 6.542 ms | ||
+ | 11 te-0-6-0-1.peers1.nat.roedu.net (37.128.239.42) 6.347 ms 5.894 ms 5.987 ms | ||
+ | 12 google.interlan.ro (86.104.125.129) 31.665 ms 31.614 ms 31.529 ms | ||
+ | 13 108.170.252.65 (108.170.252.65) 31.506 ms 108.170.251.193 (108.170.251.193) 31.146 ms 108.170.252.1 (108.170.252.1) 31.591 ms | ||
+ | 14 172.253.73.153 (172.253.73.153) 31.795 ms 74.125.37.197 (74.125.37.197) 30.256 ms 74.125.37.167 (74.125.37.167) 30.068 ms | ||
+ | 15 dns.google (8.8.8.8) 29.710 ms 34.122 ms 30.538 ms | ||
+ | </code> | ||
+ | Aceasta a fost o demonstrație a modului de lucru folosind ''%%openvpn%%'' în linie de comandă pentru configurarea unui VPN folosind fișiere de configurare. Aceasta nu este singura metodă de conectare la VPN, există implementări diferite, cum ar fi WireGuard((https://www.wireguard.com/ | ||
+ | )) sau Cisco AnyConnect((https://www.cisco.com/c/en/us/products/security/anyconnect-secure-mobility-client/index.html | ||
+ | )) care oferă același serviciu dar implementat în mod diferit, oferind interfață grafică sau un mod facil de configurare. | ||