Î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.
chmod
, chown
sau chgrp
), rulați comanda ls -l
pentru a verifica noile permisiuni sau noua posesie.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.sudo
- execută o comandă cu drepturi de utilizator privilegiatsu
- schimbă utilizatorul cu care suntem autentificațiid
- afișează id-ul și grupurile din care face parte un utilizatorfinger
- afișează un sumar despre un anumit utilizatorwhoami
- afișează utilizatorul curent (cu care suntem autentificați)who
- lista de utilizatori autentificați la un moment datpasswd
- schimbă parola unui utilizator adduser
- adaugă un utilizatordeluser
- șterge un utilizatorusermod
- modifică informații despre un utilizar (exemplu: grupul din care face parte)addgroup
- adaugă un grup de utilizatoridelgroup
- șterge un grup de utilizatorichmod
- schimbă permisiunile unui fișierchown
- schimbă owner-ul unui fișier
Alt+Ctrl+t
. În terminal clonați repository-ului oficial de USO folosind comanda:
training@uso:~$ git clone https://github.com/systems-cs-pub-ro/uso
În directorul ~/uso/lab05
găsiți fișierele și directoarele necesare pentru rezolvarea unor exerciții din cursul curent.
În general, pe un sistem Linux, sunt două ierarhii de utilizatori:
root
Utilizatorul root este prezent, în general, pe orice sistem Linux, rolul său fiind de administrare și gestionarea celorlalți utilizatori.
sudo
.
Pentru a oferi totuși câteva drepturi minimale anumitor utilizatori, se folosește comanda sudo
(Super User 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:
sudo apt-get install finger
training@box:~$ finger training Login: training Name: Flavius Anton 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:18 (EEST) on pts/0 from tiny 3 seconds idle No mail. No Plan. training@box:~$ finger root Login: root Name: root Directory: /root Shell: /bin/bash Never logged in. No mail. No Plan.
training@box:~$ whoami training
training@box:~$ PS1="Obama@Whitehouse# " Obama@Whitehouse# whoami training
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.
training@box:~$ adduser ana .... training@box:~$ whoami training training@box:~$ su ana Password: ana@box:/home/training$ whoami ana
Dați și un ls -l
pe directorul home
, și obervați că fiecare utilizator are propriul director home
.
training@box:~$ ls -l /home total 8 drwxr-xr-x 2 ana ana 4096 Oct 25 17:43 ana drwxr-xr-x 15 training training 4096 Oct 25 17:17 training
Folosiți opțiunea -
(sau -l
), a comenzii su
, pentru a schimba întregul context, nu doar utilizatorul.
training@box:~$ su - ana Password: ana@box:~$ logout training@box:~$ su ana Password: ana@box:/home/training$ pwd /home/training ana@box:/home/training$ exit training@box:~$ su - ana Password: ana@box:~$ pwd /home/ana
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
.
Dorim să instalăm pachetul cowsay
. Observați că nu funcționează fără sudo
.
training@box:~$ 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? training@box:~$ sudo apt-get install cowsay [sudo] password for training: Reading package lists... Done ... training@box:~$ cowsay "Meuh" ______ < Meuh > ------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
ana@box:~$ sudo apt-get install tree [sudo] password for ana: ana is not in the sudoers file. This incident will be reported. ana@box:~$ logout training@box:~$ sudo visudo # adăugăm linia ana ALL=(ALL) ALL training@box:~$ su - ana Password: ana@box:~$ sudo apt-get install tree [sudo] password for ana: Reading package lists... Done ...
Observați că fișierul /etc/sudoers
este protejat.
training@box:~$ cat /etc/sudoers cat: /etc/sudoers: Permission denied training@box:~$ sudo cat /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. ...
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.
training@box:~$ passwd Changing password for training. (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully root@box:~# passwd training Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
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
.
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
.
Adăugăm un alt utilizator, bogdan
.
training@box:~$ finger bogdan finger: bogdan: no such user. training@box:~$ 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: ... training@box:~$ finger bogdan Login: bogdan Name: Directory: /home/bogdan Shell: /bin/bash Never logged in.
După aceasta ne și autentificăm ca utilizatorul bogdan
.
training@box:~$ su - bogdan Password: bogdan@box:~$ whoami bogdan
Dorim să ștergem un utilizator:
training@box:~$ sudo deluser bogdan Removing user `bogdan' ... Warning: group `bogdan' has no more members. Done. training@box:~$ finger bogdan finger: bogdan: no such user. training@box:~$ su bogdan No passwd entry for user 'bogdan'
cat /etc/hostname
, hostname
whoami
, id
(fără parametrii), pwd
Toate informațiile de mai sus se găsesc în prompt-ul terminalului: username@hostname:working-directory
.
bashrc
. Detalii puteți găsi pe cyberciti.
Î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.
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:
Pentru fiecare dintre cele trei categorii există trei permisiuni:
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.
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:
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
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 |
-
), director (d
) sau altceva (rulați info ls
și citiți secțiunea 10.1.2).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.
Pentru a modifica permisiunile unui fișier folosim comanda chmod
. Putem să specificăm noile permisiuni în două moduri:
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).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
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 |
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
Pentru acest demo avem nevoie de utilizatorul gigi
pe care îl vom crea folosind comanda adduser
și apoi îl vom verifica folosind comanda id
:
training@uso:~/uso/lab05/demo$ sudo adduser gigi [...] training@uso:~/uso/lab05/demo$ id gigi uid=1001(gigi) gid=1001(gigi) groups=1001(gigi)
Pentru a modifica utilizatorul deținător al unui fișier folosim comanda chown
.
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
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.
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)
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
.
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
sudo
.
Ca administratori ai infrastructurii IT a școlii de care răspundeți ați primit 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:
training
profesor007
admin1234
Pentru cei care sunt în mai multe grupuri simultan alegeți parola mai dificilă (să conțină cifre diferite).
/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:
training@uso~$ id dan
De asemenea, pentru a nu cauta in fisierele /etc/passwd
sau /etc/group
putem folosi comanda getent ca mai jos pentru verificarea direct a setarilor pentru un user sau un grup:
training@uso~$ getent passwd dan dan:x:1003:1003:Dan:/home/public/dan:/bin/bash training@uso~$ getent group gdm gdm:x:42:
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
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
.
su - dan
in loc de simplu su dan
Suntem autentificați ca utilizatorul corina
și vrem să instalăm un pachet. Observăm totuși că nu avem permisiuni.
corina@box:~$ sudo apt-get install tree [sudo] password for corina: corina is not in the sudoers file. This incident will be reported.
visudo
. Reveniți la shellul utilizatorului training
(Ctrl+D
) și tastați comanda:
training@box:~$ 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.
corina
și încercați din nou să rulați o comandă de instalare de pachete în sistem folosind sudo
.
Î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:
geo@uso:~$ sudo apt-get install rig
Asigurați-vă că nu apare eroarea (dacă apare înseamnă că ați greșit configurația din visudo
):
(...) geo is not in the sudoers file. This incident will be reported. (...)
Î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.
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.
/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./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.
coduri_alarma
.