Laborator 04 - Drepturile fisierelor si utilizatori

Cheat sheet

Comandă Descriere scurtă
su switch user - schimbă utilizatorul în sesiunea curentă
sudo rulează o comandă ca root
whoami afișează utilizatorul curent
adduser adaugă un utilizator
deluser șterge un utilizator
chmod schimbă permisiunile unui fișier/director
chown schimbă utilizatorul proprietar (owner) al unui fișier/director
chgrp schimbă grupul unui fișier/director
passwd modifică parola
ssh conectare la distanță
scp copiere la distanță

Suport laborator

Puteți urmări tutorialul video corespunzător laboratorului făcut de IT Assistant.

Introducere

Taskuri administrative. root. sudo. su

Pentru a solicita închiderea calculatorului din linia de comandă, putem folosi comanda:

halt

Rulată din contul student, vi se va spune că ar trebui să fiți root pentru a o putea rula.

root este un utilizator privilegiat. Doar el poate rula taskuri administrative. Practic, sistemul îi aparține lui.

Pentru a deveni un alt utilizator se poate folosi comanda su (switch user). Fără nici un parametru suplimentar, această comandă vă permite accesarea contului de root și vă cere parola acestui utilizator. Ar fi riscant ca toată lumea să cunoască această parolă. De aceea, se oferă posibilitatea de a obține drepturi administrative folosind parola proprie, prin intermediul comenzii sudo.

În acest caz, comanda va fi:

sudo su

Observați că ni se cere parola utilizatorului student, NU a utilizatorului privilegiat.

Promptul se schimbă pentru a indica faptul că sunteți un utilizator privilegiat. Caracterul $ indică un utilizator neprivilegiat, caracterul # indică un utilizator privilegiat.

Nu vă bazați întodeauna pe ce indică promptul. Poate fi configurat altfel!

Pentru a afla în orice moment ca ce utilizator suntem autentificați, indiferent de ceea ce spune promptul putem folosi comanda:

whoami

Pentru a vă întoarce în shell-ul deținut de utilizatorul inițial, folosim:

exit

Se recomandă să nu folosiți contul privilegiat decât atât cât este necesar. Dacă folosiți sudo su, părăsiți acest cont imediat ce ați terminat taskurile ce aveau nevoie de acest cont!

Atunci când schimbăm utilizatorul, pornim un alt shell ca noul utilizator. Dacă dorim să încărcăm mediul specific al utilizatorului, putem folosi parametrul - al comenzii su.

sudo su -
pwd

Directorul curent este acum home-ul utilizatorului root, adică /root.

Mediul curent este salvat și va fi restaurat după comanda exit. Prin mediu se înțeleg: modul de afișare al promptului, alias-uri, directorul home și variabile specifice fiecărui utilizator

Conturi de utilizator

Pentru a crea un utilizator cu numele numeutilizator putem folosi comanda adduser:

adduser numeutilizator

Vi se va zice că trebuie să fiți root. Din motive de securitate, se recomandă să nu folosim contul de root mai mult decât minimul necesar.

Pentru comenzi simple, se recomandă folosirea formei sudo <comanda> cu semnificația: execută comanda <comanda> ca utilizator privilegiat.

sudo adduser numeutilizator

Comanda adduser, interactivă va cere stabilirea parolei noului utilizator. Ignorați ultimele câmpuri (informațiile pentru utilizatorul nou creat) apăsând tasta ENTER.

Pentru a vă loga ca utilizatarul nou creat, puteți folosi comanda su.

su - numeutilizator

Puteți șterge un utilizator folosind comanda deluser:

sudo deluser numeutilizator

Permisiuni

Permisiunile controlează accesul utilizatorilor la fișierele și directoarele din sistem.

Pornind de la imaginea din laboratorul 2, avem următoarea diagramă semnificativă (dreptunghiurile colorate au fost prezentate în laboratorul 2)

Permisiunile sunt împărțite în 3 grupe:

  • pentru utilizator (cel trecut în coloana reprezentând deținătorul fișierului)
  • pentru grup (cel trecut în coloana pentru grupul fișierului): toți utilizatorii acelui grup au aceleași permisiuni
  • pentru ceilalți utilizatori

