This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-admin:capitole:capitol-05 [2016/09/23 10:53] mihaic |
linux-admin:capitole:capitol-05 [2016/09/26 10:46] (current) mihaic |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== 5. Gestiunea utilizatorilor și permisiunilor ====== | ====== 5. Gestiunea utilizatorilor și permisiunilor ====== | ||
- | TODO | + | În cadrul unui sistem de operare, utilizatorul dispune de un nume și o parola cu ajutorul căruia poate accesa resursele. Accesul la resurse se face pe baza unor permisiuni (citire, scriere sau execuție). Toate aceste atriute pot fi controlate de către administratorul de sistem. |
===== Subiecte abordate ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * utilizator, UID, parolă, privilegiat, |
- | * TODO | + | * root, sudo, su, grup de utilizatori |
- | * TODO | + | |
+ | ==== Best practices ==== | ||
+ | |||
+ | * După ce schimbați permisiunile sau posesia unei intrări în sistemul de fișiere (folosind ''chmod'', ''chown'' sau ''chgrp''), rulați comanda ''ls -l'' pentru a verifica noile permisiuni sau noua posesie. | ||
+ | * După ce creați un utilizator, folosind comanda ''adduser'', rulați comanda ''id user_name'', cu argument numele utilizatorului, pentru a verifica existența utilizatorului sau ''getent passwd user_name'' pentru a vedea setarile lui. | ||
==== Utilitare folosite ==== | ==== Utilitare folosite ==== | ||
- | ^ Comandă ^ Descriere scurtă ^ | + | * **''sudo''** - execută o comandă cu drepturi de utilizator privilegiat |
- | | **''sudo''** | execută o comandă cu drepturi de utilizator privilegiat | | + | * **''su''** - schimbă utilizatorul cu care suntem autentificați |
- | | **''su''** | schimbă utilizatorul cu care suntem autentificați | | + | * **''id''** - afișează id-ul și grupurile din care face parte un utilizator |
- | | **''id''** | afișează id-ul și grupurile din care face parte un utilizator | | + | * **''finger''** - afișează un sumar despre un anumit utilizator |
- | | **''finger''** | afișează un sumar despre un anumit utilizator | | + | * **''whoami''** - afișează utilizatorul curent (cu care suntem autentificați) |
- | | **''whoami''** | afișează utilizatorul curent (cu care suntem autentificați) | | + | * **''who''** - lista de utilizatori autentificați la un moment dat |
- | | **''who''** | lista de utilizatori autentificați la un moment dat | | + | * **''passwd''** - schimbă parola unui utilizator |
- | | **''passwd''** | schimbă parola unui utilizator | | + | * **''adduser''** - adaugă un utilizator |
- | | **''adduser''** | adaugă un utilizator | | + | * **''deluser''** - șterge un utilizator |
- | | **''deluser''** | șterge un utilizator | | + | * **''usermod''** - modifică informații despre un utilizar (exemplu: grupul din care face parte) |
- | | **''usermod''** | modifică informații despre un utilizar (exemplu: grupul din care face parte) | | + | * **''addgroup''** - adaugă un grup de utilizatori |
- | | **''addgroup''** | adaugă un grup de utilizatori | | + | * **''delgroup''** - șterge un grup de utilizatori |
- | | **''delgroup''** | șterge un grup de utilizatori | | + | * **''chmod''** - schimbă permisiunile unui fișier |
+ | * **''chown''** - schimbă owner-ul unui fișier | ||
Line 29: | Line 34: | ||
* [[http://books.google.com/books?id=_JFGzyRxQGcC&pg=PA53| 3. Gestiunea pachetelor și utilizatorilor]] | * [[http://books.google.com/books?id=_JFGzyRxQGcC&pg=PA53| 3. Gestiunea pachetelor și utilizatorilor]] | ||
+ | * [[http://books.google.ro/books?id=_JFGzyRxQGcC&lpg=PA365&pg=PA284#v=onepage&q&f=false|10.2 Securitatea sistemului de operare]] | ||
+ | * [[http://books.google.ro/books?id=_JFGzyRxQGcC&lpg=PA365&pg=PA69#v=onepage&q&f=false|4. Sisteme de fișiere]] | ||
+ | * [[http://www.explainxkcd.com/wiki/index.php/981:_Porn_Folder|Proper Porn Folder permissions]] | ||
- | ==== Slide-uri ==== | + | ===== Exerciții ===== |
- | [[http://koala.cs.pub.ro/training/res/medium-unix/slides/cap-05.pdf|Slide-uri capitol 5]] | + | ==== Demo-uri ==== |
- | <html> | + | <note hint> |
- | <center> | + | Deschideți un teminal nou folosind combinația de taste ''Alt+Ctrl+t''. În terminal clonați repository-ului oficial de USO folosind comanda: |
- | <iframe src="http://docs.google.com/viewer?url=http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-05.pdf&embedded=true" width="600" height="470" style="border: none;"></iframe> | + | |
- | </center> | + | |
- | </html> | + | |
- | ===== Exerciții ===== | + | <code> |
+ | training@uso:~$ git clone https://github.com/systems-cs-pub-ro/uso | ||
+ | </code> | ||
+ | |||
+ | În directorul ''~/uso/lab05'' găsiți fișierele și directoarele necesare pentru rezolvarea unor exerciții din cursul curent. | ||
+ | </note> | ||
- | ==== Demo-uri ==== | ||
- | === [1] Utiliatori privilegiați si neprivilegiați (id, finger, whoami) === | + | === Utiliatori privilegiați si neprivilegiați (id, finger, whoami) === |
În general, pe un sistem Linux, sunt două ierarhii de utilizatori: | În general, pe un sistem Linux, sunt două ierarhii de utilizatori: | ||
Line 55: | Line 64: | ||
Nu este recomandat să folosiți sistemul folosind acest utilizator decât pentru strictul necesar. De multe ori este suficientă utilizarea comenzii ''sudo''. | Nu este recomandat să folosiți sistemul folosind acest utilizator decât pentru strictul necesar. De multe ori este suficientă utilizarea comenzii ''sudo''. | ||
</note> | </note> | ||
- | |||
- | <hidden> | ||
- | Întrebați-i pe ei ce cred despre asta și apoi explicați-le ce riscuri implică //abuzarea// de utilizatorul ''root'' (rularea GUI-ului ca ''root'', de exemplu). | ||
Pentru a oferi totuși câteva drepturi minimale anumitor utilizatori, se folosește comanda ''sudo'' (**S**uper **U**ser **DO**). Ea are rolul de a //lăsa// un utilizator să ruleze o comandă ca și cum ar fi autentificat ca un altul (nu neapărat ''root''). | Pentru a oferi totuși câteva drepturi minimale anumitor utilizatori, se folosește comanda ''sudo'' (**S**uper **U**ser **DO**). Ea are rolul de a //lăsa// un utilizator să ruleze o comandă ca și cum ar fi autentificat ca un altul (nu neapărat ''root''). | ||
În continuare, vom vedea cum aflăm câteva informații despre utilizatori și cum ne schimbăm utilizatorul cu care suntem autentificați: | În continuare, vom vedea cum aflăm câteva informații despre utilizatori și cum ne schimbăm utilizatorul cu care suntem autentificați: | ||
- | |||
- | Le arătăm câteva detalii despre utilizatorul ''student'' și despre ''root''. Să vedem că există, în principal, dar pomeniți-le și de home directory, shell etc. Sugerez să folosim comanda ''finger''. | ||
<note warning> | <note warning> | ||
Line 70: | Line 74: | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ finger student | + | training@box:~$ finger training |
- | Login: student Name: Flavius Anton | + | Login: training Name: Flavius Anton |
- | Directory: /home/student Shell: /bin/bash | + | Directory: /home/training Shell: /bin/bash |
On since Sat Oct 25 17:16 (EEST) on :0 from :0 (messages off) | On since Sat Oct 25 17:16 (EEST) on :0 from :0 (messages off) | ||
On since Sat Oct 25 17:18 (EEST) on pts/0 from tiny | On since Sat Oct 25 17:18 (EEST) on pts/0 from tiny | ||
Line 78: | Line 82: | ||
No mail. | No mail. | ||
No Plan. | No Plan. | ||
- | student@midgard:~$ finger root | + | training@box:~$ finger root |
Login: root Name: root | Login: root Name: root | ||
Directory: /root Shell: /bin/bash | Directory: /root Shell: /bin/bash | ||
Line 85: | Line 89: | ||
No Plan. | No Plan. | ||
</code> | </code> | ||
- | |||
- | Le spunem apoi că o altă metodă pentru a verifica cu ce utilizator suntem autentificați (în afară de a ne uita la prompt) este comanda ''whoami'' | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ whoami | + | training@box:~$ whoami |
- | student | + | training |
</code> | </code> | ||
- | |||
- | Pentru a le arăta un use-case concret, puteți modifica temporar variabila ''PS1'', ca mai jos. | ||
- | |||
- | <note info> | ||
- | Cu siguranță ei vor avea o reacție de genul "What kind of sorcery is this?", dar le puteți spune că e doar o variabilă de mediu și că vor învăța puțin mai târziu ce sunt ele. Pentru moment, e ok să rețină că nu trebuie să se lase păcăliți de către prompt. | ||
- | </note> | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ PS1="Obama@Whitehouse# " | + | training@box:~$ PS1="Obama@Whitehouse# " |
Obama@Whitehouse# whoami | Obama@Whitehouse# whoami | ||
- | student | + | training |
</code> | </code> | ||
- | </hidden> | + | === Schimbarea utilizatorului curent (su) === |
- | + | ||
- | === [2] Schimbarea utilizatorului curent (su) === | + | |
Câteodată este necesar să schimbăm utilizatorul cu care suntem autentificați într-un altul (de exemplu în ''root'' pentru a realiza un task administrativ). Pentru aceasta folosim comanda ''su'' (switch user). Haideți să vedem cum o folosim. | Câteodată este necesar să schimbăm utilizatorul cu care suntem autentificați într-un altul (de exemplu în ''root'' pentru a realiza un task administrativ). Pentru aceasta folosim comanda ''su'' (switch user). Haideți să vedem cum o folosim. | ||
- | |||
- | <hidden> | ||
- | <note info> | ||
- | Creați înainte de demo un utilizator dummy, ''ana''. | ||
- | </note> | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ whoami | + | training@box:~$ adduser ana |
- | student | + | .... |
- | student@midgard:~$ su ana | + | training@box:~$ whoami |
+ | training | ||
+ | training@box:~$ su ana | ||
Password: | Password: | ||
- | ana@midgard:/home/student$ whoami | + | ana@box:/home/training$ whoami |
ana | ana | ||
</code> | </code> | ||
- | Dați și un ''ls -l'' pe directorul ''home'', să vadă că fiecare are propriul director ''home''. | + | Dați și un ''ls -l'' pe directorul ''home'', și obervați că fiecare utilizator are propriul director ''home''. |
<code bash> | <code bash> | ||
- | student@midgard:~$ ls -l /home | + | training@box:~$ ls -l /home |
total 8 | total 8 | ||
drwxr-xr-x 2 ana ana 4096 Oct 25 17:43 ana | drwxr-xr-x 2 ana ana 4096 Oct 25 17:43 ana | ||
- | drwxr-xr-x 15 student student 4096 Oct 25 17:17 student | + | drwxr-xr-x 15 training training 4096 Oct 25 17:17 training |
</code> | </code> | ||
- | Spuneți-le de opțiunea ''-'' (sau ''-l''), a comenzii ''su'', pentru a schimba întregul context, nu doar utilizatorul. | + | Folosiți opțiunea ''-'' (sau ''-l''), a comenzii ''su'', pentru a schimba întregul context, nu doar utilizatorul. |
<code bash> | <code bash> | ||
- | student@midgard:~$ su - ana | + | training@box:~$ su - ana |
Password: | Password: | ||
- | ana@midgard:~$ logout | + | ana@box:~$ logout |
- | student@midgard:~$ su ana | + | training@box:~$ su ana |
Password: | Password: | ||
- | ana@midgard:/home/student$ pwd | + | ana@box:/home/training$ pwd |
- | /home/student | + | /home/training |
- | ana@midgard:/home/student$ exit | + | ana@box:/home/training$ exit |
- | student@midgard:~$ su - ana | + | training@box:~$ su - ana |
Password: | Password: | ||
- | ana@midgard:~$ pwd | + | ana@box:~$ pwd |
/home/ana | /home/ana | ||
</code> | </code> | ||
- | </hidden> | + | === Drepturi pentru anumite comenzi (sudo) === |
- | ==== [3] Drepturi pentru anumite comenzi (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 încrederea că ei nu vor face altceva decât să instaleze pachete. Soluția acestei probleme este comanda ''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 încrederea că ei nu vor face altceva decât să instaleze pachete. Soluția acestei probleme este comanda ''sudo''. | ||
- | <hidden> | + | |
- | Hai să le arătăm încă o dată că nu putem instala pachete decât cu ''sudo'', în mod normal. Aratați-le că eroarea generată are legătură cu permisiunile utilizatorului, încercăm să-i obișnuim de fiecare dată să se uite pe mesajele de eroare (la mine, cel puțin, am observat că au problema asta: se sperie de wall of text la o eroare și nu mai citesc nimic, se blochează acolo). | + | Dorim să instalăm pachetul ''cowsay''. Observați că nu funcționează fără ''sudo''. |
<code bash> | <code bash> | ||
- | student@midgard:~$ apt-get install cowsay | + | training@box:~$ apt-get install cowsay |
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied) | 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? | E: Unable to lock the administration directory (/var/lib/dpkg/), are you root? | ||
- | student@midgard:~$ sudo apt-get install cowsay | + | training@box:~$ sudo apt-get install cowsay |
- | [sudo] password for student: | + | [sudo] password for training: |
Reading package lists... Done | Reading package lists... Done | ||
... | ... | ||
- | student@midgard:~$ cowsay "Meuh" | + | training@box:~$ cowsay "Meuh" |
______ | ______ | ||
< Meuh > | < Meuh > | ||
Line 177: | Line 168: | ||
<code bash> | <code bash> | ||
- | ana@midgard:~$ sudo apt-get install tree | + | ana@box:~$ sudo apt-get install tree |
[sudo] password for ana: | [sudo] password for ana: | ||
ana is not in the sudoers file. This incident will be reported. | ana is not in the sudoers file. This incident will be reported. | ||
- | ana@midgard:~$ logout | + | ana@box:~$ logout |
- | student@midgard:~$ sudo visudo # adăugăm linia ana ALL=(ALL:ALL) ALL | + | training@box:~$ sudo visudo # adăugăm linia ana ALL=(ALL) ALL |
- | student@midgard:~$ su - ana | + | training@box:~$ su - ana |
Password: | Password: | ||
- | ana@midgard:~$ sudo apt-get install tree | + | ana@box:~$ sudo apt-get install tree |
[sudo] password for ana: | [sudo] password for ana: | ||
Reading package lists... Done | Reading package lists... Done | ||
Line 192: | Line 183: | ||
</code> | </code> | ||
- | Putem face și un mic intro pentru laboratorul cu permisiuni și să le arătăm că fișierul ''/etc/sudoers'' este protejat. | + | Observați că fișierul ''/etc/sudoers'' este protejat. |
<code bash> | <code bash> | ||
- | student@midgard:~$ cat /etc/sudoers | + | training@box:~$ cat /etc/sudoers |
cat: /etc/sudoers: Permission denied | cat: /etc/sudoers: Permission denied | ||
- | student@midgard:~$ sudo cat /etc/sudoers | + | training@box:~$ sudo cat /etc/sudoers |
# | # | ||
# This file MUST be edited with the 'visudo' command as root. | # This file MUST be edited with the 'visudo' command as root. | ||
Line 203: | Line 194: | ||
</code> | </code> | ||
- | </hidden> | + | === Schimbarea parolei (passwd) === |
- | + | ||
- | === [4] Schimbarea parolei (passwd) === | + | |
Pentru a schimba parola utilizatorului curent folosim comanda ''passwd'', fără argumente. De asemenea, dacă dorim schimbarea parolei altui utilizator, îi putem oferi comenzii ''passwd'' numele acestuia ca parametru. Mai departe vom vedea un exemplu de cum facem acest lucru. | Pentru a schimba parola utilizatorului curent folosim comanda ''passwd'', fără argumente. De asemenea, dacă dorim schimbarea parolei altui utilizator, îi putem oferi comenzii ''passwd'' numele acestuia ca parametru. Mai departe vom vedea un exemplu de cum facem acest lucru. | ||
- | |||
- | <hidden> | ||
- | Partea asta ar trebui să dureze 2-3 minute. Nu cred că are sens să le arătăm și alte opțiuni pentru ''passwd'' deocamdată. | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ passwd | + | training@box:~$ passwd |
- | Changing password for student. | + | Changing password for training. |
(current) UNIX password: | (current) UNIX password: | ||
Enter new UNIX password: | Enter new UNIX password: | ||
Line 219: | Line 205: | ||
passwd: password updated successfully | passwd: password updated successfully | ||
- | root@midgard:~# passwd student | + | root@box:~# passwd training |
Enter new UNIX password: | Enter new UNIX password: | ||
Retype new UNIX password: | Retype new UNIX password: | ||
passwd: password updated successfully | passwd: password updated successfully | ||
</code> | </code> | ||
- | </hidden> | ||
- | === [5] Gestiunea utilizatorilor (adduser/deluser) === | + | === Gestiunea utilizatorilor (adduser/deluser) === |
Acum că știm cum vedem informații despre un utilizator, cum schimbăm o parolă sau cum schimbăm utilizatorul curent, hai să vedem cum adăugăm utilizatori noi sau cum ștergem un utilizator dintre cei existenți. Pentru aceasta vom folosi comenzile ''adduser'' | Acum că știm cum vedem informații despre un utilizator, cum schimbăm o parolă sau cum schimbăm utilizatorul curent, hai să vedem cum adăugăm utilizatori noi sau cum ștergem un utilizator dintre cei existenți. Pentru aceasta vom folosi comenzile ''adduser'' | ||
și ''deluser''. | și ''deluser''. | ||
Line 234: | Line 219: | ||
</note> | </note> | ||
- | <hidden> | + | Adăugăm un alt utilizator, ''bogdan''. |
- | Adăugăm un alt utilizator, ''bogdan''. E o ocazie bună să le spunem de ''uid'', de grupuri, de faptul că home-ul arată la început exact ca directorul ''/etc/skel'' etc. | + | |
<code bash> | <code bash> | ||
- | student@midgard:~$ finger bogdan | + | training@box:~$ finger bogdan |
finger: bogdan: no such user. | finger: bogdan: no such user. | ||
- | student@midgard:~$ sudo adduser bogdan | + | training@box:~$ sudo adduser bogdan |
Adding user `bogdan' ... | Adding user `bogdan' ... | ||
Adding new group `bogdan' (1002) ... | Adding new group `bogdan' (1002) ... | ||
Line 250: | Line 234: | ||
... | ... | ||
- | student@midgard:~$ finger bogdan | + | training@box:~$ finger bogdan |
Login: bogdan Name: | Login: bogdan Name: | ||
Directory: /home/bogdan Shell: /bin/bash | Directory: /home/bogdan Shell: /bin/bash | ||
Line 259: | Line 243: | ||
<code bash> | <code bash> | ||
- | student@midgard:~$ su - bogdan | + | training@box:~$ su - bogdan |
Password: | Password: | ||
- | bogdan@midgard:~$ whoami | + | bogdan@box:~$ whoami |
bogdan | bogdan | ||
</code> | </code> | ||
- | În final, le arătăm și cum se șterge un utilizator: | + | Dorim să ștergem un utilizator: |
<code bash> | <code bash> | ||
- | student@midgard:~$ sudo deluser bogdan | + | training@box:~$ sudo deluser bogdan |
Removing user `bogdan' ... | Removing user `bogdan' ... | ||
Warning: group `bogdan' has no more members. | Warning: group `bogdan' has no more members. | ||
Done. | Done. | ||
- | student@midgard:~$ finger bogdan | + | training@box:~$ finger bogdan |
finger: bogdan: no such user. | finger: bogdan: no such user. | ||
- | student@midgard:~$ su bogdan | + | training@box:~$ su bogdan |
No passwd entry for user 'bogdan' | No passwd entry for user 'bogdan' | ||
</code> | </code> | ||
- | </hidden> | + | === De reținut! === |
- | + | ||
- | + | ||
- | === [6] De reținut! === | + | |
<note important> | <note important> | ||
Line 295: | Line 276: | ||
<note tip>E important să reținem că urmărirea prompt-ului este o convenție. Acesta poate fi schimbat foare ușor folosind ''bashrc''. Detalii puteți găsi [[http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html|pe cyberciti]]. </note> | <note tip>E important să reținem că urmărirea prompt-ului este o convenție. Acesta poate fi schimbat foare ușor folosind ''bashrc''. Detalii puteți găsi [[http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html|pe cyberciti]]. </note> | ||
+ | === Permisiuni === | ||
- | ==== TODO: Exercițiu 1 ==== | + | În demo-ul precedent am aflat că într-un sistem pot exista mai mulți utilizatori. Totuși, fiecare utilizator trebuie sa poată avea fișierele lui personale care să nu poată fi modificate de un alt utilizator fără permisiunea sa, iar unele fișiere sau resurse trebuie să nu poată fi accesate decât de către utilizatorul privilegiat (//root//). În alte cuvinte trebuie să avem o metodă de a controla accesul utilizatorilor la diversele elemente ale sistemului. |
- | TODO | + | Abordarea utilizată în Linux este de a folosi permisiuni. Acestea dictează ce operații (de scriere, citire sau executare) poate să efectueze un utilizator asupra unui fișier sau director. Ele sunt împărțite în trei categorii: |
+ | * //utilizator (owner)//: utilizatorul care este deținătorul fișierului/directorului | ||
+ | * //grup (group)//: un grup de utilizatori care sunt deținătorii fișierului/directorului | ||
+ | * //ceilalți (others)//: utilizatorii care nu intră în niciuna dintre categoriile dinainte | ||
- | ==== TODO: Exercițiu 2 ==== | + | Pentru fiecare dintre cele trei categorii există trei permisiuni: |
+ | * //de citire//: utilizatorul poate citi conținutul fișierului respectiv poate lista conținutul directorului | ||
+ | * //de scriere//: utilizatorul poate modifica conținutul fișierului/directorului | ||
+ | * //de execuție//: utilizatorul poate lansa fișierul în execuție respectiv poate parcurge directorul | ||
- | TODO | + | Ordinea în care se aplică aceste permisiuni este: dacă 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 //group//; dacă niciuna dintre condițiile precedente nu este adevărată, atunci se aplică permisiunile pentru //others//. |
+ | |||
+ | === Vizualizarea permisiunilor === | ||
+ | |||
+ | Pentru a vedea conținutul unui director folosim comanda ''ls''. Dacă îi pasăm argumentul ''-l'' atunci comanda va lista conținutul în format lung, adică va afișă informații suplimentare. Să luăm un exemplu: | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ touch a | ||
+ | training@uso:~/uso/lab05/demo$ sudo touch b | ||
+ | training@uso:~/uso/lab05/demo$ ls | ||
+ | a b | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 training training 0 oct 6 23:58 a | ||
+ | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
+ | </code> | ||
+ | |||
+ | Să ne uităm mai indeaproape la rezultatul rulării comenzii ''ls -l'': | ||
+ | |||
+ | ^ - ^ rw- ^ rw- ^ %%r--%% ^ 1 ^ training ^ training ^ 0 ^ oct 6 23:58 ^ a ^ | ||
+ | | Tipul intrării | Permisiuni ||| Numărul de hardlink-uri | Deținătorul | Grupul | Dimensiunea | Data ultimei modificări | Numele fișierului | | ||
+ | |||
+ | * Tipul intrării indică dacă intrarea respectivă este un fișier normal (''-''), director (''d'') sau altceva (rulați ''info ls'' și citiți secțiunea 10.1.2). | ||
+ | * Permisiunile indică ce drepturi au anumiți utilizatori asupra fișierului. Sunt împărțite în trei grupuri, primul (''rw-'') corespunde deținătorului (owner), al doilea (''rw-'') corespunde grupului (group) și ultimul (''%%r--%%'') corespunde tuturor celorlalți utilizatori (others). Primul bit din fiecare grup reprezintă dreptul de citire, al doilea reprezintă dreptul de scriere iar al treilea dreptul de execuție. Valoarea 0 (''-'') pe una dintre poziții indică lipsa dreptului respectiv, pe când valoarea 1 (''r'', ''w'' sau ''x'') indică prezența dreptului. | ||
+ | * Numărul de hardlink-uri indică câte hardlink-uri există către acest fișier. | ||
+ | * Deținătorul fișierului este, în general, utilizatorul care a creat fișierul, dar poate fi modificat. | ||
+ | * Grupul fișierului este, în general, grupul utilizatorului care a creat fișierul, dar poate fi modificat. | ||
+ | |||
+ | === Modificarea permisiunilor === | ||
+ | |||
+ | Pentru a modifica permisiunile unui fișier folosim comanda ''chmod''. Putem să specificăm noile permisiuni în două moduri: | ||
+ | * mod literal: specificăm căror utilizatori vrem să le modificăm permisiunile (''u'' pentru deținător, ''g'' pentru grup, ''o'' pentru ceilalți și ''a'' pentru toți utilizatorii), specificăm dacă să adăugăm (''+''), să retragem (''-'') sau să setăm exact (''='') un set de permisiuni și permisiunile ce trebuie modificate (''r'' pentru citire, ''w'' pentru scriere sau ''x'' pentru execuție). | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 training training 0 oct 6 23:58 a | ||
+ | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
+ | training@uso:~/uso/lab05/demo$ chmod u+x a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rwxrw-r-- 1 training training 0 oct 6 23:58 a | ||
+ | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
+ | training@uso:~/uso/lab05/demo$ chmod o=w a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rwxrw--w- 1 training training 0 oct 6 23:58 a | ||
+ | -rw-r--r-- 1 root root 0 oct 6 23:58 b | ||
+ | </code> | ||
+ | |||
+ | * mod octal: specificăm permisiunile pentru deținător, grup și ceilalți printr-o cifră în baza 8. Bitul 0 reprezintă dreptul de execuție (''x''), bitul 1 reprezintă dreptul de scriere (''w'') și bitul 2 reprezintă dreptul de citire (''r''). Prezența unei permisiuni este marcată prin valoarea 1 a bit-ului respectiv iar absența prin valoarea 0 a bit-ului respectiv. | ||
+ | |||
+ | ^ r w x ^ r - x ^ r - - ^ | ||
+ | | 1 1 1 | 1 0 1 | 1 0 0 | | ||
+ | | 7 | 5 | 4 | | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rwxrw--w- 1 training training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | training@uso:~/uso/lab05/demo$ chmod 754 a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rwxr-xr-- 1 training training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | training@uso:~/uso/lab05/demo$ chmod 664 a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 training training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | </code> | ||
+ | |||
+ | === Modificarea utilizatorului și a grupului === | ||
+ | |||
+ | Pentru acest demo avem nevoie de utilizatorul ''gigi'' pe care îl vom crea folosind comanda ''adduser'' și apoi îl vom verifica folosind comanda ''id'': | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ sudo adduser gigi | ||
+ | [...] | ||
+ | training@uso:~/uso/lab05/demo$ id gigi | ||
+ | uid=1001(gigi) gid=1001(gigi) groups=1001(gigi) | ||
+ | </code> | ||
+ | |||
+ | Pentru a modifica utilizatorul deținător al unui fișier folosim comanda ''chown''. | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 training training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | training@uso:~/uso/lab05/demo$ sudo chown gigi a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 gigi training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | </code> | ||
+ | |||
+ | Acum să verificăm faptul că utilizatorul ''gigi'' chiar poate scrie și citi din fișierul ''a''. Vom schimba utilizatorul curent din ''training'' în ''gigi'' și vom rula o comandă de modificare și una de afișare a conținutului. | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ sudo su gigi | ||
+ | gigi@uso:~/uso/lab05/demo$ id | ||
+ | uid=1001(gigi) gid=1001(gigi) groups=1001(gigi) | ||
+ | gigi@uso:~/uso/lab05/demo$ echo "ana are mere" > a | ||
+ | gigi@uso:~/uso/lab05/demo$ cat a | ||
+ | ana are mere | ||
+ | gigi@uso:~/uso/lab05/demo$ exit | ||
+ | training@uso:~/uso/lab05/demo$ id | ||
+ | uid=1000(training) gid=1000(training) groups=1000(training) | ||
+ | </code> | ||
+ | |||
+ | Pentru a modifica grupul deținător al unui fișier folosim comanda ''chgrp''. Alternativ putem folosi tot comanda ''chown'', dar îi vom pasa un parametru de forma ''owner:group''. | ||
+ | |||
+ | <code> | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 gigi training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | training@uso:~/uso/lab05/demo$ sudo chgrp gigi a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 gigi gigi 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | training@uso:~/uso/lab05/demo$ sudo chown training:training a | ||
+ | training@uso:~/uso/lab05/demo$ ls -l | ||
+ | total 0 | ||
+ | -rw-rw-r-- 1 training training 0 oct 7 21:48 a | ||
+ | -rw-r--r-- 1 root root 0 oct 7 21:48 b | ||
+ | </code> | ||
+ | |||
+ | <note tip> | ||
+ | Operația de schimbare utilizatorului sau a grupului deținător ale unui fișier sunt operații privilegiate, deci trebuie executate cu ''sudo''. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== 1. Adăugarea de noi utilizatori și de grupuri ==== | ||
+ | |||
+ | Ca administratori ai infrastructurii IT a școlii de care răspundeți ați primit [[https://docs.google.com/spreadsheets/d/15LxIrhz0JTdLgWJqyHwj4hfVOg_uW6TyRnUbKqEtB8Y/edit#gid=0|următorul excel]] cu nume de utilizatori și grupuri din care trebuie să facă parte, conform cu politica școlii. | ||
+ | |||
+ | Sarcina voastră este să adăugați în sistem grupurile și apoi utilizatorii, utilizatorii să îi înscrieți în grupuri conform cu excelul primit. | ||
+ | |||
+ | De asemenea, trebuie să configurați următoarele parole: | ||
+ | * Studenții vor avea parola ''training'' | ||
+ | * Profesorii vor avea parola ''profesor007'' | ||
+ | * Adminii vor avea parola ''admin1234'' | ||
+ | |||
+ | Pentru cei care sunt în mai multe grupuri simultan alegeți parola mai dificilă (să conțină cifre diferite). | ||
+ | |||
+ | <note>Pentru **verificarea** adăugării utilizatorilor în sistem trebuie să inspectăm fișierele: ''/etc/passwd'' și pentru grupuri ''/etc/group''. De asemenea, pentru a vedea grupurile din care face parte un anumit utilizator (să zicem ''dan'') și totodată existența sa în sistem mai putem folosi comanda: | ||
+ | |||
+ | <code bash> | ||
+ | training@uso~$ id dan | ||
+ | </code> | ||
+ | |||
+ | De asemenea, pentru a nu cauta in fisierele ''/etc/passwd'' sau ''/etc/group'' putem folosi comanda [[http://man7.org/linux/man-pages/man1/getent.1.html|getent]] ca mai jos pentru verificarea direct a setarilor pentru un user sau un grup: | ||
+ | |||
+ | <code bash> | ||
+ | training@uso~$ getent passwd dan | ||
+ | dan:x:1003:1003:Dan:/home/public/dan:/bin/bash | ||
+ | training@uso~$ getent group gdm | ||
+ | gdm:x:42: | ||
+ | |||
+ | </code> | ||
+ | |||
+ | </note> | ||
+ | |||
+ | ==== 2. Schimbarea homedir-ului altui 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 [[http://linux.die.net/man/8/usermod|usermod (modify a user account)]]. Căutați după ''new login directory''. | ||
+ | |||
+ | **Pentru verificare** : Apăsați ''Ctrl+D'' pentru a reveni la terminalul în care erați autentificați ca ''training'' 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''. | ||
+ | |||
+ | <note tip>Pentru a ne autentifica cu un anumit utilizator și a ne muta în homedir-ul lui folosim ''su - dan'' in loc de simplu ''su dan''</note> | ||
+ | |||
+ | |||
+ | ==== 3a. 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@box:~$ 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''. Reveniți la shellul utilizatorului ''training'' (''Ctrl+D'') și tastați comanda: | ||
+ | |||
+ | <code bash> | ||
+ | training@box:~$ 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> | ||
+ | |||
+ | |||
+ | ==== 3b. Drepturi de sudo pentru un grup === | ||
+ | |||
+ | În același mod configurați sistemul astfel încât utilizatorii din grupul ''admin'' să aibă drepturi depline de ''sudo'' în sistem. | ||
+ | |||
+ | Autentificați-vă în sistem ca ''geo'' și ca ''răzvan'' și **verificați** că funcționează comanda: | ||
+ | |||
+ | <code bash> | ||
+ | geo@uso:~$ sudo apt-get install rig | ||
+ | </code> | ||
+ | |||
+ | Asigurați-vă că nu apare eroarea (dacă apare înseamnă că ați greșit configurația din ''visudo''): | ||
+ | |||
+ | <code bash> | ||
+ | (...) | ||
+ | geo is not in the sudoers file. This incident will be reported. | ||
+ | (...) | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== 4. Permisiuni 1 ==== | ||
+ | |||
+ | În directorul ''/home/training/uso/lab05/cursuri'' vor trebui să lucreze atât utilizatorul ''alex'', cât și ''mihai''. Setați permisiunile necesare astfel încât cei doi să poată modifica conținutul directorului, iar restul utilizatorilor să îl poată doar vizualiza. | ||
+ | |||
+ | <note tip> | ||
+ | Pentru a verifica faptul că ați configurat permisiunile utile trebuie să schimbați utilizatorul din ''training'' în ''alex'' și ''mihai'' și să vedeți dacă aceștia pot face modificări în director; ceilalți utilizatori nu trebuie să poată face modificări în director. Folosiți comanda ''sudo su'' urmată de numele utilizatorului; apoi faceți modificări în director, delogați-vă folosind combinația de taste ''Ctrl+D'' și repetați procesul pentru alt utilizator. | ||
+ | </note> | ||
+ | |||
+ | ==== 5. Permisiuni 2 ==== | ||
+ | |||
+ | * **a)** Intrați în directorul ''/home/training/uso/lab05/teste_curs''. În acest director se află fișierele ''test-1.txt'' și ''test-2.txt'' care trebuie protejate. Setați permisiunile necesare fișierelor astfel încât utilizatorii care nu se află în grupul ''profesor'' să nu aibă nicio permisiune asupra lui. | ||
+ | * **b)** Intrați în directorul ''/home/training/uso/lab05''. În acest director se află fișierul ''coduri_alarma'' în care se găsesc codurile de acces la sistemele de securitate din diferite săli din facultate. Vrem ca doar profesorii și administratorii să aibă acces asupra acestui fișier, prin urmare realizați modificările necesare astfel încât doar utilizatorii ''alex'', ''mihai'', ''geo'' și ''razvan'' să aibă drept de citire și scriere, iar toți ceilați utilizatori să nu aibă niciun drept asupra fișierului. | ||
+ | |||
+ | <note tip> Din cauza limitării de un singur owner și un singur grup owner asupra unui fișier, la acest exercițiu este nevoie să creați un grup nou în care să adăugați toți utilizatorii menționați la subpunctul **b)** și să setați acest grup ca grup owner al fișierului ''coduri_alarma''. | ||
+ | </note> | ||