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 12:05]
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 ''​rick''​.+  * **[2p]** Opriți interfața eth0 de pe containerul ''​summer''​.
   * **[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 rebootat, testați faptul că ați făcut configurările corecte folosind comanda ''​service networking restart''​ în containerul ''​summer''​.   * **[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 rebootat, testaț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]** 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'' ​altfel ​încât comanda ''​ping google.com''​ să se execute cu succes. +  * **[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'',​ ''​mortyi''​ și ''​summer''​ folosind numele lor. De exemplu:+  * **[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:​~$ ping rick student@usovm:​~$ ping rick
Line 118: Line 111:
   * **[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.   * **[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.
  
-==== Task 05 (20p) ====+==== Task 05 (25p) ====
  
-Î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''​. +Î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''​. 
-  * **[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 containerului. De 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''​. +  * **[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: 
-  * **[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). +    * name - string de maxim 50 de caracterenu poate fi null 
-  **[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 #2) ale interfețelor ''​**eth1**'' ​de pe containere. De exemplu: +    * age - număr întreg 
-<code bash> +    * episode - string ​de maxim 100 de caractere, nu poate fi null 
-student@usovm:​~$ ping uso1 +  * **[7p]** Scrieți un script ​''​select.sh''​ în ''/​home/​student/​tema3/task5''​ de pe mașina virtuală ​care primește 2 argumente: 
-PING uso1 (192.168.42.1156(84) bytes 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 tabele din baza de date 
-64 bytes from uso1 (192.168.42.11):​ icmp_seq=2 ttl=64 time=0.052 ms +Scriptul va trebui: 
-</​code>​ +  * să selecteze din tabelă intrările care corespund utilizatorului curent (coloana name din tabelă conține numele utilizatorului care rulează scriptul) 
-  * **[5p]** Generați o pereche de chei [[https://​en.wikipedia.org/​wiki/​Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] (id_ecdsa șid_ecdsa.pubde lungime 384 biți în directorul ​''/​home/​student/​tema3/​keys''​ de pe mașina virtuală ​de USO (''​usovm''​)**NU** setațniciun passphrase pentru ele+  * să scrie rezultatul selecției în format ​''​csv'' ​într-un fișier numit ''​query.csv'' ​în directorul home al utilizatorului curent 
-  * **[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.+ 
 +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). 
 + 
 +  * **[7p]** Copiați scriptul ''​select.sh''​ pe toate cele 3 containerele în home-urile userilor asociaț(scriptul trebuie să se numească tot ''​select.sh''​)
 +Scrieți un script nou numit ''​wabalubadubdub.sh'' ​în ''/​home/​student/​tema3/​task5'' ​care primește ca argumente:​ 
 +    * numele unui user de pe un container 
 +    * ip-ul unui container 
 +    * numele unei baze de date (path către un fișier ​''​*.db''​) 
 +    ​numele unei table in baza de date 
 +Scriptul va trebui să ruleze ​**prin ssh** scriptul ''​select.sh''​ pe userul șip-ul primite ca argument
 +Scriptului ''​select.sh''​ i se vor da argumentele 3 și 4 (numele bazei de date si al tabelei). 
 + 
 +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.1511431543.txt.gz · Last modified: 2017/11/23 12:05 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