This is an old revision of the document!


%%%2121!!!+++CUTHERE+++!!!2121%%%

Ce trebuie să știu? Studiați secțiunea de Cunoștințe evaluate și suportul agregat necesar temei.

Thread nou? Nu. Pentru o ușoară parcurgere a mesajelor, folosiți thread-urile de discuții existente în cadrul forumului, fără a crea altele. În consecință, thread-urile (subiectele de discuții) nou create vor fi șterse.

Căutare. Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum.

Printscreen/poză? Nu. În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum imgur sau alternativele sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsuri, vor fi șterse.

Actualizări. Urmăriți atât forumul cât și modificările aduse enunțului/checker-ului, modificări ce sunt publicate și explicate în paragrafele de mai jos.

Regulament. Înainte și în timpul realizării temei, vă rugăm să parcurgeți indicațiile legate de realizarea temelor, încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe cs.curs.pub.ro pentru întrebări și neclarități legate de teme.

Întrebări frecvente. În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de întrebări frecvente întâlnite în cadrul temelor. Să țineți cont, va rugăm, și de recomandările de comunicare electronică.

Ajutor reciproc. Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți.

Deadline: 8 Decembrie, ora 23:55
Timp de lucru: 9 zile
Punctaj: 0.6 puncte din nota finală
Formular pentru trimitere temă: https://goo.gl/39NdTB

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: versiunea v16 - “Gold Blackbird”

  • Nu există

Actualizări checker: versiunea 3

  • 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.

  • noțiuni simple de networking;
  • configurarea interfețelor de rețea;
  • autentificarea pe mașini la distanță folosind ssh cu parolă sau cu chei;
  • folosirea utilitarelor de lucru cu mașini aflate la distanță;
  • noțiuni simple de shell scripting;
  • înlănțuiri de comenzi și comunicare eficientă interproces.

Instrucțiuni de utilizare a checkerului uso

Descărcare mașină virtuală și informații despre aceasta

  • Mașina virtuală și link-ul de unde poate fi ea descărcată se găsesc pe pagina cu informații despre mașina virtuală.

Testarea temei se va face doar pe mașina virtulă (aici) autentificat ca utilizator student, folosind utilitarul uso. Acesta poate fi executat în orice moment pentru a verifica dacă au fost rezolvate corect task-urile. Nu lucrați autentificat ca utilizator root în sistem, la nicio temă. Din acest motiv există posibilitatea să nu vă treacă testele. Pe de altă parte, nu este o metoda de siguranță să lucrați autentificat ca utilizator root din motive de securitate și/sau permisiuni.

Utilitarul uso implementează testele doar pentru task-urile temei curente. La fiecare temă nouă, pentru a folosi utilitarul uso, primul pas este să porniți tema folosind comanda sudo uso start. În caz contrar, nu veți avea actualizat checker-ul pentru tema curentă.

Verificați versiunea utilitarului uso cât și a checker-ului, afișată la rularea comenzii sudo uso start sau sudo uso check, pe prima linie a output-ului. Asigurați-vă că aveți ultima versiune înainte de a continua lucrul pentru temă. Versiunea actuală este specificată în secțiunea Informații generale prezentă în enunțul temei. Pentru situațiile în care nu dispuneți de ultima versiune a utilitarului uso sau checker-ului, rulați sudo uso update.

Finalizarea temei se realizează prin rularea comenzii sudo uso submit și încărcarea codului returnat de această comandă (32 de caractere alfanumerice), în formularul din secțiunea Informații generale. Pentru a evita transcrierea eronată a codului returnat de checker, recomandăm copierea acestuia din interfața mașinii host conectată prin SSH către mașina guest după cum urmează:

  • În cazul în care folosiți Linux sau macOS, copierea codului se realizează din terminal selectând codul emis și apăsând combinația de taste CTRL+SHIFT+C (copy)
  • În cazul in care folosiți Windows, copierea se realizează din PuTTy selectând codul codul emis (nu este nevoie să folosiți CTRL+SHIFT+C, codul fiind automat copiat la selectare).
  • După ce a fost copiat în clipboard codul emis de checker, il puteți lipi (paste) în formularul din secțiunea Informații generale

Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a temei ori a unui task. Puteți să sugerați diferite abordări sau să dați idei generale (dar nu comenzi) celorlalți. Urmăriți indicațiile legate de realizarea temelor. La prima abatere studentul primește un avertisment, iar punctajul obținut pe temă îi este redus cu valoarea punctajului pe task-ul respectiv. Începând cu a doua abatere, se va anula întregul punctaj pe tema curentă. Temele anterioare sau cele viitoare nu vor fi afectate. Abaterile se păstrează pe parcursul semestrului. Ori de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate în catalog.

