Differences

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

Link to this comparison view

gsr:laboratoare:laborator-03 [2015/10/29 12:21]
alexandru.carp [Userdir]
gsr:laboratoare:laborator-03 [2016/10/27 13:21] (current)
alexandru.carp
Line 1: Line 1:
-====== Laborator 03: Servicii web ======+~~SHOWSOLUTION~~ 
 + 
 +====== Laborator 03: Serviciile de DHCP si SSH ====== 
 + 
 +===== 01. Pregatirea infrastructurii virtuale (OpenStack) ===== 
 + 
 +Incepand cu acest laborator vom lucra si pe topologia virtuala OpenStack. Aceeasi topologie va fi folosita si la proiect. 
 +Acest task are ca scop crearea infrastructurii virtuale. 
 + 
 +<​note>​ 
 +Fiecare student va avea propriul subnet, din care va aloca adrese pentru masinile virtuale. Puteti gasi alocarea aici: 
 +https://​docs.google.com/​spreadsheets/​d/​14QgTyn41hzinWqHaUQ16kf9_UeUcwXNQ__MR5C6Q70U/​pubhtml 
 +</​note>​ 
 + 
 +<​note>​ 
 +Pentru crearea contului, a masinilor virtuale si a legaturilor dintre ele, urmati pasii de aici: 
 +http://​ocw.cs.pub.ro/​courses/​gsr/​resurse/​proiect 
 +</​note>​ 
 + 
 +===== 02. DHCP ===== 
 + 
 +==== a) Demo: Funcționarea dhclient ==== 
 + 
 +<​note>​ 
 +Executati acest demo pe masina fizica din laborator. 
 +</​note>​ 
 + 
 +Clientul de DHCP este reprezentat în Linux de comanda ''​dhclient''​. La o rulare a comenzii ''​dhclient''​ este interogat serverul DHCP pentru transmiterea unei adrese. 
 + 
 +Pentru a testa această funcționalitate,​ vom dezactiva configurația curentă și apoi vom face o nouă configurație. 
 + 
 +Pentru dezactivare identificăm interfața activă prin rularea comenzii<​code>​ 
 +ip a s 
 +</​code>​ 
 + 
 +Apoi dezactivăm configurația interfeței:<​code>​ 
 +sudo ip a f dev <​interface>​ 
 +</​code>​ 
 +unde ''<​interface>''​ este numele interfeței. 
 + 
 +Apoi solicităm o nouă adresă IP pentru interfață folosind comanda<​code>​ 
 +sudo dhclient <​interface>​ 
 +</​code>​ 
 +unde ''<​interface>''​ este numele interfeței. 
 + 
 +Putem urmări în ''/​var/​log/​syslog''​ mesajele afișate de clientul ''​DHCP''​. 
 + 
 +Dacă dorim să dăm release la configurație,​ putem folosi comanda<​code>​ 
 +sudo dhclient -r <​interace>​ 
 +</​code>​ 
 +unde ''<​interface>''​ este numele interfeței. 
 + 
 +==== b) Configurare server de DHCP ==== 
 + 
 +<​note>​ 
 +Acest task se va executa pe infrastructura virtuala. 
 +Masina ''​Sn-R''​ va are rol de server DHCP, iar masina ''​D''​ va avea rol de client DHCP. 
 +</​note>​ 
 + 
 +Instalati serverul ''​isc-dhcp-server''​ pe masina ''​Sn-R''​. 
 + 
 +Creati configurația serverului de DHCP în ''/​etc/​default/​isc-dhcp-server''​ și în ''/​etc/​dhcp/​dhcpd.conf''​. Verificați că serverul este pornit și ascultă conexiuni pe portul ''​68''​ UDP. 
 + 
 +Urmăriți în fișierele de tip jurnal de pe fiecare sistem (''/​var/​log/​syslog''​) mesaje afișate de clientul și serverul DHCP. 
 + 
 +Folosiți, pe client, comanda 
 +<​code>​ 
 +sudo dhclient eth0 
 +</​code>​ 
 +pentru reinterogarea serverului DHCP, care duce la conduce la generarea de noi mesaje de jurnalizare. 
 + 
 +===== 03. SSH ===== 
 + 
 +==== a) Conectare prin SSH între mașina virtuală ''​Sn-R''​ și ''​D''​ === 
 + 
 +Încercați să vă conectați prin SSH de pe mașina virtuală ''​Sn-R''​ pe masina virtuala ''​D''​ folosind o comandă de forma<​code>​ 
 +ssh student@192.168.N.X 
 +</​code>​ 
 + 
 +Acum încercați și invers, să vă conectați de pe mașina virtuală ''​D''​ pe masina virtuala ''​Sn-R''​ 
 + 
 +Apoi configurați autentificarea fără parolă (pe bază de chei) de la utilizatorul ''​student''​ de pe mașina virtuală ''​Sn-R''​ la utilizatorul ''​student''​ și la utilizatorul ''​root''​ de pe mașina virtuală ''​D''​. Va trebui să ajungă cheia publică a utilizatorului ''​student''​ de pe masina virtuala ''​Sn-R''​ în fișierul ''​~/​.ssh/​authorized_keys''​ din directorul home al utilizatorilor ''​student''​ și ''​root''​ pe mașina virtuală ''​D''​. 
 + 
 +<note tip> 
 +Dacă simțiți că "​scârțâiți",​ pentru documentare despre folosirea SSH recomandăm să urmariți [[:​rl:​labs:​08|laboratorul 8 de RL: Securizarea unui server]]. 
 +</​note>​ 
 + 
 +/* 
 +==== Adăugarea cheii asistentului pentru conectare la mașina virtuală ==== 
 + 
 +Obiectivul acestui exercițiu este ca asistentul să ajungă pe mașina voastră virtuală de pe laptop-ul său. Pentru aceasta trebuie să faceți două lucruri: 
 +  - Să adăugați cheia publică a asistentului (vă va da el link la cheie) în contul utilizatorului ''​student''​ de pe mașina virtuală. 
 +  - Să folosiți DNAT (//port forwarding//​) pe **sistemul fizic** astfel încât conexiunile pe portul ''​2222''​ pe sistemul fizic să ajungă pe portul ''​22''​ pe mașina virtuală. 
 + 
 +Pentru pasul 2, pe **sistemul fizic** folosiți o comandă de forma<​code>​ 
 +sudo iptables -t nat -A PREROUTING -i ethX -p tcp --dport 2222 -j DNAT --to-destination <​IP-vm>:​22 
 +sudo sysctl -w net.ipv4.ip_forward=1 
 +</​code>​ 
 +unde: 
 +  * ''​ethX''​ este ''​eth0''​ sau ''​eth1''​ sau ''​eth2''​ este interfața de Internet a sistemului fizic, cu o adresă din spațiul ''​172.16.4.0/​22''​ 
 +  * ''<​IP-vm>''​ este adresa IP a mașinii virtuale (adresa din rețeaua ''​192.168.56.0/​24''​ 
 + 
 +Iar pe **mașina virtuală** rulați comanda de mai jos pentru a crea o rută din mașina virtuală către rețeaua fizică<​code>​ 
 +sudo ip route add 172.16.4.0/​22 via 192.168.56.1 
 +</​code>​ 
 +Cu această rută veți permite pachetelor să se întoarcă din mașina virtuală către cheia SSH a asistentului. 
 + 
 +Asistentul va încerca conexiunea la adresa IP a sistemului vostru fizic pe portul ''​2222''​ și, dacă e totul bine, va ajunge pe mașina voastră virtuală. 
 + 
 +<note tip> 
 +Dacă simțiți că scârțâiți legat de NAT/DNAR, informații despre folosirea ''​iptables''​ pentru DNAT găsiți în [[:​rl:​labs:​09|laboratorul 9 de RL: Translatarea de adrese]]. 
 +</​note>​ 
 + 
 +<note tip> 
 +Dacă greșiți ceva în configurarea iptables, curățați regulile folosind comanda<​code>​ 
 +sudo iptables -t nat -F 
 +</​code>​ 
 +</​note>​ 
 +*/ 
 + 
 +====  b) Configurare remote logging pentru SSH ==== 
 + 
 +Configurați daemon-ul syslog de pe mașina virtuală ''​D''​ să livreze mesajele de jurnalizare emise de SSH (de facilitatea ''​auth''​) către daemonul de syslog de pe masina virtuala ''​Sn-R''​. Adică daemonul de syslog de pe masina virtuala ''​Sn-R''​ va fi listener pentru mesajele livrate de pe mașina virtuală ''​D''​. 
 + 
 +Realizați conexiuni SSH de pe mașina virtuala ''​Sn-R''​ spre mașina virtuală ''​D''​ pentru a declanșa mesaje de jurnalizare. 
 + 
 +/* 
 +==== Bonus: Conectare cu X Forwarding ==== 
 + 
 +Realizați o conexiune SSH care folosește X Forwarding **de la sistemul fizic** la mașina virtuală. Porniți utilitarul ''​xterm''​. Instalați orice pachete sunt necesare pentru a permite rularea utilitarului ''​xterm''​. 
 +*/ 
 + 
 +==== Bonus: Pornirea manuală a sshd === 
 + 
 +Porniți serviciul SSH manual, pe mașina virtuală ''​D'',​ folosind executabilul ''/​usr/​sbin/​sshd''​ astfel incat să asculte conexiuni pe portul ''​22''​. Încercați conexiuni către masina virtuala ''​D''​ de pe masina virtuala ''​Sn-R''​. 
 + 
 +Rulați serverul de SSH sub ''​strace''​ (eventual folosind opțiunea ''​-f''​) și urmăriți ce se întâmplă atunci când se încearcă noi conexiuni. 
 +/*
  
 ===== Demo ===== ===== Demo =====
Line 7: Line 144:
 ==== Instalare Apache si configurari de baza ==== ==== Instalare Apache si configurari de baza ====
  
-  * Pe masina virtuala, instalati ​serverul Apache (pachetul **apache2**).+  * Instalati ​serverul Apache (pachetul **apache2**).
  
-  * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta ​de pe masina fizica pe adresa IP a masinii virtuale.+  * Apoi, verificati functionarea acestuia folosind un browser web. Va veti conecta pe URL-ul http://​localhost
  
 === Site default === === Site default ===
Line 15: Line 152:
   * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML.    * Asa cum ati observat anterior, serverul Apache serveste in mod implicit un fisier HTML. 
  
-  * Gasiti fisierul **index.html** servit de server-ul Apache in ierarhia de fisiere ​de pe masina virtuala+  * Gasiti fisierul **index.html** servit de server-ul Apache in ierarhia de fisiere. 
-     * Hint: Configuratia site-ului default se afla in ''/​etc/​apache2/​sites-available/​default''​+     * Hint: Configuratia site-ului default se afla in ''/​etc/​apache2/​sites-available/​000-default.conf''​
      * Hint: Observati directiva ''​DocumentRoot''​      * Hint: Observati directiva ''​DocumentRoot''​
  
Line 42: Line 179:
 Un astfel de client in mod text, non-interactiv,​ este **wget**. Un astfel de client in mod text, non-interactiv,​ este **wget**.
  
-  * Folositi ''​wget''​ pentru a descarca fisierul ''​index.html''​ servit de server-ul de pe masina virtuala. Ca parametru pentru ''​wget''​ veti folosi acelasi URL ca si in browser.+  * Folositi ''​wget''​ pentru a descarca fisierul ''​index.html''​ servit de Apache. Ca parametru pentru ''​wget''​ veti folosi acelasi URL ca si in browser.
  
 == Descarcare recursiva == == Descarcare recursiva ==
  
-  * Creati urmatoarea ierarhie de fisiere in ''/​var/​www'' ​pe masina virtuala:+  * Creati urmatoarea ierarhie de fisiere in ''/​var/​www/html'':​
 <​code>​ <​code>​
 test/ test/
Line 60: Line 197:
   * Folosind un browser in mod grafic, verificati ca puteti naviga prin acea ierarhie.   * Folosind un browser in mod grafic, verificati ca puteti naviga prin acea ierarhie.
  
-  * Folosind ''​wget'',​ descarcati in mod recursiv tot ce este sub ''/​var/​www/​test''​.+  * Folosind ''​wget'',​ descarcati in mod recursiv tot ce este sub ''/​var/​www/html/​test''​.
     * Hint: ''​man wget'',​ ''/​recursive''​     * Hint: ''​man wget'',​ ''/​recursive''​
     * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''​index.html''​. Hint: ''​man wget'',​ ''/​reject''​.     * Specificati sa NU fie descarcate fisierele ale caror nume incepe cu ''​index.html''​. Hint: ''​man wget'',​ ''/​reject''​.
Line 79: Line 216:
 Acesta deschide o conexiune catre un host, pe un port specificat (TCP sau UDP), apoi va trimite catre server toate datele primite pe standard input. Acesta deschide o conexiune catre un host, pe un port specificat (TCP sau UDP), apoi va trimite catre server toate datele primite pe standard input.
  
-  * Folosind ''​nc'',​ conectati-va pe adresa IP a masinii virtuale, portul 80.+  * Folosind ''​nc'',​ conectati-va pe localhost, portul 80.
  
   * Apoi, introduceti manual o cerere HTTP pentru fisierul ''​index.html''​. Veti folosi protocolul HTTP 1.0:   * Apoi, introduceti manual o cerere HTTP pentru fisierul ''​index.html''​. Veti folosi protocolul HTTP 1.0:
Line 93: Line 230:
 Server-ul Apache permite utilizatorilor sa serveasca fisiere din propriile directoare home. Fisierele trebuie stocate in ''/​home/​username/​public_html'',​ iar acestea vor fi accesate folosind un URL de forma ''​http://​server/​~username''​. Server-ul Apache permite utilizatorilor sa serveasca fisiere din propriile directoare home. Fisierele trebuie stocate in ''/​home/​username/​public_html'',​ iar acestea vor fi accesate folosind un URL de forma ''​http://​server/​~username''​.
  
-  * Pe masina virtuala, creati ​utilizatorul ''​gsr''​.+  * Creati ​utilizatorul ''​gsr''​.
   * Creati directorul ''​public_html''​ si mai multe fisiere in interiorul acestuia.   * Creati directorul ''​public_html''​ si mai multe fisiere in interiorul acestuia.
  
Line 104: Line 241:
 ==== PHP === ==== PHP ===
  
-  * Pe masina virtuala, creati ​in ''/​var/​www''​ un fisier cu numele ''​index.php''​ care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj):+  * Creati ​in ''/​var/​www/html''​ un fisier cu numele ''​index.php''​ care sa contina un cod PHP simplu (de exemplu, sa afiseze un mesaj):
 <​code>​ <​code>​
 <?php echo "​Hello,​ world!";​ ?> <?php echo "​Hello,​ world!";​ ?>
 </​code>​ </​code>​
  
-  * Apoi, dintr-un browser in mod grafic incercati sa accesati fisierul ''​index.php''​ de pe server. Ce observati? Script-utl PHP se ruleaza pe server? De ce?+  * Apoi, dintr-un browser in mod grafic incercati sa accesati fisierul ''​index.php''​ de pe server. Ce observati? Script-ul PHP se ruleaza pe server? De ce?
  
   * Instalati pachetul corespunzator modulului PHP pentru Apache (''​libapache2-mod-php5''​).   * Instalati pachetul corespunzator modulului PHP pentru Apache (''​libapache2-mod-php5''​).
   * Verificati ca modulul a fost activat. Hint: ''/​etc/​apache2/​mods-enabled''​.   * Verificati ca modulul a fost activat. Hint: ''/​etc/​apache2/​mods-enabled''​.
   * Accesati din nou fisierul ''​index.php''​. Ce observati acum?   * Accesati din nou fisierul ''​index.php''​. Ce observati acum?
 +
 +==== Autentificare basic ====
 +
 +In anumite cazuri, este util sa restrictionam accesul catre anumite directoare ale site-ului. O modalitate este folosind feature-ul de autentificare din protocolul HTTP.
 +
 +  * Creati subdirectorul ''​secret''​ in ''/​var/​www/​html''​.
 +  * In acest subdirector,​ creati un fisier cu numele ''​.htaccess'',​ care sa specifice ca se doreste autentificare:​
 +<​code>​
 +AuthName "​restricted"​
 +AuthType Basic
 +AuthUserFile /​usr/​local/​my.htpasswd
 +Require valid-user
 +</​code>​
 +  * Apoi, folosind comanda ''​htpasswd'',​ creati un user ''​bob''​ in fisierul ''/​usr/​local/​my.htpasswd''​
 +  * In fisierul ''​apache2.conf'',​ setati directiva ''​AllowOverride''​ la ''​All''​
 +  * Restartati serviciul Apache si verificati ca incercand sa accesati, din browser, directorul ''​secret'',​ se cere autentificare.
  
  
-/* 
  
 ~~SHOWSOLUTION~~ ~~SHOWSOLUTION~~
gsr/laboratoare/laborator-03.1446114104.txt.gz · Last modified: 2015/10/29 12:21 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0