This is an old revision of the document!


Tema 3

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.

Informații generale

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.

Cunoștințe evaluate

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

Testarea temei. Finalizarea temei. Mașină virtuală.

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.

Docker

Pe parcusul acestei teme vom folosi virtualizarea bazată pe containere. Există mai multe proiecte care automatizează lucrul cu containere Linux, iar unul dintre cele mai populare este Docker. Docker este un proiect open source început în 2013 și, în momentul de față este foarte folosit și în industrie (Google, Amazon, Microsoft). Vom folosi containere pentru această temă pentru a da senzația că avem mai multe mașini virtuale conectate la mașina virtuală de USO (usovm), cu multiple interfețe de rețea pe care le vom configura în diverse moduri cu scopul de a comunica între ele sau în Internet. În realitate, un container nu este o mașină virtuală.

Docker cheatsheet

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

Task 01 (20p)

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 uso-base 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 , vim și sudo pe containerul uso-base.
  • [2p] Adăugați utilizatorul student pe containerul uso-base cu parola student. Setați directorul home al acestuia la /home/student ș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 uso-base folosind userul student.
  • [2p] Creați o imagine a containerului uso-base cu numele uso/ubuntu. Hint: docker commit

Task 02 (25p)

Checkerul va genera la prima sa rulare 3 containere uso1, uso2 și uso3 care folosesc imaginea creată la Task 1. Vă puteți atașa la oricare dintre ele folosind comanda docker attach CONTAINER_NAME. În cazul în care ați făcut o configurație greșită și doriți reinițializarea containerelor, ștergeți-le (docker stop uso1 uso2 uso3 && docker rm uso1 uso2 uso3) și rulați din nou checkerul.

  • [5p] Configurați în mod static temporar, pe interfața eth1 a containerului uso1, a 11-a adresă asignabilă din rețeaua 192.168.42.0/24.
  • [5p] Configurați în mod static temporar, pe interfeța eth1 a containerului uso2, a 12-a adresă asignabilă din rețeaua 192.168.42.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 student:student de pe userul 'student'. Conexiunea va folosi adresa IP asignată intefețelor eth1, nu eth0.
  • [4p] Faceți configurările necesare astfel încât mașina virtuală de USO (host-ul) să se poată conecta prin ssh, de pe userul student, fără parolă, la cele 2 containere uso1 și uso2 pe IP-urile configurate pe intefețele eth1. Conexiunea trebuie să se poată realiza pentru userul student de pe containere.
  • [6p] Faceți configurările necesare astfel încât mașina virtuală de USO (host-ul) să se poată conecta prin ssh, de pe userul student, fără parolă, la containerul uso2 pe IP-ul configurat pe intefeța eth1. Conexiunea trebuie să se poată realiza pentru userul root de pe container.

Containerele uso1 și uso2 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.

Task 03 (20p)

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

  • [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 parametru. Rezultatul trebuie să respecte următorul format (exact 3 linii):
student@usovm:~$ /home/student/tema3/iface-info.sh enp0s8
MAC: 08:00:27:0E:C4:CA
IP: 172.28.128.4
Netmask: 255.255.255.0

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ă argumente. Primul argument este numele unei interfețe, iar al doilea este numele unui container pornit. Hint: docker exec

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.

Task 05 (20p)

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

  • [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.
  • [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).
  • [5p] Faceți configurările necesare pe mașina virtuală de USO (usovm) astfel încât să fie posibilă conectarea la containerele uso1 și uso2 folosind numele lor, nu doar adresele IP (setate la Taskul #2) ale interfețelor eth1 de pe containere. De exemplu:
student@usovm:~$ ping uso1
PING uso1 (192.168.42.11) 56(84) bytes of data.
64 bytes from uso1 (192.168.42.11): icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from uso1 (192.168.42.11): icmp_seq=2 ttl=64 time=0.052 ms
  • [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 (mașina virtuală de USO) să se poată conecta pe containerul uso1 ca userul student , fără parolă, folosind cheile generate la subpunctul anterior.

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

uso/teme/tema-3-evil-hidden-page.1508349565.txt.gz · Last modified: 2017/10/18 20:59 by acaciulescu
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