Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:new:03-user [2018/10/16 12:39]
elena.stoican [Need to know]
uso:laboratoare:new:03-user [2018/10/17 00:06] (current)
razvan.deaconescu
Line 1: Line 1:
 ====== Laborator 03: Utilizatori ====== ====== Laborator 03: Utilizatori ======
  
-===== Înainte de laborator =====+{{page>:​uso:​laboratoare:​new:​03-user:​setup&​nofooter&​noeditbutton}}
  
-^ Comandă ​ ^ Descriere scurtă ​      ^ +===== Cuprins =====
-| **''​sudo''​** ​    | execută o comandă cu drepturi de utilizator privilegiat | +
-| **''​su''​** ​      | schimbă utilizatorul cu care suntem autentificați ​      | +
-| **''​id''​** ​      | afișează id-ul și grupurile din care face parte un utilizator | +
-| **''​finger''​** ​  | afișează un sumar despre un anumit utilizator | +
-| **''​whoami''​** ​  | afișează utilizatorul curent (cu care suntem autentificați) | +
-| **''​who''​** ​     | lista de utilizatori autentificați la un moment dat | +
-| **''​passwd''​** ​  | schimbă parola unui utilizator |  +
-| **''​adduser''​** ​ | adaugă un utilizator | +
-| **''​deluser''​** ​ | șterge un utilizator | +
-| **''​usermod''​** ​ | modifică informații despre un utilizator (exemplu: grupul din care face parte) | +
-| **''​addgroup''​** | adaugă un grup de utilizatori | +
-| **''​delgroup''​** | șterge un grup de utilizatori |+
  
