This is an old revision of the document!


Laborator 03: Utilizatori

Înainte de laborator

Comandă Descriere scurtă
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

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

Informațiile despre laboratorul de USO se găsesc în acest repository Git.

În laboratorul curent, pe sistemele din laborator (și pe mașina virtuală) aveți deja clonat repository-ul Git în directorul ~/uso.git/. Vom preciza acest lucru pe parcursul laboratorului.

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ă:

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

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.

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

Este recomandat să folosiți sistemul ca utilizatorul root doar pentru strictul necesar. De multe ori este suficientă utilizarea comenzii sudo.

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:

  1. Ordered List Itemdacă 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

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.

Să nu uităm de cheatsheetul pe care îl putem folosi ca să ne reamintim cele mai frecvente comenzi.

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.

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.

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.

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

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)

Pentru a vedea cu ce utilizator suntem logați, putem folosi comanda whoami.

student@uso:~$ whoami
student

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.

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?

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.

student@uso:~$ sudo apt-get install cowsay
[sudo] password for student:
student@uso:~$ cowsay "Meuh"
 ______
< Meuh >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Comanda sudo cere parola utilizatorului curent (în cazul nostru utilizatorul student), nu pe cea a utilizatorului root.

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.

student@uso:~$ sudo su root
[sudo] password for student:
root@uso:/home/student# whoami
root
root@uso:/home/student# exit
exit
student@uso:~$

De observat că atunci când schimbăm utilizatorul, nu se schimbă și directorul curent în directorul home al noului utilizator.

Gestiunea utilizatorilor (adduser/deluser)

În continuare vom crea noi utilizatori iar ulterior îi vom șterge. Pentru aceasta, vom folosi comenzile adduser și deluser .

Cele două comenzi sunt de fapt niște scripturi wrapper scrise în Perl prezente, în general, numai pe distribuții bazate pe Debian (cum ar fi Ubuntu). Comenzile pe care le apelează ele în spate sunt useradd și userdel.

Dorim să creăm utilizatorul bogdan. Mai întâi verificăm că acesta nu există, după care îl adăugăm.

student@uso:~$ finger bogdan
finger: bogdan: no such user.
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

Î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.
bogdan@uso:~$ finger bogdan
Login: bogdan                           Name: Bogdan
Directory: /home/bogdan                 Shell: /bin/bash
Never logged in.
No mail.
No Plan.

După aceasta ne autentificăm ca utilizatorul bogdan. Argumentul - este folosit pentru comanda su pentru a schimba directorul curent la home-ul noului utilizator.

student@uso:~$ su - bogdan
Password:
bogdan@uso:~$ pwd
/home/bogdan
bogdan@uso:~$ whoami
bogdan

Dacă utilizatonul nu mai este necesar în sistem, îl ștergem folosind comanda deluser.

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.

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.

student@uso:~$ passwd
Changing password for student.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Dacă dorim schimbarea parolei altui utilizator, îi putem oferi comenzii passwd numele acestuia ca parametru.

root@uso:~# passwd student
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

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.git/
drwxr-xr-x 14 student student 4096 aug 20 20:57 uso.git/

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

Recapitulare

  1. Să se afișeze toate procese din sistem în timp real.
  2. 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 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 Wikipedia.

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

Exerciții

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

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:

student@uso:~$ su - ana
Password: 
ana@uso:~$

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.

student@uso:~$ sudo addgroup studenti
[sudo] password for student: 
Adding group `studenti' (GID 1003) ...
Done.

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.

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)

Exerciții

  1. Adăugați și utilizatorii ana și david în grupul studenti.
  2. Creați utilizatorii dan și elena și grupul asistenti și adăugați acești utilizatori în noul grup.
  3. Ștergeți grupul asistenți creat anterior și utilizatorii asociați.

Pentru ștergere folosiți comenzile deluser și delgroup urmate de numele utilizatorului, respectiv numele grupului.

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.

student@uso:~$ touch student.txt
student@uso:~$ ls -l student.txt 
-rw-rw-r-- 1 student student 0 sep 25 21:42 student.txt

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.

Pentru a modifica grupul fișierului putem folosi atât comanda chown, cât și chgrp.

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

Acum putem verifica că și ceilalți utilizatori pot modifica conținutul fișierului:

ana@uso:/home/student$ echo Ana > student.txt
ana@uso:/home/student$ cat student.txt 
Ana

Exerciții

  1. Să se creeze fișierul shared de către utilizatorul student. Faceți modificările necesare astfel încât 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 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).

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 getent pentru verificarea setarilor pentru un user sau grup:

student@uso~$ getent passwd dan
dan:x:1003:1003:Dan:/home/public/dan:/bin/bash
student@uso~$ getent group gdm
gdm:x:42:

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.

$ cat proiecte.txt
#. Student - Profesor - Proiect
1. dan - alex - proiect1
2. corina - alex - proiect2
3. elena - mihai - proiect3

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.

corina@uso:~$ sudo -v
Sorry, user corina may not run sudo on uso.

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.

corina@midgard:~$ sudo apt-get install tree
[sudo] password for corina:
corina is not in the sudoers file.  This incident will be reported.

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:

student@midgard:~$ sudo visudo

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

Verificare: Reautentificați-vă drept corina și încercați din nou să rulați o comandă de instalare de pachete în sistem folosind sudo.

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:

alex@uso:~$ sudo apt-get install rig

Asigurați-vă că nu apare eroarea următoare (dacă apare înseamnă că ați greșit configurația din visudo):

(...)
alex is not in the sudoers file. This incident will be reported.
(...)

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

Indicație: Folosim usermod (modify a user account). Căutați după new login directory.

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

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

2.1 În acest moment, la rularea comenzii ls ar trebui să primiți următorul mesaj de eroare:

student@uso:~$ ls
bash: /bin/ls: Permission denied

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:

student@uso:~/.../03-user/support/nice-to-know$ ./executable/script.sh

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:

student@uso:~$ umask
0002

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

  1. Verificați faptul că la crearea unui nou fișier sau director sunt aplicate aceste permisiuni.
  2. 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:

.
├── books
│   └── to-read.txt
├── movies
│   └── movies-list.txt

HINT: skeleton directory

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.1539682865.txt.gz · Last modified: 2018/10/16 12:41 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