Laborator 07 - Configurarea avansată a sistemului

Î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/07-networking/lab-container
student@uso:~/uso-lab/labs/07-networking/lab-container$ ./lab_prepare.sh install tom
[...]
student@uso:~/uso-lab/labs/07-networking/lab-container$ ./lab_prepare.sh install jerry
[...]

Dacă procesul de build eșuează, dați următoarea comandă:

student@uso:~/uso-lab/labs/07-networking/lab-container$ docker-compose build --no-cache
[...]

Permisiuni de acces

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:

  • file ownership
  • permisiuni

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:

  • utilizator (owner): utilizatorul care este deținătorul fișierului/directorului
  • grup (group): grupul de utilizatori care deține fișierul/directorul
  • ceilalți (others): utilizatorii care nu intră în niciuna dintre categoriile anterioare

Pentru fiecare dintre cele trei categorii există trei permisiuni, care oferă următoarele drepturi:

  • de citire: utilizatorul/grupul poate citi conținutul fișierului, respectiv poate lista conținutul directorului
  • de scriere: utilizatorul/grupul poate modifica/șterge conținutul fișierului, respectiv poate crea/șterge/redenumi fișiere din director
  • de execuție: utilizatorul/grupul poate lansa fișierul în execuție, respectiv poate parcurge directorul

Ordinea în care se aplică aceste permisiuni este următoarea:

  1. dacă utilizatorul este deținătorul fișierului, atunci se aplică permisiunile pentru owner
  2. dacă face parte din grupul deținător, atunci se aplică permisiunile pentru grup
  3. dacă niciuna dintre condițiile precedente nu este adevărată, atunci se aplică permisiunile pentru others

Ownership și permisiuni

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:

  • Tip: indică dacă intrarea este un fișier (-) sau director (d)
  • Permisiuni: specifică ce drepturi au asupra fișierului cele trei categorii de utilizatori (owner, grup și others). Fiecărui grup îi corespund 3 caractere (r – read; w – write, x – execute). În acest caz, owner-ul fișierului (utilizatorul 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).
  • Owner/Grup - utilizatorul/grupul care dețin fișierul

Permisiunile se pot specifica și folosind cifre (notație în baza 8 – octal):

  • r = 4
  • w = 2
  • x = 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).

Modificarea permisiunilor

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:

  1. În octal: 777 (drepturi depline: rwx), 740 (drepturi depline pentru owner, de citire pentru utilizatorii din grup și nicio permisiune pentru alți utilizatori).
  2. Alfabetică: +/-[rwx] – o folosim de obicei atunci când dorim să modificăm o singură permisiune. De exemplu, +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.

Exercițiu: Adăugați utilizatorul maria în sistem și autentificați-vă ca maria.

Exercițiu: 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. Pentru aceasta, autentificați-vă ca utilizatorul student și încercați să deschideți fișierul.

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

Configurarea statică a adreselor IP

Î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 a s 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 a a 10.10.10.1/24 dev eth0
root@tom:~# ip link set dev eth0 up  
root@tom:~# ip a s 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

Funcţionalităţi suplimentare de reţelistică

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.

Evitarea paywall-urilor pe site-uri web

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.

NY Times folosind paywall

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.

NY Times folosind add-onul

Observăm cum după instalarea și activarea add-onului putem vedea conținutul paginii web nerestricționat.

Configurarea avansată pentru SSH

Configurarea scurtăturilor SSH

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

Spre exemplu, dacă pe 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

Dacă fișierul ~/.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.

Cuprins

uso/laboratoare/laborator-07.txt · Last modified: 2020/12/01 21:47 by liza_elena.babu
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