Fiecare grup este format din 3 caractere:

  • un caracter r pentru dreptul de a citi sau - dacă fișierul nu poate fi citit
  • un caracter w pentru dreptul de a modifica fișierul sau - dacă acest drept nu există
  • un caracter x pentru posibilitatea de a executa fișierul, - dacă nu se poate executa fișierul

Pentru a modifica permsiunile folosim comanda chmod (change mode).

În formă literală, permisiunile se pot da sub forma [ugoa]{+-=}perm:

  • opțional, un caracter din mulțimea {u, g, o, a} cu semnificația:
    • u - modifică permisiunile pentru utilizator
    • g - modifică permisiunile pentru grup
    • o - modifică permisiunile pentru ceilalți utilizatori (others)
    • a - modifică permisiunile pentru toți utilizatorii (all)
  • un caracter din setul {+, -, =} cu semnficația:
    • + - adaugă permsiunile următoare la cele existente
    • - - elimină drepturile următoare din cele existente
    • = - setează permisiunile la valoarea dată în continuare
  • permisiunile, exprimate cu caractere din mulțimea {r, w, x} cu semnificația:
    • r - dreptul de a citi fișierul sau directorul
    • w - dreptul de a modifica fișierul sau directorul
    • x - dreptul de a executa fișierul

Pe un fișier test_perms, creat cu (și având permisiuni implicite):

touch test_perms
ls -l test_perms

observăm că:

chmod a= test_perms
ls -l test_perms

- s-au revocat toate permisiunile

chmod +r test_perms
ls -l test_perms

- s-a dat drept de read pentru fiecare grup: user, group, others

chmod u+w test_perms
ls -l test_perms

- s-a dat drept de write pentru owner

chmod u+x,o+w test_perms
ls -l test_perms

- s-a dat drept de execuție pentru owner și de scriere pentru others.

Grupuri

Până acum, am manipulat drepturile unui utilizator la nivel de proprietar (owner) și restul lumii (others). În multe ocazii, vom dori să acordăm aceleași drepturi unui grup de utilizatori, diferit the restul utilizatorilor din sistem.

Pentru a adăuga un grup în sistem, vom folosi comanda:

sudo addgroup numegrup

Pentru a adăuga în grupul numegrup utilizatorul student, vom folosi:

sudo adduser student numegrup

Pentru a schimba grupul unui fișier, folosim chgrp:

sudo chgrp numegrup fisier

Parole

Comanda passwd este folosită pentru a schimba parola. Fără niciun parametru, va schimba parola utilizatorului curent. Cu parametru un nume de utilizator, va încerca schimbarea parolei acelui utilizator, solicitând parola actuală.

Rulată de către root, nu va solicita parola curentă.

sudo passwd numeutilizator

- va schimba parola lui numeutilizator, fără a solicita parola curenta.

Exerciții

1 Permisiuni

Creați utilizatorii: obama, cameron și putin, folosind ca parole chiar numele de utilizator, adică obama, cameron și putin.

Rezolvare
sudo su
adduser obama
adduser cameron
adduser putin

Autentificați-vă ca utilizatorul obama și creați în home-ul acestuia un fișier launchcodes având conținutul “123456789”.

Rezolvare
su - obama
echo "124365879" > launchcodes

Implicit, acest fișier este accesibil și altor utilizatori.

Testați acest lucru, autentificându-vă ca putin și cameron.

Rezolvare
su cameron
cat /home/obama/launchcodes
exit
 
su putin
cat /home/obama/launchcodes
exit

Afișați permisiunile curente ale fișierului.

Rezolvare
ls -l /home/obama/launchcodes

va afișa: -rw-rw-r– 1 obama obama 0 Oct 21 17:47 launchcodes

Revocați dreptul de citire pentru alți utilizatori, în afară de obama.

Rezolvare
chmod go-r launchcodes

2. Permisiuni de grup

Creați un grup nato și adăugați utilizatorii cameron și obama în el.

Rezolvare
sudo su
addgroup nato
adduser cameron nato
adduser obama nato

Ca utilizatorul obama, creați un fișier secrettreaty în home-ul acestuia. Stabiliți grupul fișierului nou creat la nato.

Rezolvare
su - obama
touch secrettraty
exit
sudo chgrp nato /home/obama/secrettreaty