DockerGoogleAmazonMicrosofta da senzațiausovmun container nu este o mașină virtuală

  • pentru a lista imaginile de Docker, folosiți comanda docker images;
  • pentru a crea (și rula) un container folosind o imagine folosiți comanda docker run -it image;
  • pentru a opri/porni un container, folosiți comanda docker stop/start CONTAINER_NAME;
  • pentru a vă detașa de la un container fără a-l opri, folosiți combinația de taste Ctrl+P Ctrl+Q;
  • pentru a vă atașa la un container pornit, folosiți comanda docker attach CONTAINER_NAME;
  • pentru a vedea ce containere rulează la un moment dat, folosiți comanda docker ps;
  • pentru a vedea toate containerele create (care fie rulează, fie sunt oprite), folosiți comanda docker ps -a;
  • pentru a șterge un container folosiți comanda docker rm;
  • pentru a șterge o imagine folosiți comanda docker rmi.

Toate celelalte taskuri următoare sunt dependende de rezolvarea corectă și completă a Taskului 1. În cazul în care opriți sau dați reboot mașinii virtuale de USO containerele vor fi și ele oprite. Va trebui să refaceți o parte din configurări, în acest caz. Pentru comoditate, folosiți Save the machine state în loc de Power off.

  • [2p] Descărcați imaginea i386/ubuntu:latest folosind comanda docker pull.
  • [4p] Creați și porniți un container Docker cu numele dimension-c137 care folosește imaginea descărcată la punctul anterior. Containerul trebuie să rămână pornit. Urmăriți exemplul de aici.
  • [4p] Instalați pachetele inetutils-ping, iproute2, openssh-server, sshpass , sqlite3, vim și sudo pe containerul dimension-c137.
  • [2p] Adăugați utilizatorul smith pe containerul dimension-c137 cu parola smith. Setați directorul home al acestuia la /home/smith_residence și shellul la /bin/bash.
  • [6p] Asigurați-vă că puteți realiza o conexiune ssh între mașina virtuală de USO (usovm) și containerul dimension-c137 folosind userul smith.
  • [2p] Creați o imagine a containerului dimension-c137 cu numele dimension-c137/ubuntu. Hint: docker commit
  • rick - cu userul rick și parola rick
  • morty - cu user morty si parola morty
  • summer - cu userul summer și parola summer

docker attach CONTAINER_NAMEdocker stop rick morty summer && docker rm rick morty summer

  • [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 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.

Containerele rick și morty trebuie să fie pornite la finalul acestui task. Interfețele eth1 ale celor două containere trebuie să aibă configurată câte o singură adresă IP.

  • [2p] Opriți interfața eth0 de pe containerul rick.
  • [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] Configurați containerul morty altfel î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:
student@usovm:~$ ping rick
student@usovm:~$ ping morty
student@usovm:~$ ping summer
  • [5p] Generați o pereche de chei 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 (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 și la task-ul 2 pentru rick și morty).
  • [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.

rickmortysqlite3

  • [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
  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

characters

  • [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).

wabalubadubdub.sh/home/student/tema3/task5

  • 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

prin ssh

prin sshman scpquery.csvdirectorul curentquery_remote.csv

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).

  • [6p] Extindeți scriptul să insereze datele din fișierul copiat în tabela creată de voi la primul punct al exercițiului.

Hints:

Nu trebuie să tratați cazurile cu input invalid.

===== Task obligatoriu pentru toate temele (0p) =====

Asigurați-vă că ați submis tema și ați încărcat codul aferent submisiei în formularul din secțiunea de Informații generale. Acest lucru este necesar ori de câte ori modificați tema și o submiteți din nou (detalii aici), până la termenul limită. În caz contrar, punctajul aferent temei va fi nul (0 puncte). </hidden>

uso/teme/tema-3-evil-hidden-page.1511432127.txt.gz · Last modified: 2017/11/23 12:15 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