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:26]
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 114: Line 107:
  
 ==== Task 04 (15p) ==== ==== Task 04 (15p) ====
-  * **[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): +  * **[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
-<code bash> +  * **[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 i făcut și la task-ul 2 pentru ​''​rick''​ și ''​morty''​). 
-student@usovm:​~$ /​home/​student/​tema3/​iface-info.sh enp0s8 +  * **[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''​ ș''​summer'' ​de pe containerele asociate fără a cere parolă. Puteți să presupuneți că argumentul primit de script este tot timpul valid.
-MAC: 08:​00:​27:​0E:​C4:​CA +
-IP: 172.28.128.4 +
-Netmask: 255.255.255.0 +
-</​code>​ +
-Restricții ș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ț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ă argumente. Primul argument este numele unei interfețe, iar al doilea este numele unui container pornit. **Hint**: ''​docker exec''​ +==== Task 05 (25p====
-Restricții și precizări suplimentare față de primul subpunct: +
-  * în cazul în care scriptul primește două argumente, primul argument este numele unei interfețe, iar al doilea este numele unui container pornit. Scriptul va afișa informații despre interfața dată, aceasta fiind o interfață din container;​ +
-  * în cazul în care containerul dat ca argument nu există sau nu este pornit, scriptul va afișa la ''​stderr''​ mesajul ''​No such container'';​ +
-  * 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.+
  
 +Î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
  
-==== Task 05 (20p====+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).
  
-Î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''​. +  ​* **[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''​). 
-  ​* **[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''​. +Scriețun script nou numit ''​wabalubadubdub.sh''​ în ''/​home/student/tema3/task5'' ​care primește ca argumente:​ 
-  * **[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). +    * numele unui user de pe un container 
-  * **[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: +    * ip-ul unui container 
-<code bash+    * numele unei baze de date (path către un fișier ​''​*.db''​) 
-student@usovm:​~$ ping uso1 +    numele unei table in baza de date 
-PING uso1 (192.168.42.11) 56(84bytes of data. +Scriptul va trebui să ruleze ​**prin ssh** scriptul ​''​select.sh''​ pe userul și ip-ul primite ca argument. 
-64 bytes from uso1 (192.168.42.11): icmp_seq=1 ttl=64 time=0.047 ms +Scriptului ​''​select.sh'' ​i se vor da argumentele 3 și 4 (numele bazei de date si al tabelei). 
-64 bytes from uso1 (192.168.42.11):​ icmp_seq=2 ttl=64 time=0.052 ms + 
-</code+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''​. 
-  * **[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.+<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.1511429167.txt.gz · Last modified: 2017/11/23 11:26 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