Modificați permisiunile astfel încât alți utilizatori (putin de exemplu, dar și alții) să nu poată citi fișierul, iar cei din grupul nato să îl poată citi și modifica.

Rezolvare
su - obama
chmod o=,g=rw secrettreaty
exit

Afișați proprietarul, grupul și permisiunile fișierului secrettreaty.

Rezolvare
ls -l /home/obama/secrettreaty

3. Home dirs

Logați-vă ca fiecare dintre utilizatorii obama și cameron utilizând su -. Folosiți pwd pentru a vedea în ce director este plasat utilizatorul în mod implicit: directorul home.

Rezolvare
su - obama
pwd
exit
su - cameron 
pwd
exit

Fiind logați ca obama logați-vă ca cameron utilizând su. Navigați spre directorul home al utilizatorului curent, utilizând cd ~.

Rezolvare
su obama
su cameron
pwd 
cd ~
pwd
exit
exit

Logați ca cameron navigați către home-ul lui obama utilizând cd ~obama.

Rezolvare
su cameron
cd ~obama
pwd
exit

Determinați directorul home pentru utilizatorul privilegiat (root), utilizând una din metodele din cadrul acestei secțiuni.

Rezolvare
sudo su -
pwd
exit

De ce nu este / directorul căutat?

Rezolvare
/ este rădăcina arborelui de fișiere. Directorul ~root este un director din arbore, și anume /root.

4. bashrc. Aliasuri

Dacă folosiți type ls veți observa că ls est e un alias pentru

ls --color=auto

(ceea ce îi spune să afișeze directoarele și fișierele speciale colorat).

Puteți lista aliasurile existente utilizând comanda alias. De asemenea puteți seta un nou alias, cu alias NUME_ALIAS=“COMANDA”

Utilizați alias pentru a face ca lal să fie un alias pentru ls -al.

Rezolvare
alias lal="ls -al"
lal

Se păstrează alias-ul și în alt terminal/tab?

Vizualizați fișierul de configurare bash din home-ul utilizatorului student (~/.bashrc) și adăugați definiția aliasului anterior definit, la sfârșitul fișierului.

Rezolvare
Se modifică .bashrc și se adaugă în el linia:
alias lal="ls -al"

Verificați că alias-ul se păstrează acum și în alt terminal.

Configurările realizate din linia de comandă sunt temporare (se pierd după un restart al sistemului sau la pornirea altui terminal, în funcție de tipul configurării).

Pentru configurările permanente trebuie întotdeauna modificat un fișier.

5. chmod numeric

chmod permite specificarea drepturilor într-o formă numerică, mai comodă. Permisiunile unui fișier se exprimă ca un număr în baza 8 de 3 cifre. Pentru a face corespondența între numere și permisiuni, se realizează trecerea în baza 2 a fiecărei cifre în parte. Un bit 0 semnifica absența permisiunii respective, așa cum arată și figura:

Creați utilizatorii ana, gigel, chuck.

Rezolvare
sudo adduser ana
sudo adduser gigel
sudo adduser chuck

Autentificați-vă ca utilizatorul ana.

În home, creați fișierele mere și pere conținând, respectiv, textele Ana are mere și Ana are pere.

Rezolvare
su ana
echo "Ana are mere" > ~/mere
echo "Ana are pere" > ~/pere

Modificați permisiunea fișierului mere astfel încât gigel să nu-l poată citi dar să-l poată scrie, păstrând nemodificate celelalte permisiuni. Folosiți doar opțiunile numerice pentru chmod.

Rezolvare
ls -l ~/mere 
chmod 642 ~/mere
ls -l ~/mere 

Modificați permisiunile fișierului pere astfel încât chuck să-l poată modifica și citi. Folosiți permisiuni numerice. Nu modificați alte permisiuni.

Rezolvare
ls -l ~/pere 
chmod 646 ~/pere
ls -l pere 

Verificați permisiunile.

Permisiunile setate pentru chuck sunt aceleași ca și pentru gigel. Nu puteți să separați cei doi utilizatori.

6. chown

Schimbați owner-ul fișierului pere în gigel. Ce drepturi va avea acum ana asupra fișierului pere?

Din motive de securitate, comanda chown necesită privilegii de root. Folosiți sudo pentru a o rula.

Rezolvare
sudo chown gigel pere
ls -l pere

