Differences

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

Link to this comparison view

uso:teme:tema-3-evil-hidden-page [2017/11/23 11:24]
dennis.plosceanu
uso:teme:tema-3-evil-hidden-page [2017/11/23 20:43] (current)
dennis.plosceanu
Line 22: Line 22:
  
 <note important>​ <note important>​
-Deadline: **8 Decembrie, ora 23:55**\\ +Deadline: **29 Noiembrie, ora 23:55**\\ 
-Timp de lucru: **zile**\\ +Timp de lucru: **zile**\\ 
-Punctaj: **0.puncte** din nota finală\\ +Punctaj: **0.puncte** din nota finală\\ 
-Formular pentru trimitere temă: https://​goo.gl/​39NdTB\\+Formular pentru trimitere temă: https://​goo.gl/​forms/​vjzVNNczk5A29uLI3\\
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 **Actualizări enunț:** **Actualizări enunț:**
-  * **Task04**: A fost adăugată o precizare referitor la ce înseamnă prima adresă IP de pe o interfață de rețea în contextul acestui exercițiu (prima adresă în ordinea în care le afișează comanda ''​ip address show''​). 
-  * **Task04**: A fost adăugată o precizare legată de interfața de loopback și adresa MAC a acesteia. 
-**Actualizări utilitar ''​uso'':​ <color red>​versiunea v16 - "Gold Blackbird"</​color>​** 
-  * Nu există 
-**Actualizări checker: <color red>​versiunea 3</​color>​** 
-  * **Task04**: Înainte de versiunea 2, checkerul presupunea că pe fiecare mașină virtuală există interfața de rețea ''​enp0s8''​. 
-  * Înainte de versiunea 3, nu erau acceptate containerele care erau pornite cu ID-ul imaginii ''​i386/​ubuntu'',​ ci doar cu numele. 
  
 </​note>​ </​note>​
Line 46: Line 39:
   * folosirea utilitarelor de lucru cu mașini aflate la distanță;   * folosirea utilitarelor de lucru cu mașini aflate la distanță;
   * noțiuni simple de shell scripting;   * noțiuni simple de shell scripting;
-  * înlănțuiri de comenzi ​și comunicare eficientă interproces.+  * stocarea ​și prelucrarea datelor
  
 ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== ===== Testarea temei. Finalizarea temei. Mașină virtuală. =====
Line 81: Line 74:
   * **[2p]** Creați o imagine a containerului ''​dimension-c137''​ cu numele ''​dimension-c137/​ubuntu''​. **Hint**: ''​docker commit''​   * **[2p]** Creați o imagine a containerului ''​dimension-c137''​ cu numele ''​dimension-c137/​ubuntu''​. **Hint**: ''​docker commit''​
  
-==== Task 02 (25p) ====+==== Task 02 (15p) ====
  
 Checkerul va genera la prima sa rulare 3 containere care folosesc imaginea creată la Task 1: Checkerul va genera la prima sa rulare 3 containere care folosesc imaginea creată la Task 1:
Line 93: Line 86:
   * **[5p]** Configurați în mod static temporar, pe interfața ''​eth1''​ a containerului ''​rick'',​ a 11-a adresă asignabilă din rețeaua ''​192.168.137.0/​24''​.   * **[5p]** Configurați în mod static temporar, pe interfața ''​eth1''​ a containerului ''​rick'',​ a 11-a adresă asignabilă din rețeaua ''​192.168.137.0/​24''​.
   * **[5p]** Configurați în mod static temporar, pe interfeța ''​eth1''​ a containerului ''​morty'',​ ultima adresă asignabilă din rețeaua ''​192.168.137.0/​24''​. Testați conectivitatea între cele 2 containere prin intefețele ''​eth1''​ folosind comanda ''​ping''​.   * **[5p]** Configurați în mod static temporar, pe interfeța ''​eth1''​ a containerului ''​morty'',​ ultima adresă asignabilă din rețeaua ''​192.168.137.0/​24''​. Testați conectivitatea între cele 2 containere prin intefețele ''​eth1''​ folosind comanda ''​ping''​.
-  * **[5p]** Configurați cele 2 containere astfel încât fiecare să se poată conecta la celălalt prin ''​ssh''​ cu credențialele de mai sus. Conexiunea va folosi adresa IP asignată intefețelor eth1, nu eth0.+  * **[5p]** Configurați cele 2 containere astfel încât fiecare să se poată conecta la celălalt prin ''​ssh''​ cu credențialele de mai sus. Conexiunea va folosi adresa IP asignată intefețelor ​''​eth1''​, nu ''​eth0''​.
  
 <note important>​ <note important>​
