This shows you the differences between two versions of the page.
systems:uso:laboratoare:laborator-04 [2012/09/23 17:53] ioan.eftimie [2. bashrc. Aliasuri] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== [importat] Laborator 04 - Gestiunea utilizatorilor ====== | ||
- | <hidden> | ||
- | ** Descriere ** | ||
- | * utilizator normal vs root | ||
- | * managementul utilizatorilor: useradd, groupadd, userdel | ||
- | * modificarea parolelor: passwd | ||
- | * drepturi administrative: sudo, su | ||
- | * drepturi pe fișiere: chmod numeric, literal | ||
- | * owner pe fișiere: chown, chgrp | ||
- | * directoare home: /home/student, /root, / | ||
- | * user-specific configuration: .bashrc | ||
- | * alias | ||
- | * conectarea la distanță în contul altui utilizator: SSH (prompt modificat pe mașinile de la distanță) | ||
- | * copierea de fișiere: SCP" | ||
- | |||
- | ** Referințe ** | ||
- | * vim (lab 03) | ||
- | * cp, cat, touch (lab 02) | ||
- | * virtualizare | ||
- | |||
- | ** TODO ** | ||
- | * review | ||
- | * asigură cu responsabilul de laborator, că există mașina virtuală smalltalk deja pe toate calculatoarele | ||
- | </hidden> | ||
- | |||
- | === Suport laborator === | ||
- | |||
- | * [[http://books.google.com/books?id=_JFGzyRxQGcC&lpg=PA532&dq=introducere%20in%20sisteme%20de%20operare&pg=PA53#v=onepage&q&f=false|3. Gestiunea pachetelor și utilizatorilor]] | ||
- | |||
- | * Puteți urmări tutorialul video corespunzător laboratorului făcut de [[http://itassistant.org/diverse/utilizarea-sistemelor-de-operare/utilizarea-sistemelor-de-operare-3.html|IT Assistant]]. | ||
- | |||
- | ====== Tutorial ====== | ||
- | |||
- | ===== 1. Taskuri administrative. root. sudo. su ===== | ||
- | |||
- | <hidden> | ||
- | Pe scurt, despre diferențierea între utilizatori normali, utilizatori privilegiați și conturi guest, dacă e cazul. Puține detalii despre ''sudo'' și ''su'' și de ce sunt necesare și cum lucrează. Chiar dacă e scris și în conținut, ei __nu__ prea citesc. | ||
- | </hidden> | ||
- | |||
- | Rulați comanda următoare și observați ce se întâmplă (comanda închide calculatorul dacă se execută cu succes): | ||
- | |||
- | <code> | ||
- | halt | ||
- | </code> | ||
- | |||
- | Observați că vi se 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 folosește 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 toata lumea să cunoască această parolă. De aceea, se oferă posibilitatea de a obține drepturi administrative folosind parola proprie, prin intermediul comenzii ''sudo''. | ||
- | |||
- | În cazul nostru, folosim: | ||
- | <code>sudo su</code> | ||
- | |||
- | <note>Observați că ni se cere parola utilizatorului ''student'', //NU// a utilizatorului privilegiat.</note> | ||
- | |||
- | <hidden> | ||
- | Insistat puțin pe faptul că indicațiile oferite de prompt pot să nu fie valide. Probabil puteți face referire la capitolul de Shell din carte unde au o secțiune despre modificarea promptului. Dacă grupa este above average le puteți zice direct și de **''$PS1''**, **''$PS2''** | ||
- | |||
- | [[http://books.google.com/books?id=_JFGzyRxQGcC&lpg=PA532&dq=introducere in sisteme de operare&pg=RA1-PA429|12.11.2 Schimbarea promptului shell]] | ||
- | </hidden> | ||
- | |||
- | Promptul a fost schimbat pentru a indica faptul că sunteți un utilizator privilegiat. Caracterul **''$''** indică un utilizator neprivilegiat, caracterul **''#''** indică un utilizator privilegiat. | ||
- | |||
- | <note warning> | ||
- | Nu vă bazați întodeauna pe ce indică promptul. Poate fi configurat altfel! | ||
- | </note> | ||
- | |||
- | Pentru a vă întoarce în shellul deținut de utilizatorul inițial, rulați comanda: | ||
- | |||
- | <code>exit</code> | ||
- | |||
- | <note> | ||
- | 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! | ||
- | </note> | ||
- | |||
- | <hidden> | ||
- | Prezentat faptul că mediul specific unui utilizator nu înseamnă doar directorul lui home ci și diverse setări salvate în **''.*rc''**-uri din directorul home. În funcție de nivelul grupei se poate merge în detaliu sau doar ilustra un hint. | ||
- | </hidden> | ||
- | |||
- | Rulați următoarea secvență de comenzi: | ||
- | |||
- | <code> | ||
- | pwd | ||
- | sudo su | ||
- | pwd | ||
- | exit | ||
- | pwd | ||
- | sudo su - | ||
- | pwd | ||
- | exit | ||
- | pwd | ||
- | </code> | ||
- | |||
- | Ce observați cu privire la directorul curent? | ||
- | |||
- | <note tip>Caracterul **''-''** face ca mediul specific utilizatorului pe care-l vom impersona să fie încărcat. 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</note> | ||
- | |||
- | ===== 2. Utilizatori ===== | ||
- | |||
- | Creați utilizatorul ''obama''. Folosiți comanda următoare: | ||
- | |||
- | <code> | ||
- | adduser obama | ||
- | </code> | ||
- | |||
- | 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//. | ||
- | |||
- | Rulați | ||
- | |||
- | <code> | ||
- | sudo adduser obama | ||
- | </code> | ||
- | |||
- | Stabiliți parola ''obama''. Ignorați ultimele câmpuri (informațiile pentru utilizatorul nou creat). | ||
- | |||
- | Logați-vă ca utilizatorul ''obama'': | ||
- | |||
- | <code> | ||
- | su - obama | ||
- | </code> | ||
- | |||
- | Asigurați-vă că sunteți în directorul ''/home/obama'' și creați fișierul ''launchcodes'' conținând codurile secrete de lansare a rachetelor: | ||
- | |||
- | <code> | ||
- | echo "123456789" > launchcodes | ||
- | </code> | ||
- | |||
- | Ca ''student'', creați utilizatorii ''cameron'', ''einstein'' și ''putin'': | ||
- | |||
- | <code> | ||
- | sudo su | ||
- | adduser einstein | ||
- | adduser cameron | ||
- | adduser putin | ||
- | exit | ||
- | </code> | ||
- | |||
- | Stergeți utilizatorul ''einstein'' folosind comanda: | ||
- | |||
- | <code> | ||
- | sudo deluser einstein | ||
- | </code> | ||
- | |||
- | Rulați comenzile următoare: | ||
- | |||
- | <code> | ||
- | su cameron | ||
- | cat /home/obama/launchcodes | ||
- | exit | ||
- | su putin | ||
- | cat /home/obama/launchcodes | ||
- | exit | ||
- | </code> | ||
- | |||
- | <note info> | ||
- | Observați că atât cameron cât și putin au putut citi conținutul fișierului. | ||
- | |||
- | Doar ''obama'' ar trebui să vadă conținutul fișierului **''launchcodes''**. Pentru a rezolva problema, vom folosi permisiuni. | ||
- | </note> | ||
- | |||
- | ===== 3. Permisiuni ===== | ||
- | |||
- | Ca ''obama'' rulați comanda | ||
- | <code> | ||
- | ls -l launchcodes | ||
- | </code> | ||
- | |||
- | Prima coloană din output reprezintă permisiunile fișierului **''launchcodes''**. Pornind de la imaginea din laboratorul precedent, avem următoarea diagramă semnificativă (dreptunghiurile colorate au fost prezentate în laboratorul trecut) | ||
- | |||
- | {{http://elf.cs.pub.ro/uso/store/03_ls-l.png?nocache}} | ||
- | |||
- | 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 | ||
- | |||
- | Tastați | ||
- | |||
- | <code> | ||
- | chmod -r launchcodes | ||
- | </code> | ||
- | |||
- | Folosind ''ls -l'' observați ce permisiuni are fișierul ''launchodes''. | ||
- | Verificați dacă ''obama'' poate citi fișierul ''launchcodes''. | ||
- | |||
- | <code> | ||
- | cat launchcodes | ||
- | </code> | ||
- | |||
- | Observați că absența unui caracter din {u, g, o, a} se interpretează ca modificarea permisiunilor pentru toți utilizatorii (''a'', sau all). | ||
- | |||
- | Rulați comanda următoare: | ||
- | |||
- | <code> | ||
- | chmod u+r launchcodes | ||
- | </code> | ||
- | |||
- | Verificați cu ''ls -l'' ce permisiuni au fost adăugate. | ||
- | |||
- | Verificați cine poate citi fișierul ''launchcodes'': | ||
- | |||
- | <code> | ||
- | cat launchcodes | ||
- | exit | ||
- | su cameron | ||
- | cat /home/obama/launchcodes | ||
- | exit | ||
- | su putin | ||
- | cat /home/obama/launchcodes | ||
- | exit | ||
- | </code> | ||
- | |||
- | Creați fișierul ''test_perms''. Rulați comenzile următoare și observați cum se modifică permisiunile: | ||
- | |||
- | <code> | ||
- | touch test_perms | ||
- | ls -l test_perms | ||
- | chmod a= test_perms | ||
- | ls -l test_perms | ||
- | chmod +r test_perms | ||
- | ls -l test_perms | ||
- | chmod u+w test_perms | ||
- | ls -l test_perms | ||
- | chmod u+x,o+w test_perms | ||
- | ls -l test_perms | ||
- | </code> | ||
- | |||
- | <note info> | ||
- | Încercați și alte combinații acasă pentru a înțelege cât mai bine permisiunile. | ||
- | </note> | ||
- | |||
- | <hidden> | ||
- | __NU__ treceți mai departe până ce nu sunteți siguri că 90% au înțeles permisiunile literale și ''chmod''. Vor avea probleme în continuare dacă nu înțeleg aici. | ||
- | </hidden> | ||
- | |||
- | ===== 4. Grupuri ===== | ||
- | |||
- | <hidden> | ||
- | Cu ce vin grupurile în plus față de utilizatori? De ce au fost create? | ||
- | </hidden> | ||
- | |||
- | Creați un tratat secret între USA și GB. Ca utilizator ''obama'' rulați comenzile următoare (__în ''/home/obama''__): | ||
- | |||
- | <code> | ||
- | echo "Tratat secret între USA și GB" > secrettreaty | ||
- | su cameron | ||
- | cat secrettreaty | ||
- | su putin | ||
- | cat secrettreaty | ||
- | </code> | ||
- | |||
- | ''putin'' nu ar trebui să citească/scrie fișierul dar ''cameron'' și ''obama'' da. Nu puteți folosi doar permisiuni (de ce?). | ||
- | |||
- | Adăugați grupul ''nato'' (ca __''student''__) astfel: | ||
- | |||
- | <code> | ||
- | sudo addgroup nato | ||
- | </code> | ||
- | |||
- | Adăugați utilizatorii ''cameron'' și ''obama'' la grupul ''nato'' astfel: | ||
- | |||
- | <code> | ||
- | sudo adduser obama nato | ||
- | sudo adduser cameron nato | ||
- | </code> | ||
- | |||
- | Modificați grupul fișierului ''secrettreaty'' utilizând ''chgrp''. | ||
- | |||
- | <code> | ||
- | chgrp nato secrettreaty | ||
- | </code> | ||
- | |||
- | Modificați permisiunile fișierului astfel încât __doar__ persoanele din grup să-l poată citi sau modifica. Verificați permisiunile cu ''ls -l''. | ||
- | |||
- | Verificați că doar utilizatorii ''cameron'' și ''obama'' pot citi sau modifica tratatul secret. | ||
- | |||
- | ===== 5. Parole ===== | ||
- | |||
- | <hidden> | ||
- | Despre securitatea parolelor. | ||
- | </hidden> | ||
- | |||
- | Utilizatorul ''obama'' dorește să-și schimbe parola. Logați ca ''obama'' rulați | ||
- | <code bash> | ||
- | passwd | ||
- | </code> | ||
- | |||
- | și modificați parola la un număr cu o singură cifră. Ce observați? | ||
- | |||
- | Rulați din nou comanda și modificați parola cu ''0b4m442''. | ||
- | |||
- | |||
- | Utilizatorul ''putin'' dorește să-i modifice parola lui ''cameron''. Logați ca ''putin'' tastați comanda | ||
- | |||
- | <code bash> | ||
- | passwd cameron | ||
- | </code> | ||
- | |||
- | Logați ca root, tastați comanda | ||
- | |||
- | <code bash> | ||
- | passwd cameron | ||
- | </code> | ||
- | |||
- | (stabiliți noua parolă la ''c4m3r0n'') | ||
- | |||
- | <note> | ||
- | Observați că orice utilizator își poate modifica parola proprie dar numai cei privilegiați pot modifica parolele altor utilizatori | ||
- | </note> | ||
- | |||
- | ===== 6. Date despre utilizatorii autentificați ===== | ||
- | |||
- | Deschideți 3 conexiuni prin ''ssh'' la mașina virtuală ''smalltalk'' pe care o descărcați de [[http://elf.cs.pub.ro/uso/store/uso-vm-smalltalk.zip|aici TODO]]. | ||
- | |||
- | <note tip> | ||
- | Utilizatorul este ''bjarne'' cu parola ''c++''. Parola de root este ''uso'' | ||
- | </note> | ||
- | |||
- | <code bash> | ||
- | ssh bjarne@smalltalk.local | ||
- | </code> | ||
- | |||
- | Tastați comanda: | ||
- | |||
- | <code bash> | ||
- | w | ||
- | </code> | ||
- | |||
- | Ce observați? | ||
- | |||
- | Rulați comenzile următoare __și pe mașina virtuală și pe cea fizică__: | ||
- | |||
- | <code bash> | ||
- | last | ||
- | last -n 3 | ||
- | last bjarne -n 3 | ||
- | last reboot -n 5 | ||
- | uptime | ||
- | </code> | ||
- | |||
- | Aceste comenzi pot fi folosite pentru a afla informații reduse despre sistem: | ||
- | * timpul de când a fost pornit | ||
- | * utilizatorii logați în sistem | ||
- | * utilizatorii care s-au logat în sistem | ||
- | |||
- | Pentru mai multe informații folosim log-uri. | ||
- | |||
- | ====== Exerciții ====== | ||
- | |||
- | ===== 1. Home dirs ===== | ||
- | |||
- | <hidden> | ||
- | Dacă nu le-ați zis la ''-'', le spuneți acum de ''~''. | ||
- | </hidden> | ||
- | |||
- | Creați utilizatorii ''chirac'' și ''thatcher''. | ||
- | |||
- | Logați-vă ca fiecare dintre aceștia utilizând ''su -''. Folosiți ''pwd'' pentru a vedea în ce director este plasat utilizatorul în mod implicit: directorul __home__. | ||
- | |||
- | |||
- | <solution> | ||
- | <code bash> | ||
- | sudo adduser chirac | ||
- | sudo adduser thatcher | ||
- | su - chirac | ||
- | pwd | ||
- | exit | ||
- | su - thatcher | ||
- | pwd | ||
- | exit | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | Logați ca ''chirac'' logați-vă ca ''thatcher'' utilizând ''su''. Navigați spre directorul home utilizând ''cd ~''. | ||
- | |||
- | <solution> | ||
- | <code bash> | ||
- | su chirac | ||
- | su thatcher | ||
- | pwd | ||
- | cd ~ | ||
- | pwd | ||
- | exit | ||
- | exit | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | Logați ca ''thatcher'' navigați către home-ul lui ''chirac'' utilizând ''cd ~chirac''. | ||
- | |||
- | <solution> | ||
- | <code> | ||
- | su thatcher | ||
- | cd ~chirac | ||
- | pwd | ||
- | exit | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | Determinați directorul home pentru utilizatorul privilegiat, utilizând una din metodele din cadrul acestei secțiuni. | ||
- | |||
- | <solution> | ||
- | <code bash> | ||
- | sudo su - | ||
- | pwd | ||
- | exit | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | De ce nu este ''/'' directorul căutat? | ||
- | |||
- | <solution> | ||
- | ''/'' este rădăcina arborelui de fișiere. Directorul ''~root'' este un director din arbore. | ||
- | </solution> | ||
- | |||
- | ===== 2. bashrc. Aliasuri ===== | ||
- | |||
- | Tastați ''ll''. Observați că se execută comanda ''ls -l''. Dacă folosiți ''which ll'' nu se va afișa nimic. Încercați ''type ll''. | ||
- | |||
- | <note> | ||
- | ''ll'' nu este o comandă propriu-zisă, ci un alias. Puteți lista aliasurile existente utilizând comanda ''alias''. | ||
- | </note> | ||
- | |||
- | Utilizați ''alias'' pentru a face ca ''lal'' să fie un alias pentru ''ls -al''. | ||
- | |||
- | <solution> | ||
- | <code bash> | ||
- | alias lal="ls -al" | ||
- | lal | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | Se păstrează alias-ul și în alt terminal/tab? | ||
- | |||
- | Vizualizați fișierul de configurare bash din ''~'' (''.bashrc'') și adăugați definiția aliasului anterior definit. | ||
- | |||
- | <solution> | ||
- | Se modifică ''.bashrc'' și se adaugă în el linia: | ||
- | <code bash> | ||
- | alias lal="ls -al" | ||
- | </code> | ||
- | </solution> | ||
- | |||
- | Verificați că alias-ul se păstrează acum și în alt terminal. | ||
- | |||
- | <note> | ||
- | 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. | ||
- | </note> | ||
- | |||
- | ===== 3. chmod numeric ===== | ||
- | |||
- | <hidden> | ||
- | Dacă nu le-ați zis de permisiuni numerice când a fost partea de tutorial e bine :P. Mulți se încurcă dacă permisiunile sunt prezentate în ambele formate simultan. | ||
- | |||
- | Prezentați permisiunile numerice acum. | ||
- | </hidden> | ||
- | |||
- | {{{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: | ||
- | |||
- | {{http://elf.cs.pub.ro/uso/store/03_numeric.png}} | ||
- | |||
- | Creați utilizatorii {{{ana}}}, {{{gigel}}}, {{{chuck}}} | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | sudo adduser ana | ||
- | sudo adduser gigel | ||
- | sudo adduser chuck | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | 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}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | su ana | ||
- | echo "Ana are mere" > ~/mere | ||
- | echo "Ana are pere" > ~/pere | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | 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}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | ls -l ~/mere | ||
- | chmod 642 ~/mere | ||
- | ls -l ~/mere | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | 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. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | ls -l ~/pere | ||
- | chmod 646 ~/pere | ||
- | ls -l pere | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | Verificați permisiunile. | ||
- | |||
- | <note tip>Permisiunile setate pentru {{{chuck}}} sunt aceleași ca și pentru {{{gigel}}}. Nu puteți să separați cei doi utilizatori.</note> | ||
- | |||
- | ===== 4. umask ===== | ||
- | |||
- | Paranoic din fire, {{{putin}}} vrea ca toate fișierele pe care le creează el să nu poată fi citite sau modificate de alți utilizatori. Pentru aceasta, folosește {{{umask}}}. | ||
- | |||
- | {{{umask}}} spune ce drepturi __NU__ vor avea fișierele create cu el. Pentru a stabili drepturile unui fișier se face //și logic// între valoarea negată a {{{umask}}} și 666 pentru fișiere sau 777 pentru director. Un fișier __NU__ va fi creat cu drepturi de execuție. | ||
- | |||
- | Logați ca {{{putin}}}, modificați umask astfel încât fișierele create să aibă drepturile cerute ({{{umask}}} nu e retroactiv, ce ați creat anterior setării umask își păstrează drepturile). | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | umask 066 | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | Când aveți valorea corectă pentru {{{umask}}}, rulați {{{exit}}} și logați-vă din nou ca {{{putin}}}. Ce valoare are {{{umask}}}? | ||
- | |||
- | Modificați un fișier astfel încât {{{umask}}} să rămână permanent la aceeași valoare. Ce fișier trebuie modificat? | ||
- | |||
- | <note tip> | ||
- | Rețineți ideea: permanent == salvat într-un fișier | ||
- | </note> | ||
- | |||
- | <solution> | ||
- | Se salvează în {{{.bashrc}}} o linie de forma: | ||
- | <screen> | ||
- | umask 066 | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | ===== 5. Bitul execute pentru directoare ===== | ||
- | |||
- | Logați ca utilizatorul {{{cameron}}} vizualizați permisiunile directorului {{{~cameron}}} și {{{~putin}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | su cameron | ||
- | ls -ld ~ | ||
- | ls -ld ~putin | ||
- | exit | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | Logați ca {{{putin}}} listați conținutul directorului {{{~cameron}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | su putin | ||
- | ls ~cameron | ||
- | exit | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | {{{cameron}}} dorește ca home-ul lui să fie privat. Eliminați toate drepturile de acces pentru grup și others pentru directorul {{{~cameron}}}. | ||
- | |||
- | Verificați că {{{putin}}} nu poate accesa sau vizualiza conținutul directorului {{{/home/cameron}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | su cameron | ||
- | chmod 700 ~ | ||
- | su - putin | ||
- | ls ~cameron | ||
- | cd /home/cameron/ | ||
- | exit | ||
- | exit | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | {{{cameron}}} dorește să găzduiască o pagină publică personală. Pentru aceasta creează directorul {{{public_html}}} (creați-l) în home-ul propriu. Serverul web trebuie să acceseze acest director și conținutul acestuia dar {{{cameron}}} vrea să-și păstreze {{{~}}} privat. | ||
- | |||
- | Creați fișierele {{{index.html}}} în {{{public_html}}} și {{{secret}}} în home-ul lui {{{cameron}}}. | ||
- | |||
- | Setați bitul x pentru others __pentru directorul__ {{{~cameron}}} și verificați că {{{obama}}} poate accesa directorul {{{/home/cameron/public_html}}} și fișierul {{{index.html}}} dar nu poate afișa conținutul directorului {{{~cameron}}}. | ||
- | |||
- | De ce nu funcționează tab completion? | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | su cameron | ||
- | chmod o+x ~ | ||
- | su obama | ||
- | ls -ld ~cameron | ||
- | ls ~cameron | ||
- | ls ~cameron/public_html | ||
- | </screen> | ||
- | Deoarece nu putem citi directorul, nu putem afla intrările existente în el. Dacă știm numele unui fișier sau director le putem accesa. | ||
- | </solution> | ||
- | |||
- | ===== 6. 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}}} și identificați grupul utilizatorilor ce pot folosi {{{sudo}}}. **NU** editați fișierul! (se recomandă folosirea {{{visudo}}} pentru a-l edita) | ||
- | * adăugați utilizatorul {{{obama}}} în acest grup | ||
- | |||
- | Stergeți utilizatorul {{{putin}}} fiind logat ca utilizator {{{obama}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | sudo adduser obama admin | ||
- | su - obama | ||
- | sudo deluser putin | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | ===== 7. sticky bit ===== | ||
- | |||
- | Listați permisiunile __directorului__ {{{~}}}. Faceți același lucru și pentru directorul {{{/tmp}}}. | ||
- | |||
- | Ce observați? | ||
- | |||
- | Autentificați ca {{{root}}}, creați directorul {{{haskell}}} în {{{~student}}} și creați fișierele {{{lazy}}} și {{{functional}}} în acest director. | ||
- | |||
- | Dați __toate__ drepturile pentru directorul {{{haskell}}} | ||
- | |||
- | Autentificați ca {{{student}}}, stergeți fișierul {{{lazy}}}. Observați că se poate. | ||
- | |||
- | Adăugați bit-ul sticky, autentificați ca {{{root}}}, pentru directorul {{{haskell}}}. Folosiți {{{chmod +t}}}. | ||
- | |||
- | Stergeți fișierul {{{functional}}} __autentificați ca obama __. | ||
- | |||
- | Observați apariția bitului {{{t}}}. | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | sudo su | ||
- | mkdir ~student/haskell | ||
- | touch ~student/haskell/lazy | ||
- | touch ~student/haskell/functional | ||
- | chmod 777 ~student/haskell | ||
- | su student | ||
- | rm ~/haskell/lazy | ||
- | exit | ||
- | chmod +t ~student/haskell | ||
- | su obama | ||
- | rm ~student/haskell/functional | ||
- | exit | ||
- | exit | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | |||
- | ===== Rocket Science ===== | ||
- | |||
- | |||
- | == 1. sudo. visudo == | ||
- | |||
- | <hidden> | ||
- | Le reamintim diferența între {{{sudo}}} și {{{su}}} | ||
- | </hidden> | ||
- | |||
- | <note warning> | ||
- | Deoarece editorul folosit implicit de {{{visudo}}} este {{{nano}}}, rulați întâi comanda | ||
- | |||
- | <screen> | ||
- | sudo update-alternatives --config editor | ||
- | </screen> | ||
- | |||
- | și alegeți {{{vim.basic}}} pentru a seta {{{vim}}} ca editor. | ||
- | </note> | ||
- | |||
- | De ce ați adăugat la taskul precedent utilizatorul {{{obama}}} în grupul admin? | ||
- | |||
- | Dorim ca toți membrii grupului {{{admin}}} să poată folosi {{{sudo}}} fără parolă. | ||
- | |||
- | Folosiți {{{visudo}}} pentru a modifica corespunzător. | ||
- | |||
- | |||
- | <solution> | ||
- | <screen> | ||
- | %admin ALL=(ALL) NOPASSWD: ALL | ||
- | </screen> | ||
- | </solution> | ||
- | |||
- | Verificați că {{{obama}}} poate rula {{{sudo ls}}} fără a i se cere parola pentru {{{sudo}}}. | ||
- | |||
- | == 2. 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): | ||
- | |||
- | <screen> | ||
- | 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 | ||
- | </screen> | ||
- | |||
- | (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}}}. | ||
- | |||
- | <note tip> | ||
- | Dacă nu configurați o parolă pentru contul creat, puteți să vă logați în acel cont prin intermediul contului privilegiat. | ||
- | </note> | ||
- | |||
- | <solution> | ||
- | <screen> | ||
- | student:~$ sudo mkdir -p /home/asgaard/thor | ||
- | student:~$ sudo addgroup nato | ||
- | student:~$ sudo useradd -d /home/asgaard/thor -G admin,student,nato thor | ||
- | </screen> | ||
- | |||
- | Deoarece nu a fost configurată parola, logarea ca thor se va face prin intermediul contului {{{root}}}. | ||
- | </solution> |