Ana va avea aceleași drepturi cu chuck - doar de scriere.

7. sudo

Nu este sigur să partajăm parola utilizatorului root. sudo (superuser do) este o metodă mai sigură şi mai flexibilă decât su pentru a delega autoritatea.

Pentru ca un utilizator să poată folosi sudo, trebuie să aibă permisiune explicită în fişierul de configurare /etc/sudoers. De asemenea, la folosirea sudo prima oară în sesiunea curentă, se cere o parolă. Aceasta este parola utilizatorului, nu a root. Astfel, nu partajăm parola root cu nimeni.

De asemenea, sudo poate fi configurat să permită doar anumite comenzi, să nu ceară o parolă, şi să funcţioneze peste reţea.

Configurați sudo astfel încât obama să-l poată folosi. Urmăriți pașii:

  • vizualizați conținutul fișierului /etc/sudoers folosind comanda visudo (se recomandă folosirea visudo pentru a-l edita)
    • ATENȚIE: NU editați fișierul acum!

Deoarece editorul folosit implicit de visudo este nano, rulați întâi comanda

sudo update-alternatives --config editor

și alegeți vim.basic pentru a seta vim ca editor.

  • identificați grupul utilizatorilor ce pot folosi sudo.
  • adăugați utilizatorul obama în acest grup

Stergeți utilizatorul putin, fiind autentificat ca utilizator obama.

Rezolvare
sudo adduser obama sudo
su - obama
sudo deluser putin

8. useradd

Comanda adduser nu este portabilă (nu se găsește, de exemplu pe Gentoo), este doar un wrapper peste useradd, usermod şi alte comenzi similare. Exemplul de mai jos arată tipurile celor două fișiere (student@uso:~$ semnifică promptul):

student@uso:~$ file $(which adduser)
/usr/sbin/adduser: a /usr/bin/perl script text executable
student@uso:~$ file $(which useradd)
/usr/sbin/useradd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

(comanda file afișează tipul unui fișier, comanda which afișează locația executabilului ce reprezintă o comandă, notația $(cmd) înseamnă executarea comenzii cmd și înlocuirea șirului cu rezultatul acestei comenzi)

Adăugați utilizatorul thor având ca home directorul /home/asgaard/thor, membru al grupurilor admin, student, nato și thor.

Dacă nu configurați o parolă pentru contul creat, puteți să vă logați în acel cont prin intermediul contului privilegiat.

Rezolvare
sudo mkdir -p /home/asgaard/thor
sudo addgroup nato
sudo useradd -d /home/asgaard/thor -G admin,student,nato thor

Deoarece nu a fost configurată parola, logarea ca thor se va face prin intermediul contului root.

9. Date despre utilizatorii autentificați

Următoarele exerciții necesită o mașină virtuală pornită.

Deschideți ActivitiesVMware Player și apoi faceți double-click pe smalltalk. Așteptați până când pornește.

Nu dați comenzi pe mașina virtuală, următoarele comenzi se execută pe mașina locală (intel-workstation).

Deschideți 3 conexiuni prin ssh la mașina virtuală smalltalk pusă la dispoziție în laborator, sau pe care o descărcați de la adresa.

Utilizatorul este bjarne cu parola c++. Parola de root este uso. Hostname-ul este: smalltalk.local.

Rezolvare
ssh bjarne@smalltalk.local

Aflați informații despre utilizatorii autentificați în sistem în prezent, ultimele autentificări, ultima repornire și timpul cât a fost pornită (running) mașina.

Rezolvare
w
last
last reboot
uptime

Vă puteți folosi de comanda apropos pentru a găsi comenzile necesare rezolvării acestui exercițiu. De asemenea, suportul de curs poate fi de un real ajutor.

10. Copierea de fișiere la distanță

Sintaxa scp este asemănătoare cu cea a cp, atât că la destinație specificați și username + host.

Exemplu:

scp fisier_local user@host:/calea/pe/host

Consultați manualul comenzii scp pentru a copia directorul /etc/init.d în home-ul utilizatorului bjarne de pe mașina virtuală smalltalk din exercițiul anterior.

Rezolvare
scp -r /etc/init.d bjarne@smalltalk.local:
so-etti/laboratoare/lab4.txt · Last modified: 2013/04/04 23:30 by alexandru.radovici
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