-==== Obiective ==== +{{page>​uso:​laboratoare:​new:​03-user:​nav&​noheader&​nofooter&​noeditbutton}}
- +
-  * Înțelegerea nevoii de cont de utilizator și de grup, ca mod de separare a resurselor +
-  * Înțelegerea nevoii de cont privilegiat (root) și riscurile aferente contului +
-  * Înțelegerea modului de funcținare a ownership-ului și permisiunilor în Linux +
-  * Abilități de gestiune a utilizatorilor și grupurilor într-un sistem +
-  * Înțelegerea legăturii între utilizatori și procese +
-  * Familiarizarea cu moduri de creștere a privilegiilor și accesul la contul de root (sudo) +
- +
-==== Folosire Git pentru laborator ==== +
- +
-Pe parcursul laboratoarelor,​ pentru descărcarea fișierelor necesare laboratorului,​ vom folosi Git. Git este un sistem de controlul versiunii și e folosit pentru versionarea codului în proiectele software mari. Celor interesați să aprofundeze conceptele din spatele comenzii ''​git'',​ precum și utilizări avansate, le recomandăm cursul practic online de pe [[http://​gitimmersion.com/​|gitimmersion]]. +
- +
-Informațiile despre laboratorul de USO se găsesc în [[https://​github.com/​systems-cs-pub-ro/​uso|acest repository Git]]. +
- +
-În laboratorul curent, pe sistemele din laborator (și pe [[https://​ocw.cs.pub.ro/​courses/​uso/​resurse/​mv|mașina virtuală]]) aveți deja clonat repository-ul Git în directorul ''​~/​uso.git/''​. Vom preciza acest lucru pe parcursul laboratorului. +
- +
-<note important> +
-Pentru a pregăti infrastructura de laborator rulați comenzile de mai jos într-un terminal deschis în mașina virtuală. Deschideți un terminal folosind combinația de taste ''​Ctrl+Alt+t''​. În listarea de mai jos ''​student@uso:~$''​ este promptul unde introduceți comenzile, pe acela nu-l tastați. Recomandăm să **nu** folosiți //​copy-paste//​ ca să vă acomodați cu linia de comandă: +
-<​code>​ +
-student@uso:​~$ cd uso.git/ +
-student@uso:​~/​uso.git$ git rm --cached -r . +
-student@uso:​~/​uso.git$ git reset --hard +
-student@uso:​~/​uso.git$ git clean -f -d +
-student@uso:​~/​uso.git$ git fetch origin +
-student@uso:​~/​uso.git$ git checkout -b lab-03-user +
-student@uso:​~/​uso.git$ git rebase origin/​lab-03-user +
-</​code>​ +
- +
-Dacă la a cincea comandă rulată (''​git checkout -b lab-03-user''​) primiți o eroare de forma ''​fatal:​ A branch named '​lab-03-user'​ already exists.'',​ nu vă îngrijorați,​ nu e nici o problemă. +
- +
-Dacă la un moment dat în lucrul în repository ați șters sau modificat ceva și doriți să reveniți la starea inițială, rulați din nou comenzile de mai sus. +
-</​note>​ +
- +
-Cam atât cu pregătirea laboratorului. Acum haideți să ne apucăm de treabă! :-) +
- +
-===== Concepte ===== +
- +
-==== Utilizatori și grupuri ==== +
- +
-În Linux există trei tipuri de utilizatori:​  +
- +
-  * administrativ (root) +
-  * utilizator obișnuit +
-  * utilizatorii creați și folosiți de servicii +
- +
-Utilizatorul ''​root''​ este creat automat la instalarea sistemului de operare Linux și are drepturi depline asupra tuturor serviciilor și resurselor din sistem, având și rolul de a administra și gestiona ceilalți utilizatori. Acesta mai poartă și denumirea de ''​super user''​. +
- +
-Utilizatorii obișnuiți au doar privilegiile necesare pentru a efectua activități standard pe un sistem Linux, cum ar fi rularea aplicațiilor cu interfață grafică și editarea de fișiere. Aceștia pot stoca fișiere în propriile directoare (''​home''​). Întrucât utilizatorii obișnuiți nu au, în mod normal, privilegii administrative,​ nu pot șterge accidental fișierele de configurare critice ale sistemului de operare. +
- +
-Servicii cum ar fi Apache (server web), server de mail, baze de date, etc. au utilizatori proprii care sunt folosiți pentru a permite fiecăruia dintre aceste servicii să interacționeze cu sistemul, fără a avea acces la mai multe resurse decât este necesar. +
- +
-În acest laborator ne vom axa pe primele două tipuri și vom împărți utilizatorii în: +
-  * utilizatori privilegiați (root) +
-  * utilizatori neprivilegiați (utilizatori obișnuiți) +
- +
-În Linux sunt două moduri de a rula comenzi cu drepturi administrative. Putem să schimbăm utilizatorul curent în ''​root''​ sau putem folosi funcționalitatea oferită de comanda ''​sudo''​. +
-Comanda ''​sudo''​ permite rularea unor comenzi ca un alt utilizator (utilizatorul privilegiat). +
- +
-<note warning>​ +
-Este recomandat să folosiți sistemul ca utilizatorul ''​root''​ doar pentru strictul necesar. De multe ori este suficientă utilizarea comenzii ''​sudo''​. +
-</​note>​ +
- +
-La crearea unui utilizator, se crează automat și un grup cu același nume ce va conține utilizatorul abia creat. Acesta poartă numele de ''​primary group''​. De asemenea, utilizatorii pot crea oricâte alte grupuri. +
-Un grup poate conține unul sau mai mulți utilizatori,​ iar un utilizator poate să existe în unul sau mai multe grupuri. +
- +
-==== 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, nici un 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:​ +
-  - Ordered List Itemdacă utilizatorul este deținătorul fișierului,​ atunci se aplică permisiunile pentru owner +
-  - dacă face parte din grupul deținător,​ atunci se aplică permisiunile pentru grup +
-  - dacă niciuna dintre condițiile precedente nu este adevărată,​ atunci se aplică permisiunile pentru others +
-   +
-===== Demo ===== +
- +
-În acest demo dorim să ne acomodăm cu cele mai importante comenzi utilizate atunci când lucrăm cu utilizatori,​ grupuri de utilizatori sau permisiuni în Linux. +
- +
-<note tip> +
-Să nu uităm de [[uso:​resurse:​cheatsheet|cheatsheetul]] pe care îl putem folosi ca să ne reamintim cele mai frecvente comenzi. +
-</​note>​ +
- +
-<note warning>​ +
-S-ar putea ca unele comenzi să nu fie instalate, folosiți ''​sudo apt-get install <numele comeznii>''​ pentru a le instala. +
-Exemplu: ''​sudo apt-get install finger''​. +
-</​note>​ +
- +
-==== Utilizatori privilegiați si neprivilegiați (id, finger, whoami) ==== +
- +
-În continuare, vom vedea cum putem afla informații despre utilizatori. +
-În sistem exista cel puțin doi utilizatori:​ utilizatorul cu care ne-am logat (''​student''​) și utilizatorul privilegiat ''​root''​. +
- +
-Pentru a afla informații despre un utilizator sau pentru a verifica dacă un anumit utilizator există, putem folosi comanda ''​finger''​. +
- +
-<code bash> +
-student@uso:​~$ finger student +
-Login: student ​                         Name: Student User +
-Directory: /​home/​student ​               Shell: /bin/bash +
-On since Sun Sep 16 15:07 (EEST) on :0 from :0 (messages off) +
-No mail. +
-No Plan. +
- +
-student@uso:​~$ finger root +
-Login: root                             Name: root +
-Directory: /root                        Shell: /bin/bash +
-Never logged in. +
-No mail. +
-No Plan. +
-</​code>​ +
- +
-În outputul comenzii observăm informații despre utilizatorul ''​student'',​ precum directorul ''​home'',​ numele complet etc. +
- +
-O altă comandă utilă este ''​id''​. Cum și numele sugerează, ne dă id-ul utilizatorului (''​uid''​) dar și id-urile grupurilor (''​gid''​) din care face parte utilizatorul curent. +
- +
-<code bash> +
-student@uso:​~$ id +
-uid=1000(student) gid=1000(student) groups=1000(student),​4(adm),​24(cdrom),​27(sudo),​30(dip),​46(plugdev),​116(lpadmin),​126(sambashare) +
-</​code>​ +
- +
-Pentru a vedea cu ce utilizator suntem logați, putem folosi comanda ''​whoami''​. +
-<code bash> +
-student@uso:​~$ whoami +
-student +
-</​code>​ +
- +
-==== Rularea comenzilor ca utilizator privilegiat (sudo) ==== +
- +
-Să presupunem că pe un sistem avem 100 de utilizatori și vrem ca toți să aibă drepturile necesare instalării de noi pachete, dar să nu poată adăuga/​șterge alți utilizatori. Pe lângă faptul că ar fi foarte foarte nesigur ca 100 de persoane să știe parola contului de root, ar trebui să ne bazăm pe faptul că ei nu vor face altceva decât să instaleze pachete. Soluția acestei probleme este comanda ''​sudo''​. +
- +
-Această comandă permite execuția de comenzi de către utilizatori neprivilegiați cu drepturi de utilizatori privilegiați. Se poate configura ce utilizatori au drept să execute această comandă și ce comenzi pot rula ca utilizator privilegiat. +
- +
-De exemplu, dacă dorim să instalăm pachetul ''​cowsay''​ ca utilizatorul ''​student'',​ vom primi o eroare de permisiune. +
- +
-<code bash> +
-student@uso:​~$ apt-get install cowsay +
-E: Could not open lock file /​var/​lib/​dpkg/​lock - open (13: Permission denied) +
-E: Unable to lock the administration directory (/​var/​lib/​dpkg/​),​ are you root? +
-</​code>​ +
- +
-După cum observăm din eroarea afișată în output, nu avem drepturi să instalăm pachete. +
-Pentru a rezolva această problemă folosim comanda ''​sudo''​. +
- +
-<code bash> +
-student@uso:​~$ sudo apt-get install cowsay +
-[sudo] password for student: +
-student@uso:​~$ cowsay "​Meuh"​ +
- ​______ +
-< Meuh > +
- ​------ +
-        \   ​^__^ +
-         ​\ ​ (oo)\_______ +
-            (__)\       ​)\/​\ +
-                ||----w | +
-                ||     || +
- +
- +
-</​code>​ +
- +
-<note important>​ +
-Comanda ''​sudo''​ cere parola utilizatorului curent (în cazul nostru utilizatorul ''​student''​),​ nu pe cea a utilizatorului ''​root''​. +
-</​note>​ +
- +
-==== Schimbarea utilizatorului curent (su) ==== +
- +
-Pentru a schimba utilizatorul cu care suntem autentificați,​ folosim comanda ''​su''​ (switch user). Comanda lansează o sesiune nouă de terminal în contextul noului utilizator, deci pentru a reveni la utilizatorul precedent este suficient să rulăm comanda ''​exit''​ pentru a termina noua sesiune. +
- +
-Înlănțuirea de comenzi de mai jos schimbă utilizatorul curent din ''​student''​ în ''​root'',​ verifică că acum utilizatorul logat este ''​root'',​ închide sesiunea utilizatorului ''​root''​ și revine la utilizatorul ''​student''​ folosind comanda ''​exit''​. +
-Întrucât nu cunoaștem parola utilizatorului ''​root'',​ putem folosi această comanda împreună cu comanda ''​sudo''​. +
- +
-<code bash> +
-student@uso:​~$ sudo su root +
-[sudo] password for student: +
-root@uso:/​home/​student#​ whoami +
-root +
-root@uso:/​home/​student#​ exit +
-exit +
-student@uso:​~$ +
-</​code>​ +
- +
-<note important>​ +
-De observat că atunci când schimbăm utilizatorul,​ nu se schimbă și directorul curent în directorul home al noului utilizator. +
-</​note>​ +
- +
-==== Gestiunea utilizatorilor (adduser/​deluser) ==== +
- +
-În continuare vom crea noi utilizatori iar ulterior îi vom șterge. Pentru aceasta, vom folosi comenzile **adduser** și **deluser** . +
- +
-<note important>​ +
-Cele două comenzi sunt de fapt niște scripturi //wrapper// scrise în [[https://​www.perl.org|Perl]] prezente, în general, numai pe distribuții bazate pe [[http://​www.debian.org|Debian]] (cum ar fi Ubuntu). Comenzile pe care le apelează ele în spate sunt ''​useradd''​ și ''​userdel''​. +
-</​note>​ +
- +
-Dorim să creăm utilizatorul ''​bogdan''​. Mai întâi verificăm că acesta nu există, după care îl adăugăm. +
- +
-<code bash> +
-student@uso:​~$ finger bogdan +
-finger: bogdan: no such user. +
-</​code>​ +
- +
-<code bash> +
-student@uso:​~$ sudo adduser bogdan +
-Adding user `bogdan'​ ... +
-Adding new group `bogdan'​ (1002) ... +
-Adding new user `bogdan'​ (1002) with group `bogdan'​ ... +
-Creating home directory `/​home/​bogdan'​ ... +
-Copying files from `/​etc/​skel'​ ... +
-Enter new UNIX password: +
-Retype new UNIX password: +
-passwd: password updated successfully +
-Changing the user information for bogdan +
-Enter the new value, or press ENTER for the default +
-        Full Name []: Bogdan +
-        Room Number []: +
-        Work Phone []: +
-        Home Phone []: +
-        Other []: +
-Is the information correct? [Y/n] Y +
-</​code>​ +
- +
-În outputul comenzii anterioare observăm mai multe informații utile la adăugarea unui nou utilizator:​ +
-  * se creează un nou grup cu același nume +
-  * se creează home-ul utilizatorului +
-  * directorul home va copia structura de fișiere și directoare din directorul ''/​etc/​skel''​ +
-  * se cere o parolă și alte informații care sunt afișate la apelul comenzii ''​finger''​. +
- +
-<code bash> +
-bogdan@uso:​~$ finger bogdan +
-Login: bogdan ​                          Name: Bogdan +
-Directory: /​home/​bogdan ​                ​Shell:​ /bin/bash +
-Never logged in. +
-No mail. +
-No Plan. +
-</​code>​ +
- +
-După aceasta ne autentificăm ca utilizatorul ''​bogdan''​. Argumentul ''​-''​ este folosit pentru comanda ''​su''​ pentru a schimba directorul curent la home-ul noului utilizator. +
- +
-<code bash> +
-student@uso:​~$ su - bogdan +
-Password: +
-bogdan@uso:​~$ pwd +
-/​home/​bogdan +
-bogdan@uso:​~$ whoami +
-bogdan +
-</​code>​ +
- +
-Dacă utilizatonul nu mai este necesar în sistem, îl ștergem folosind comanda ''​deluser''​. +
- +
-<code bash> +
-student@uso:​~$ sudo deluser bogdan +
-Removing user `bogdan'​ ... +
-Warning: group `bogdan'​ has no more members. +
-Done. +
-student@uso:​~$ finger bogdan +
-finger: bogdan: no such user. +
-</​code>​ +
- +
-==== Schimbarea parolei (passwd) ==== +
- +
-Pentru a schimba parola utilizatorului curent folosim comanda ''​passwd'',​ fără argumente. Înainte de introducerea unei parole noi, trebuie să validăm parola veche. +
- +
-<code bash> +
-student@uso:​~$ passwd +
-Changing password for student. +
-(current) UNIX password: +
-Enter new UNIX password: +
-Retype new UNIX password: +
-passwd: password updated successfully +
-</​code>​ +
- +
-Dacă dorim schimbarea parolei altui utilizator, îi putem oferi comenzii ''​passwd''​ numele acestuia ca parametru. +
- +
-<code bash> +
-root@uso:~# passwd student +
-Enter new UNIX password: +
-Retype new UNIX password: +
-passwd: password updated successfully +
-</​code>​ +
- +
-==== Ownership și permisiuni ==== +
- +
-Pentru a inspecta permisiunile și deținătorii unui anumit director sau fișier folosim comanda ''​ls'',​ împreună cu argumentul ''​-l''​. +
- +
-<code bash> +
-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 +
-</​code>​ +
- +
-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. +
- +
-<code bash> +
-student@uso:​~$ ls -ld uso.git/ +
-drwxr-xr-x 14 student student 4096 aug 20 20:57 uso.git/ +
-</​code>​ +
- +
-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: +
- +
-  - În octal: 777 (drepturi depline: rwx), 740 (drepturi depline pentru owner, de citire pentru utilizatorii din grup și nicio permisiune pentru alți utilizatori). +
-  - 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. +
- +
-<code bash> +
-student@uso:​~$ touch testfile.sh +
-student@uso:​~$ ls -l testfile.sh  +
--rw-r--r-- 1 student student 0 sep 16 16:47 testfile.sh +
-</​code>​ +
- +
-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 +
-<code bash> +
-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 +
-</​code>​ +
- +
-#2 +
-<code bash> +
-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 +
-</​code>​ +
- +
-===== Recapitulare ===== +
- +
-  - Să se afișeze toate procese din sistem în timp real. +
-  - Să se afișeze utilizatorul,​ id-ul procesului, id-ul procesului părinte, comanda și memoria folosită pentru toate procesele utilizatorului ''​student''​. +
- +
-===== Basics ===== +
- +
-Înainte de a începe exercițiile,​ nu uitați să rulați comenzile de ''​Git''​ din secțiunea [[http://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​new/​03-user?&#​folosire_git_pentru_laborator|Folosire Git pentru laborator]]. +
- +
-==== Gestiunea utilizatorilor ==== +
- +
-În Linux există un fișier ce stochează informații despre toți utilizatorii din sistem. +
-Acest fișier este ''/​etc/​passwd'',​ este un fișier text, și conține o listă cu utilizatorii din sistem și informații despre fiecare din ei, cum ar fi''​user ID'',​ ''​group ID'',​ ''​home directory'',​ etc. Astfel, de fiecare dată când adăugăm un nou utilizator, se adaugă automat și o intrare în acest fișier. +
-Pentru mai multe detalii puteți accesa pagina de [[https://​en.wikipedia.org/​wiki/​Passwd|Wikipedia]]. +
- +
-<code bash> +
-student@uso:​~$ cat /​etc/​passwd +
-root:​x:​0:​0:​root:/​root:/​bin/​bash +
-daemon:​x:​1:​1:​daemon:/​usr/​sbin:/​usr/​sbin/​nologin +
-bin:​x:​2:​2:​bin:/​bin:/​usr/​sbin/​nologin +
-sys:​x:​3:​3:​sys:/​dev:/​usr/​sbin/​nologin +
-... +
-</​code>​ +
- +
-** Exerciții ** +
-  - Să se creeze utilizatorii:​ ''​ana'',​ ''​bogdan''​ și ''​david''​ și să se afișeze informații utile despre aceștia (grupurile din care fac parte, directorul home, etc.). +
- +
-<​note>​ +
-Când schimbăm utilizatorul curent, nu se modifică și directorul curent. Pentru a ne ajunge direct în home-ul noului utilizator, folosim argumentul ''​-''​ pentru comanda ''​su'':​ +
- +
-<code bash> +
-student@uso:​~$ su - ana +
-Password:  +
-ana@uso:​~$ +
-</​code>​ +
-</​note>​ +
- +
-==== Gestiunea grupurilor de utilizatori ==== +
- +
-La crearea unui utilizator, se crează în mod automat și un grup cu același nume. Dacă dorim să realizăm o organizare diferită a utilizatorilor,​ putem să creăm noi grupuri. +
-Pentru crearea unui grup se folosește comanda ''​addgroup'',​ iar pentru ștergerea unui grup folosim ''​delgroup''​. +
- +
-<code bash> +
-student@uso:​~$ sudo addgroup studenti +
-[sudo] password for student:  +
-Adding group `studenti'​ (GID 1003) ... +
-Done. +
-</​code>​ +
- +
-Pentru a adăuga un utilizator în unul sau mai multe grupuri se foloseste comanda ''​usermod''​ ca in exemplul de mai jos.  +
-Comanda ''​id''​ a fost apelată înainte și după adăugarea utilizatorului ''​bogdan''​ în grupul ''​studenti''​ pentru a verifica dacă adăugarea a funcționat. +
- +
-<code bash> +
-student@uso:​~$ id bogdan +
-uid=1002(bogdan) gid=1002(bogdan) groups=1002(bogdan) +
-student@uso:​~$ sudo usermod bogdan -G studenti +
-student@uso:​~$ id bogdan +
-uid=1002(bogdan) gid=1002(bogdan) groups=1002(bogdan),​1003(studenti) +
-</​code>​ +
- +
-**Exerciții** +
- +
-  - Adăugați și utilizatorii ''​ana''​ și ''​david''​ în grupul ''​studenti''​. +
-  - Creați utilizatorii ''​dan''​ și ''​elena''​ și grupul ''​asistenti''​ și adăugați acești utilizatori în noul grup. +
-  - Ștergeți grupul ''​asistenți''​ creat anterior și utilizatorii asociați. +
- +
-<note info> +
-Pentru ștergere folosiți comenzile ''​deluser''​ și ''​delgroup''​ urmate de numele utilizatorului,​ respectiv numele grupului. +
-</​note>​ +
- +
-==== Permisiuni pentru grupuri ==== +
- +
-După cum este explicat pe larg mai sus, pentru orice operație pe care un utilizator dorește să o facă asupra unui fișier sau director, acesta trebuie să aibă permisiunile necesare. +
- +
-Atunci când mai mulți utilizatori trebuie să aibă anumite permisiuni asupra unui fișier (citire, scriere, execuție), se crează un nou grup cu utilizatorii respectivi și se setează acest grup ca grupul ce deține fișierul. +
- +
-Să luăm exemplul următor. Utilizatorul ''​student''​ crează fișierul ''​studenti.txt''​. +
- +
-<code bash> +
-student@uso:​~$ touch student.txt +
-student@uso:​~$ ls -l student.txt  +
--rw-rw-r-- 1 student student 0 sep 25 21:42 student.txt +
-</​code>​ +
- +
-După ce a fost creat, ownerul fișierului este userul ''​student'',​ iar grupul ce deține fișierul este ''​student''​. +
-Dorim ca acest fișier să poată fi editat de utilizatorii ''​ana'',​ ''​bogdan''​ și ''​david''​. +
-Toți acești utilizatori sunt deja într-un grup comun: ''​studenti''​. Astfel, tot ce ne rămâne de făcut este să modificăm grupul fișierului. +
- +
-<note info> +
-Pentru a modifica grupul fișierului putem folosi atât comanda ''​chown'',​ cât și ''​chgrp''​. +
-</​note>​ +
- +
-<code bash> +
-student@uso:​~$ sudo chgrp studenti student.txt  +
-student@uso:​~$ ls -l student.txt  +
--rw-rw-r-- 1 student studenti 4 sep 25 21:54 student.txt +
-</​code>​ +
- +
-Acum putem verifica că și ceilalți utilizatori pot modifica conținutul fișierului:​ +
- +
-<code bash> +
-ana@uso:/​home/​student$ echo Ana > student.txt +
-ana@uso:/​home/​student$ cat student.txt  +
-Ana +
-</​code>​ +
- +
-**Exerciții** +
-  - Să se creeze fișierul ''​shared''​ de către utilizatorul ''​student''​. Faceți modificările necesare a.î. utilizatorul ''​student''​ să poată modifica fișierul, utilizatorii ''​bogdan''​ și ''​david''​ să poată vizualiza conținutul fișierului,​ iar oricine altcineva să nu aibă niciun drept (testați cu utilizatorul ''​ana''​). +
- +
-===== Need to know ===== +
- +
-**1. Adăugarea de noi utilizatori și grupuri** +
- +
-Ca administratori ai infrastructurii IT a facultății de care răspundeți ați primit următorul [[https://​docs.google.com/​spreadsheets/​d/​15LxIrhz0JTdLgWJqyHwj4hfVOg_uW6TyRnUbKqEtB8Y/​edit#​gid=0|fișier excel]] cu nume de +
- ​utilizatori și grupuri din care trebuie să facă parte fiecare, conform cu politica școlii. +
- +
-Sarcina voastră este să adăugați în sistem grupurile și utilizatorii,​ după care să înscrieți utilizatorii în grupuri conform cu tabelul primit. +
- +
-De asemenea, trebuie să configurați următoarele parole: +
-  * Studenții vor avea parola ''​student''​ +
-  * Profesorii vor avea parola ''​profesor007''​ +
-  * Administratorii vor avea parola ''​admin1234''​ +
- +
-Pentru cei care sunt în mai multe grupuri simultan alegeți parola mai dificilă (să conțină caractere/​cifre diferite). +
- +
-<​note>​Pentru **verificarea** adăugării trebuie să inspectăm fișierul ''/​etc/​passwd''​ pentru utilizatori și ''/​etc/​group''​ pentru grupuri. De asemenea, pentru a vedea grupurile din care face parte un anumit utilizator și totodată existența sa în sistem mai putem folosi comanda ''​id''​. +
- +
-Pentru a nu inspecta manual fișierele ''/​etc/​passwd''​ sau ''/​etc/​group'',​ putem folosi comanda [[http://​man7.org/​linux/​man-pages/​man1/​getent.1.html|getent]] pentru verificarea setarilor pentru un user sau grup: +
- +
-<code bash> +
-student@uso~$ getent passwd dan +
-dan:​x:​1003:​1003:​Dan:/​home/​public/​dan:/​bin/​bash +
-student@uso~$ getent group gdm +
-gdm:x:42: +
- +
-</​code>​ +
-</​note>​ +
- +
-**2. Editarea unui fișier de către mai mulți utilizatori** +
- +
-Pentru sesiunea de prezentări din cadrul facultății,​ studenții trebuie să se înscrie într-un fișier precum cel de mai jos. +
- +
-<code bash> +
-$ cat proiecte.txt +
-#. Student - Profesor - Proiect +
-1. dan - alex - proiect1 +
-2. corina - alex - proiect2 +
-3. elena - mihai - proiect3 +
-</​code>​ +
- +
-Creați acest fișier logați ca utilizatorul ''​student''​. Pentru a îl putea edita, studenții trebuie să aibă drept de scriere asupra lui. +
-Acest fișier trebuie să poată fi editat atât de utilizatorii studenți cât și de utilizatorii profesori. +
- +
-Creați un nou grup care să conțină utilizatorii necesari și permiteți acces asupra acestui fișier. +
- +
-**3. Schimbarea ownership-ului unui fișier** +
- +
-Să se modifice owner-ul fișierului ''​proiecte.txt''​ cu un utilizator din grupul ''​admin''​. +
- +
-==== Comanda ''​sudo''​ ==== +
- +
-După cum ați aflat și în prima parte a laboratorului,​ putem rula comenzi administrative fie folosind utilizatorul ''​root'',​ fie folosind comanda ''​sudo''​. +
- +
-Denumirea de ''​sudo''​ vine de la //​substitute user do// sau //super user do//. +
-Comanda ''​sudo''​ permite unui utilizator să ruleze comenzi cu privilegiile de acces ale altui utilizator, în general ca utilizatorul ''​root''​. +
- +
-În mod implicit, la prima rulare a comenzii ''​sudo''​ se cere parola utilizatorului care va fi păstrată intr-un cache timp de 5 min. +
-Se poate configura astfel încât parola să fie cerută o singură dată, sau să nu se ceară deloc. +
- +
-Nu toți utilizatorii au implicit drept de ''​sudo''​. Pentru a verifica dacă un utilizator are acest drept, puteți rula orice comanda doriți folosind ''​sudo''​. +
- +
-<code bash> +
-corina@uso:​~$ sudo -v +
-Sorry, user corina may not run sudo on uso. +
-</​code>​ +
- +
- +
-**4. Drepturi de sudo pentru un utilizator** +
- +
-Suntem autentificați ca utilizatorul ''​corina''​ și vrem să instalăm un pachet. Observăm totuși că nu avem permisiuni. +
- +
-<code bash> +
-corina@midgard:​~$ sudo apt-get install tree +
-[sudo] password for corina: +
-corina is not in the sudoers file.  This incident will be reported. +
-</​code>​ +
- +
-<note tip> +
-Pentru a acorda //drepturi de sudo// unui utilizator se folosește comanda ''​visudo'',​ care modifică fișierul de configurare ''/​etc/​sudoers''​. Reveniți la shell-ul utilizatorului ''​student''​ (''​Ctrl+D''​ sau ''​exit''​) și tastați comanda: +
- +
-<code bash> +
-student@midgard:​~$ sudo visudo +
-</​code>​ +
-</​note>​ +
- +
-Dați drepturi utilizatorului ''​corina''​ de a instala pachete in sistem, fără a i se cere parola. Puteți vedea un exemplu de configurație pe [[http://​askubuntu.com/​questions/​139723/​sudo-does-not-ask-for-password|askubuntu]]. +
- +
-<​note>​**Verificare:​** Reautentificați-vă drept ''​corina''​ și încercați din nou să rulați o comandă de instalare de pachete în sistem folosind ''​sudo''​.</​note>​ +
- +
-**5. Drepturi de sudo pentru un grup** +
- +
-În același mod configurați sistemul astfel încât utilizatorii din grupul ''​profesor''​ să aibă drepturi depline de ''​sudo''​ în sistem. +
- +
-Autentificați-vă în sistem ca ''​alex''​ și ca ''​mihai''​ și verificați că funcționează comanda: +
- +
-<code bash> +
-alex@uso:~$ sudo apt-get install rig +
-</​code>​ +
- +
-Asigurați-vă că nu apare eroarea următoare (dacă apare înseamnă că ați greșit configurația din ''​visudo''​):​ +
- +
-<code bash> +
-(...) +
-alex is not in the sudoers file. This incident will be reported. +
-(...) +
-</​code>​ +
- +
-===== Nice to know ===== +
- +
-Înainte de a începe această secțiune trebuie să vă asigurați că sunteți în directorul potrivit. +
-Rulați comanda ''​cd ~/​uso.git/​labs/​03-user/​support/​nice-to-know/''​. +
- +
-**1. Schimbarea homedir-ului unui utilizator** +
- +
-Configurați sistemul astfel încât home directory-ul utilizatorului ''​dan'',​ în loc de ''/​home/​dan'',​ să fie ''/​home/​public/​dan''​. Creați directorul dacă acesta nu există. +
- +
-<note tip> +
-Indicație: Folosim [[http://​linux.die.net/​man/​8/​usermod|usermod (modify a user account)]]. Căutați după ''​new login directory''​. +
-</​note>​ +
- +
-**Pentru verificare** ​Apăsați ''​Ctrl+D''​ sau tastați ''​exit''​ pentru a reveni la terminalul în care erați autentificați ca ''​student''​ după care încercați comanda ''​su - dan''​. Dați ''​pwd''​ și verificați că homedir-ul acestuia e cel configurat cu ''​usermod''​. Alt mod de a verifica este inspectarea fișierului ''/​etc/​passwd''​ și căutând linia care conține ''​dan''​. +
- +
-**2. Permisiuni pentru executabile** +
- +
-<note important>​ +
-Înainte de a începe următoarele trei exerciții trebuie să pregătiți setup-ul rulând următoarea comandă: ''​./​runme''​. +
-Exercițiul 2.1 trebuie să fie rezolvat primul. +
-</​note>​ +
- +
-2.1 În acest moment, la rularea comenzii ''​ls''​ ar trebui să primiți următorul mesaj de eroare: +
- +
-<code bash> +
-student@uso:​~$ ls +
-bash: /bin/ls: Permission denied +
-</​code>​ +
- +
-Investigați de ce nu mai funcționează comanda ''​ls''​ și reparați problema. +
- +
- +
-2.2 Se dă următorul script din directorul ''​executable''​. Să se rezolve permisiunile astfel încât să funcționeze următoarea lansare în execuție:​ +
- +
-<code bash> +
-student@uso:​~/​.../​03-user/​support/​nice-to-know$ ./​executable/​script.sh +
-</​code>​ +
- +
-2.3 Directorul ''​music''​ conține mai multe fișiere și directoare. +
-Intrați în directorul ''​music''​ (''​cd music''​),​ iar apoi în directorul ''​ac_dc''​. +
-Listați conținutul directorului ''​ac_dc''​. +
-Mergeți înapoi în directorul ''​music''​ (''​cd ..''​) și listați conținutul. După cum ați observat primiți o eroare. Totuși ați putut accesa și vizualiza directorul ''​ac_dc'',​ de ce nu puteți vizualiza și conținutul directorului ''​music''?​ Rezolvați problema, astfel încât listarea să funcționeze. +
- +
-==== Permisiuni default - umask ==== +
- +
-Comanda ''​umask''​ definește permisiunile default care sunt aplicate pentru fișierele sau directoarele nou create. +
-Permisiunile default funcționează prin aplicarea unei măști formată din trei cifre, care se poate modifica folosind ''​umask'',​ asupra permisiunilor de bază ale fișierelor și directoarelor. +
-Permisiunile de bază pentru fișiere sunt ''​666'',​ iar pentru directoare sunt ''​777''​. +
- +
-Pentru a vedea ce mască este aplicată pe sistemul nostru, folosim comanda ''​umask''​ fără parametri: +
-<code bash> +
-student@uso:​~$ umask +
-0002 +
-</​code>​ +
- +
-Pentru a afla ce permisiuni se vor seta implicit, calculăm diferența între valorile de bază și mască, astfel (în acest exemplu masca este ''​002''​):​ +
- +
-  * pentru fișiere: +
- +
-    666 - +
-    002 +
-    ___ +
-    664 +
- +
-  * pentru directoare:​ +
- +
-    777 - +
-    002 +
-    ___ +
-    775 +
- +
-** Exerciții ** +
-  - Verificați faptul că la crearea unui nou fișier sau director sunt aplicate aceste permisiuni. +
-  - Să se facă modificările necesare a.î. la crearea unui nou fișier ownerul să aibă drept de citire și scriere, iar grupul și toți ceilalți utilizatori să aibă doar drept de citire. +
- +
-===== Get a life ===== +
- +
-** 1. Structură de fișiere default ** +
- +
-Să se configureze sistemul astfel încât la adăugarea unui nou utilizator să se creeze automat în directorul său ''​home''​ următoarea structură de fișiere și directoare:​ +
- +
-<code bash> +
-+
-├── books +
-│   └── to-read.txt +
-├── movies +
-│   └── movies-list.txt +
-</​code>​ +
- +
-<note tip> +
-**HINT**: skeleton directory +
-</​note>​ +
- +
-** 2. SUID / GUID / Sticky bit ** +
- +
-Până în acest moment ați folosit doar permisiunile ''​r''​ (read), ''​w''​ (write) și ''​x''​ (execute). +
-Pe lângă acești biți, mai există încă trei, cunoscuți ca ''​SUID'',​ ''​GUID''​ și ''​Sticky bit''​. +
-Căutați care este diferența dintre aceste trei permisiuni, la ce se folosesc și dați câte un exemplu real de utilizare pentru fiecare în parte. +
-Discutați între voi și cu asistentul pentru a verifica dacă ați înțeles corect. +
- +
-** 3. Script pentru crearea de utilizatori ** +
- +
-Să se scrie un script care să creeze utilizatorul ''​morty''​ din grupul ''​rick'',​ având parola ''​rickandmorty''​. Scriptul trebuie să fie neinteractiv. +
- +
-===== Sumar. Cuvinte cheie ===== +
-  * Utilizatori privilegiați și neprivilegiați +
-  * Grupuri de utilizatori +
-  * Gestiunea utilizatorilor:​ ''​adduser'',​ ''​deluser''​ +
-  * Gestiunea grupurilor de utilizatori:​ ''​addgroup'',​ ''​delgroup''​ +
-  * Aflare informații despre utilizatori:​ ''​id'',​ ''​finger'',​ ''​whoami''​ +
-  * Comanda ''​sudo''​ +
-  * Ownership și permisiuni: ''​chmod'',​ ''​chown''​+
  
uso/laboratoare/new/03-user.1539682787.txt.gz · Last modified: 2018/10/16 12:39 by elena.stoican
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