Line 100: Line 93:
  
  
-==== Task 03 (20p) ==== +==== Task 03 (25p) ====
-  * **[2p]** Opriți interfața ''​eth0''​ de pe containerul ''​uso3''​. +
-  * **[6p]** Configurați în mod static permanent, pe interfața ''​eth1''​ a containerului ''​uso3''​ o adresă liberă, la alegere, din rețeaua ''​192.168.42.0/​24''​. **Hint**: Adresa ''​192.168.42.1''​ este asignată intefeței ''​usobridge''​ de pe host (''​usovm''​). Un container nu poate fi rebootat, testați faptul că ați făcut configurările corecte folosind comanda ''​service networking restart''​ în containerul ''​uso3''​. +
-  * **[6p]** Faceți configurările necesare atfel încât containerul ''​uso3''​ să aibă conexiune la internet. Testați folosind comanda ''​ping -c 2 8.8.8.8''​. Configurarea trebuie să fie permanentă. +
-  * **[6p]** Configurați containerul ''​uso2''​ altfel încât comanda ''​ping google.com''​ să se execute cu succes. ​+
  
-==== Task 04 (15p) ==== +  * **[2p]** Opriți interfața eth0 de pe containerul ''​summer''​. 
-  * **[10p]** Scrieți un script aflat în directorul ​''​/​home/​student/​tema3/​'' ​de pe mașina virtuală de USO (''​usovm''​), ​cu numele ​''​iface-info.sh'' ​care afișează informații despre o interfață de rețea primită ca parametruRezultatul ​trebuie să respecte următorul format ​(exact 3 linii):+  * **[6p]** Configurați în mod static permanent, pe interfața ​''​eth1'' ​a containerului ''​summer''​ o adresă astfel încât să poată da ping cu succes ​pe adresele setate pe containerele rick si morty (atenție ​și la adresa setată pe interfața ​''​usobridge'' ​de pe host).Un container nu poate fi rebootattestați faptul că ați făcut configurările corecte folosind comanda ''​service networking restart''​ în containerul ''​summer''​. 
 +  * **[6p]** Faceți configurările necesare atfel încât containerul ​''​summer''​ să aibă conexiune la internet. Testați folosind comanda ''​ping -c 2 8.8.8.8''​. Configurarea ​trebuie să fie permanentă
 +  * **[6p]** Configurați containerul ''​morty''​ astfel încât comanda ''​ping google.com''​ să se execute cu succes. 
 +  * **[5p]** Faceți configurările necesare pe mașina virtuală de USO (''​usovm''​astfel încât să fie posibilă conectarea la containerele ''​rick'',​ ''​morty''​ și ''​summer''​ folosind numele lor. De exemplu:
 <code bash> <code bash>
-student@usovm:​~$ ​/home/student/​tema3/​iface-info.sh enp0s8 +student@usovm:​~$ ​ping rick 
-MAC08:​00:​27:​0E:​C4:​CA +student@usovm:~$ ping morty 
-IP: 172.28.128.4 +student@usovm:~$ ping summer
-Netmask255.255.255.0+
 </​code>​ </​code>​
-Restricții și precizări: 
-  * scriptul trebuie să scrie rezultatul la ''​stdout'';​ 
-  * în caz că nu primește niciun argument trebuie să afișeze mesajul ''​Gimme more args''​ la ''​stderr'';​ 
-  * în cazul în care primește un singur argument, îl va trata ca pe o interfață de pe host (mașina virtuală de USO); 
-  * în cazul în care interafața oferită prin primul argument nu există, scriptul va afișa la ''​stderr''​ mesajul ''​No such interface'';​ 
-  * dacă intefața nu are IP/Netmask se va afișa '​N/​A'​ în locul valorilor respective. 
-  * în caz de eroare (nu primește niciun argument sau interfața nu există), scriptul va ieși cu valoarea de retur ''​1'';​ 
-  * în caz de succes, scriptul va ieși cu valoarea de retur ''​0'';​ 
-  * dacă interfața are mai multe adrese IP se va afișa doar prima (în ordinea dată de comanda ''​ip address show''​);​ 
-  * adresa MAC trebuie afișată cu upper case, de exemplu ''​08:​00:​27:​0E:​C4:​CA'',​ nu ''​08:​00:​27:​0e:​c4:​ca'';​ 
-  * în cazul în care interfața primită ca parametru este ''​lo''​ se va afișa MAC-ul acesteia ca fiind ''​00:​00:​00:​00:​00:​00''​ (așa cum raportează ''​ip address show''​). 
  
-  ​* **[5p]** ​Extindeți scriptul ​''​iface-info.sh'' ​pentru a putea primi două argumentePrimul argument este numele unei interfețe, iar al doilea este numele unui container pornit. **Hint**''​docker exec''​ +==== Task 04 (15p) ==== 
-Restricții și precizări suplimentare față de primul subpunct: +  ​* **[5p]** ​Generați o pereche de chei [[https://​en.wikipedia.org/​wiki/​Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] (id_ecdsa și id_ecdsa.pub) de lungime 384 biți în directorul ​''​/​home/​student/​tema3/​keys'' ​de pe mașina virtuală de USO (''​usovm''​)NU setați niciun passphrase pentru ele. 
-  * în cazul în care scriptul primește două argumenteprimul argument este numele unei interfețeiar al doilea este numele unui container pornit. Scriptul va afișa informații despre interfața dată, aceasta fiind o interfață din container;​ +  ​* **[5p]** Faceți configurările necesare astfel încât userul ​''​student'' ​de pe host (''​usovm''​) să se poată conecta pe userii ​de pe cele 3 containere (''​rick''​''​morty''​''​summer''​),​ fără parolă, folosind cheile generate la subpunctul anterior (va trebui să faceți posibilă conexiunea prin ''​ssh''​ si pe containerul ​summer cum ați făcut șla task-ul 2 pentru ​''​rick'' ​și ''​morty''​). 
-  * în cazul în care containerul ​dat ca argument nu există sau nu este pornit, scriptul va afișla ''​stderr'' ​mesajul ​''​No such container''​; +  * **[5p]** Scrieți un script ''​~/​tema3/​task4/​send_to_all.sh'' ​(în home-ul userului ''​student''​ de pe mașina virtuală) care primește o cale către un fișier ca argument și trimite prin ssh (Hint: ​''​man scp''​) fișierul primit ca argument în directoarele home ale utilizatorilor ''​rick'',​ ''​morty''​ și ''​summer''​ de pe containerele asociate fără a cere parolă. Puteți să presupuneți că argumentul primit de script este tot timpul valid.
-  * dacă nici interfața, nici containerul nu există ​(sau nu rulează), prioritate are mesajul de eroare pentru container, afișându-se la ieșierea de eroare ​''​No such container''​+
-  * dacă se primesc mai mult de două argumente, începând cu al treilea acestea vor fi ignorate.+
  
 +==== Task 05 (25p) ====
  
-==== Task 05 (20p====+În urma primei rulări a checkerului pe acest task, pe cele 3 containere ​(''​rick'',​ ''​morty'',​ ''​summer''​se va popula câte o bază de date folosind ''​sqlite3''​. 
 +  * **[5p]** Creați în mașina virtuala folosind ''​sqlite3''​ (o sa trebuiască instalat pachetul) o bază de date numită ''​rickandmorty.db''​ (în ''/​home/​student/​tema3/​task5''​) și în ea o tabelă nouă numită ''​characters''​ cu 3 coloane: 
 +    * name - string de maxim 50 de caractere, nu poate fi null 
 +    * age - număr întreg 
 +    * episode - string de maxim 100 de caractere, nu poate fi null 
 +  * **[7p]** Scrieți un script ''​select.sh''​ în ''/​home/​student/​tema3/​task5''​ de pe mașina virtuală care primește 2 argumente:​ 
 +    * numele unei baze de date (path către un fișier ''​*.db''​) 
 +    * numele unei tabele din baza de date 
 +Scriptul va trebui: 
 +  * să selecteze din tabelă intrările care corespund utilizatorului curent (coloana name din tabelă conține numele utilizatorului care rulează scriptul) 
 +  * să scrie rezultatul selecției în format ''​csv''​ într-un fișier numit ''​query.csv''​ în directorul home al utilizatorului curent
  
-În urma primei rulări a checkerului pentru acest task, pe mașina virtuală de USO (''​usovm''​) veți găsi fișierul ''​/​home/​student/​1024_gmail_passwords.txt''​. +Pentru testare va trebui să aveți o tabelă în care să inserați date (preferabil creați o altă tabelă cu aceleași coloane ca și ''​characters'' ​pentru că checker-ul va șterge la rulare toate datele din aceasta). 
-  * **[3p]** Copiați ​fișierul ​''​/​home/​student/​1024_gmail_passwords.txt'' ​în toate cele 3 containere ​''​uso1''​, ''​uso2''​ și ''​uso3''​ în directorul /​var/​passwords/<​CONTAINER_NAME>,​ unde <​CONTAINER_NAME>​ este numele containeruluiDe exemplu, pentru containerul ''uso1'', fișierul se va găsi în urma copierii la calea ''/​var/passwords/uso1/1024_gmail_passwords.txt''​ de pe containerul ​''​uso1''​. + 
-  * **[2p]** Copiați fișierul ​''​/​uso/​1024_yahoo_passwords.txt'' ​de pe containerul ​''​uso3'' ​în directorul ''/​home/​student/''​ de pe host (mașina virtuală ​de USO). +  * **[7p]** Copiați ​scriptul ​''​select.sh'' ​pe toate cele 3 containerele în home-urile userilor asociați (scriptul trebuie să se numească tot ''​select.sh''​). 
-  * **[5p]** Faceți configurările necesare pe mașina virtuală de USO (''​usovm''​) ​astfel încât să fie posibilă conectarea la containerele ''​uso1'' ​ș''​uso2'' ​folosind numele lor, nu doar adresele IP (setate la Taskul #2ale interfețelor ''​**eth1**'' ​de pe containereDe exemplu: +Scriețun script nou numit ''​wabalubadubdub.sh''​ în ''/​home/student/tema3/task5'' ​care primește ca argumente:​ 
-<code bash+    * numele unui user de pe un container 
-student@usovm:​~$ ping uso1 +    * ip-ul unui container 
-PING uso1 (192.168.42.11) 56(84bytes of data. +    * numele unei baze de date (path către un fișier ​''​*.db''​) 
-64 bytes from uso1 (192.168.42.11): icmp_seq=1 ttl=64 time=0.047 ms +    numele unei table in baza de date 
-64 bytes from uso1 (192.168.42.11):​ icmp_seq=2 ttl=64 time=0.052 ms +Scriptul va trebui să ruleze ​**prin ssh** scriptul ​''​select.sh''​ pe userul și ip-ul primite ca argument. 
-</code+Scriptului ​''​select.sh'' ​i se vor da argumentele 3 și 4 (numele bazei de date si al tabelei). 
-  * **[5p]** Generați o pereche ​de chei [[https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] (id_ecdsa și id_ecdsa.pub) de lungime 384 biți în directorul ''​/home/student/tema3/keys''​ de pe mașina virtuală de USO (''​usovm''​). **NU** setați niciun passphrase pentru ele+ 
-  * **[5p]** Faceți configurările necesare astfel încât userul ''​student''​ de pe host (mașina virtuală de USO) să se poată conecta pe containerul ''​uso1''​ ca userul ''​student''​ , fără parolă, folosind cheile generate la subpunctul anterior.+Apoi scriptul va trebui să copieze ​**prin ssh** (Hint: ''​man scp''​) ​fișierul rezultat în urma comenzii rulate (fișierul ​''​query.csv''​) ​în **directorul curent** și cu numele ''​query_remote.csv''​. 
 + 
 +<note important
 +Atenție! Trebuie **neapărat** să rulați comanda **prin ssh**Dacă rulați comanda folosind altceva ​(cum ar fi ''​docker exec''​rezolvarea nu se va puncta ​(chair dacă checkerul vă dă punctajul). 
 +</note> 
 + 
 +  * **[6p]** Extindeți scriptul să insereze datele din fișierul copiat în tabela creată ​de voi la primul punct al exercițiului. 
 + 
 +<note tip> 
 +Hints: 
 +  * http://www.sqlitetutorial.net/sqlite-import-csv/ 
 +  * http://tldp.org/LDP/abs/html/here-docs.html 
 +</​note>​ 
 + 
 +<note important>​ 
 +Nu trebuie să tratați cazurile cu input invalid
 +</​note>​
  
 ===== Task obligatoriu pentru toate temele (0p) ===== ===== Task obligatoriu pentru toate temele (0p) =====
uso/teme/tema-3-evil-hidden-page.1511429063.txt.gz · Last modified: 2017/11/23 11:24 by dennis.plosceanu
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