This is an old revision of the document!
Înainte să începem laboratorul, vom da comenzile pentru inițializarea containerelor Docker folosite la secțiunea Configurarea statică a adreselor IP. Rulați următoarele comenzi:
student@uso:~$ cd ~/uso-lab student@uso:~/uso-lab$ git pull [...] student@uso:~/uso-lab$ cd labs/09-networking/lab-container student@uso:~/uso-lab/labs/09-networking/lab-container$ ./lab_prepare.sh install tom [...] student@uso:~/uso-lab/labs/09-networking/lab-container$ ./lab_prepare.sh install jerry [...]
Dacă procesul de build eșuează, dați următoarea comandă:
student@uso:~/uso-lab/labs/09-networking/lab-container$ docker-compose build --no-cache [...]
Atât utilizatorii cât și grupurile de utilizatori sunt folosiți în Linux pentru controlul accesului. Controlul accesului presupune restricționarea operațiilor pe care utilizatorii le pot executa asupra resurselor sistemului (crearea de fișiere și directoare, modificarea și ștergerea acestora, execuția de programe, etc.).
Astfel, niciun utilizator nu poate să modifice/folosească un fișier dacă el, grupul din care face parte sau grupul others
nu au acest drept (vom detalia imediat).
În Linux, exista două concepte ce sunt folosite pentru a oferi securitate la nivelul sistemului de fișiere:
Fiecare fișier este deținut de un singur utilizator și de un singur grup, și are anumite permisiuni. Fiecare utilizator sau grup poate să dețină mai multe fișiere.
Fiecare resursă din sistemul de fișiere are permisiuni pentru trei categorii de utilizatori:
Pentru fiecare dintre cele trei categorii există trei permisiuni, care oferă următoarele drepturi:
Ordinea în care se aplică aceste permisiuni este următoarea:
Pentru a inspecta permisiunile și deținătorii unui anumit director sau fișier folosim comanda ls
, împreună cu argumentul -l
.
student@uso:~$ ls -l /home/student total 56 drwxr-xr-x 2 student student 4096 aug 6 17:41 Desktop drwxr-xr-x 3 student student 4096 aug 20 21:00 Documents drwxr-xr-x 2 student student 4096 aug 6 17:41 Downloads drwxr-xr-x 2 student student 4096 aug 6 17:41 Music drwxr-xr-x 2 student student 4096 aug 6 17:41 Pictures drwxr-xr-x 2 student student 4096 aug 6 17:41 Public drwxr-xr-x 2 student student 4096 aug 6 17:41 Templates drwxr-xr-x 2 student student 4096 aug 6 17:41 Videos -rw-r--r-- 1 student student 8980 aug 6 17:37 examples.desktop drwxr-xr-x 14 student student 4096 aug 20 20:57 uso.git -rw-r--r-- 1 student student 4827 aug 21 14:37 vm-actions-log.txt
Dacă rulăm comanda pe un director, implicit se vor lista fișierele din director și nu vom vedea permisiunile acestuia. Pentru a vedea permisiunile directorului, putem folosi argumentul -d
pentru comanda ls
, împreună cu calea către director.
student@uso:~$ ls -ld uso-lab/ drwxr-xr-x 14 student student 4096 aug 20 20:57 uso-lab/
Semnificația fiecărui câmp din outuput-ul anterior este prezentată în tabelul de mai jos, folosind ca exemplu informațiile afișate pentru directorul Desktop
.
Tip | Permisiuni | Număr de referințe | Owner | Grup | Dimensiunea în octeți | Data și ora ultimei modificări | Nume |
---|---|---|---|---|---|---|---|
d | rwxr-xr-x | 2 | student | student | 4096 | aug 6 17:41 | Desktop |
Coloanele din tabel au următoarea semnificație:
-
) sau director (d
)student
) are toate cele trei permisiuni (rwx
), iar utilizatorii din grupul ce deține fișierul (grupul student
) și toți ceilalți utilizatori din sistem (others
) au permisiuni de citire și execuție (r-x
).Permisiunile se pot specifica și folosind cifre (notație în baza 8 – octal):
r
= 4w
= 2x
= 1
Pentru a determina permisiunile unei anumite categorii, adunăm cele 3 valori. Astfel, pentru exemplul de mai sus, permisiunile sunt 755
(7 pentru owner, 5 pentru grup și 5 pentru others).
La crearea unui fișier sau director se atribuie valori implicite pentru permisiuni. Acestea se pot modifica ulterior.
Pentru a demonstra modul de lucru cu permisiunile, vom crea un fișier nou, după care îi vom modifica permisiunile.
Permisiunile noi se pot specifica folosind comanda chmod
, folosind oricare din cele doua notații:
+r
permite accesul de citire, iar -w
șterge accesul de scriere.student@uso:~$ touch testfile.sh student@uso:~$ ls -l testfile.sh -rw-r--r-- 1 student student 0 sep 16 16:47 testfile.sh
După cum observăm, nu vom putea executa scriptul nou creat, deoarece utilizatorul student nu are drepturi de execuție asupra lui. Ne propunem să permitem execuția, folosind ambele metode.
#1
student@uso:~$ chmod +x testfile.sh student@uso:~$ ls -l testfile.sh -rwxr-xr-x 1 student student 0 sep 16 16:47 testfile.sh student@uso:~$ chmod -x testfile.sh student@uso:~$ ls -l testfile.sh -rw-r--r-- 1 student student 0 sep 16 16:47 testfile.sh
#2
student@uso:~$ ls -l testfile.sh -rw-r--r-- 1 student student 0 sep 16 16:47 testfile.sh student@uso:~$ chmod 755 testfile.sh student@uso:~$ ls -l testfile.sh -rwxr-xr-x 1 student student 0 sep 16 16:47 testfile.sh
Exercițiu: Adăugați utilizatorul andrei
folosind comanda sudo adduser andrei
. Folosiți o parolă la alegere și țineți-o minte.
Exercițiu: Adăugați utilizatorul maria
în sistem folosind comanda sudo adduser maria
. Folosiți o parolă la alegere și țineți-o minte. Autentificați-vă ca maria
folosind su
sau login
.
Exercițiu: Din contul utilizatorului maria
, creați fișierul /home/maria/todo_list
și scrieți în el Maria's TODO list
.
Exercițiu: Configurați permisiunile acestui fișier astfel încât doar utilizatorul maria
să aibă drepturi de citire, scriere și execuție pe el. Verificați că ați configurat permisiunile corect, folosind contul utilizatorului andrei
.
Exercițiu: Modificați configurările făcute anterior astfel încât toți utilizatorii din grupul maria
să poată vizualiza conținutul fișierului /home/maria/todo_list
. În continuare, utilizatorii al căror nume nu este maria
și care nu se află în grupul maria
nu trebuie să aibă niciun drept pe acest fișier.
Exercițiu: Verificați configurarea făcută la exercițiul anterior. Pentru aceasta, adăugați utilizatorul student
în grupul maria
folosind comanda sudo adduser student maria
, autentificați-vă ca utilizatorul student
și încercați să vizualizați conținutul fișierului. Autentificați-vă apoi și ca utilizatorul andrei
și încercați să vizualizați conținutul fișierului. andrei
nu ar trebui să aibă drept să citească fișierul /home/maria/todo_list
.
sudo adduser student maria
are efectul dorit doar dupa ce utilizatorul student se va loga din nou. Pentru a face acest lucru puteți executa comanda sudo login student
.
În mod obișnuit, adresa IP se obține dinamic, așa cum am văzut în laboratorul 03: Configurarea sistemului. În această secțiune vom vedea cum putem să setăm o adresă IP static pe interfața unei stații. Scopul final este să creăm o legătură între 2 mașini (containere), cu alte cuvinte, să ne putem conecta de pe o mașină pe cealaltă.
În această secțiunile vom folosi containerele tom
și jerry
. Containtele tom
dispune de o interfață numită eth0
, iar jerry
de o interfață numită eth0
. Vom configura aceste interfațe astfel încât cele 2 containere să aibă conexiune între ele.
Ne autentificăm pe mașina tom
folosind comanda:
student@uso:~$ cd ~/uso-lab/labs/07-networking/lab-container student@uso:~/uso-lab/labs/07-networking/lab-container$ ./lab_prepare.sh connect tom root@tom:~#
Observăm că pe mașina tom
nu avem nicio adresă IP configurată pe interfața eth0
și că interfața este în starea DOWN
:
root@tom:~$ ip address show eth0 14: eth0@if15: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:0a:0a:0a:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
Configurăm adresa IP 10.10.10.1/24
și trecem interfața eth0
în starea UP
, ca în exemplul de mai jos:
root@tom:~# ip address add 10.10.10.1/24 dev eth0 root@tom:~# ip link set dev eth0 up root@tom:~# ip address show eth0 14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:0a:0a:0a:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.10.10.1/24 scope global eth0 valid_lft forever preferred_lft forever
Exercițiu: Deschideți un alt tab și conectați-vă la containerul jerry
.
Exercițiu: Configurați adresa IP 10.10.10.2/24
pe interfața eth0
de pe containerul jerry
. Nu uitați să treceți interfața eth0
.
După aceasta verificăm de pe fiecare stație conectivitatea la celelaltă stație folosind comanda ping
. De pe mașina tom
, ca în exemplul de mai jos:
root@tom:~# ping 10.10.10.2 PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data. 64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.530 ms 64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=0.945 ms ^C --- 10.10.10.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1016ms rtt min/avg/max/mdev = 0.530/0.737/0.945/0.209 ms
De pe mașina jerry
, ca în exemplul de mai jos:
root@jerry:~$ ping 10.10.10.1 PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data. 64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=0.737 ms 64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.395 ms ^C --- 10.10.10.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.395/0.566/0.737/0.171 ms
Aceste exerciții și tutoriale sunt menite să abordeze lucruri care nu sunt neapărat necesare pentru utilizarea și înțelegerea conceptelor din acest capitol, dar oferă bune practici și cunoștințe extra despre conectarea calculatorului la Internet și funcționarea serviciilor în Internet.
Exista anumite site-uri, cum ar fi cele de știri, sau articole științifice care ne limitează accesul la un număr de articole pe zi. Funcționalitatea de blocare a conținutului de pe un site până la plata unei sume se numește un paywall. Paywall-urile sunt foarte agasante atunci când încercăm să găsim mai multe surse pentru știri, sau când vrem să parcurgem mai multe articole de pe același site.
Paywall-urile se reduc la elemente HTML care pot fi șterse din pagină pentru a afișa conținutul complet al unui articol. Elementele web pot fi șterse manual, sau automat, folosind un add-on de browser.
Pentru ștergerea automată a blocajelor putem folosi acest add-on de browser care funcționează atât pe Google Chrome cât și pe Mozilla Firefox, care poate fi descărcat și instalat în browser de aici.
Observăm cum după instalarea și activarea add-onului putem vedea conținutul paginii web nerestricționat.
Aplicația SSH permite configurarea scurtăturilor pentru destinații la care vrem să ne conectăm prin SSH.
Pentru a ne conecta în mod normal la stația fep.grid.pub.ro
, cu utilizatorul nostru de pe curs.upb.ro
folosind opțiunea -X
,rulăm comanda:
student@uso:~$ ssh -X <username>@fep.grid.pub.ro
curs.upb.ro
ne autentificăm cu liza_elena.babu
, aici vom rula comanda ssh -X liza_elena.babu@fep.grid.pub.ro
.
Introduceți parola voastră de pe curs.upb.ro
atunci când vi se cere.
Introducerea acestei comenzi pentru fiecare conexiune succesivă este ineficientă și există alternative pentru a reduce timpul de scriere al comenzii.
Vom configura o scurtătura pentru utilitarul ssh
folosit de utilizatorul student
. Fișierul de configurare se regăsește la calea ~/.ssh/config
. Pentru adăugarea unei scurtături vrem să scriem în fișier o intrare de felul următor, înlocuind <username>
cu utilizatorul vostru de pe curs.upb.ro
:
student@uso:~$ cat ~/.ssh/config Host fep HostName fep.grid.pub.ro User username ForwardX11 yes
~/.ssh/config
nu există, atunci trebuie să îl creăm. Acesta trebuie să aibă permisiunile 600, dacă nu, vom primi eroarea Bad owner or permissions on ~/.ssh/config
.
Folosindu-ne de intrarea de mai sus, putem să ne conectăm la stația menționată folosind comanda următoare:
student@uso:~$ ssh fep * IMPORTANT - PLEASE READ CAREFULLY: * Incepand cu 22.09.2019 toate directoarele studentilor vor fi sterse. Va rugam sa va salvati fisierele relevante pana atunci. * If you are using GPU computing and TensorFlow technology, please use CUDA_VISIBLE_DEVICES to limit the number of GPUs. Otherwise, you will be banned. * Your sessions will be disconnected automatically after 60min on inactivity. You can use "-o ServerAliveInterval 10" option if you need longer sessions.* Last login: Tue Jun 2 19:37:40 2020 from 192.168.6.10 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory [liza_elena.babu@fep7-1 ~]$
Această configurație este persistentă, adică veți putea folosi de acum încolo comanda ssh fep
pentru a vă autentifica pe fep.grid.pub.ro
.