Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:cursuri:curs-12 [2013/05/20 14:44]
razvan.deaconescu [Demo-uri]
so:cursuri:curs-12 [2019/05/11 15:36] (current)
razvan.deaconescu
Line 1: Line 1:
-====== Curs 12 - Securitatea ​sistemelor de operare ​======+====== Curs 12 - Implementarea ​sistemelor de fișiere ​======
  
-<​html>​ +  * [[http://​prezi.com/​i7gfiypqqpje/?utm_campaign=share&utm_medium=copy&rc=ex0share|Curs 12 - Implementarea sistemelor de fișiere (Vizualizare Prezi)]] 
-<iframe src="http://​prezi.com/​embed/​0oxmg6hvis3u/?bgcolor=ffffff&amp;​lock_to_path=0&amp;​autoplay=0&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​ +  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-12.pdf|Curs 12 - Implementarea sistemelor de fișiere (PDF)]]
-</html>+
  
-  * [[http://prezi.com/0oxmg6hvis3u/so-curs-12/?kw=view-0oxmg6hvis3u&​rc=ref-31844697 ​Curs 12 - Securitatea sistemelor ​de operare (Vizualizare Prezi)]] +  * [[https://docs.google.com/document/d/1yQIKPYfAiUehhdSf1D10f3lIH3hnd5xXVyL2ftBH3iQ/​edit?usp=sharing|Notițe ​de curs]]
-  * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-12.pdf | Curs 12 - Securitatea sistemelor de operare (PDF)]]+
  
   * Suport curs   * Suport curs
-    * Operating System Concepts +    * Operating System Concepts ​Essentials 
-      * Capitolul ​14 -- Protection +      * Capitolul ​10: File-System Implementation 
-      * Capitolul 15 -- Security +        * Secțiunile ​10.1 -- 10.8
-        * Secțiunile ​15.1, 15.2, 15.5+
     * Modern Operating Systems     * Modern Operating Systems
-      * Capitolul ​9 -- Security +      * Capitolul ​6: File Systems 
-        * Secțiunile ​9.49.6+        * Secțiunile ​6.3, 6.4 
 + 
 +<​html>​ 
 +  <​center>​ 
 +    <iframe src="​https://​prezi.com/​embed/​i7gfiypqqpje/?​bgcolor=ffffff&​amp;​lock_to_path=0&​amp;​autoplay=0&​amp;​autohide_ctrls=0&​amp;​features=undefined&​amp;​disabled_features=undefined"​ width="​550"​ height="​400"​ frameBorder="​0"></​iframe>​ 
 +  </​center>​ 
 +</​html>​
  
 ===== Demo-uri ===== ===== Demo-uri =====
  
-Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-12.zip|arhiva aferentă]].+Pentru parcurgerea demo-urilor,​ folosiți [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​curs-12-demo.zip|arhiva aferentă]].
  
-  - Bitul de set-user-ID-on-execution +  - Folosiți comanda ''​stat''​ pentru a afișa informații despre inode-ul corespunzător unui fișier, director, link simbolic, char device, block device:<​code bash> 
-    * Intrați în directorul ''​1-setuid/''​. +stat /​etc/​passwd 
-    * Consultați fișierul ''​setuid-test.c''​.+stat /usr/lib/ 
 +stat /​usr/​bin/​cc 
 +stat /dev/null 
 +stat /​dev/​loop0 
 +</​code>​ 
 +    * Afișați informații despre un socket Unix, după ce îl căutați în ierarhia ''/​var/​run/'':<​code bash> 
 +sudo find /var/run -type s 
 +sudo stat /​var/​run/​udev/​control 
 +</​code>​ 
 +    * Aflați dimensiunea fișierului ''/​sbin/​init''​ folosind ''​stat'':<​code bash> 
 +stat -c %s /​sbin/​init 
 +</​code>​ 
 +    * Urmăriți modificările timpilor ​de acces pe fișier (//access time//, //modify time//, ​ //change time//) folosind comenzile de mai jos:<​code bash> 
 +cd /tmp 
 +touch a.txt 
 +stat a.txt 
 +cat a.txt 
 +stat a.txt 
 +chmod a+rw a.txt 
 +stat a.txt 
 +echo "​abc"​ > stat.txt 
 +stat a.txt 
 +</​code>​ 
 +      * //access time// este timpul de acces al fișierului,​ deschis pentru citire. 
 +      * //modify time// este timpul de modificare a datelor fișierului. 
 +      * //change time// este timpul de modificare a metadatelor fișierului (informații din inode). 
 +  ​Creați un fișier simplu și urmăriți numărul de link-uri ale acestuia:<​code bash> 
 +cd /tmp 
 +touch first.txt 
 +ls -i first.txt 
 +ls -l first.txt 
 +</​code>​ 
 +    * A doua coloana de la rularea ''​ls -l''​ este numărul de link-uri, inițial 1. 
 +    * Creați un fișier ca hard link la primul:<​code bash> 
 +ln first.txt second.txt 
 +</​code>​ 
 +    * Observați că inode-ul este același iar numărul de link-uri este egal cu doi:<​code bash> 
 +ls -i first.txt second.txt 
 +ls -l first.txt second.txt 
 +</​code>​ 
 +    * Creați un al treilea link și observați numărul de link-uri egal cu 3:<code bash> 
 +ln second.txt third.txt 
 +ls -i first.txt second.txt third.txt 
 +ls -l first.txt second.txt third.txt 
 +</​code>​ 
 +    * Ștergeți primele două link-uri/​nume și obsevați păstrarea inode-ului și reducerea numărului de link-uri la 1 pentru ultimul nume:<​code bash> 
 +unlink first.txt 
 +rm second.txt 
 +ls -i third.txt 
 +ls -l third.txt 
 +</​code>​ 
 +      * ''​unlink''​ și ''​rm''​ pot fi folosite interschimbabil. 
 +  - Urmăriți numărul de link-uri/​nume aferente unui director gol. Numărul este 2: un link este numele efectiv al directorului,​ iar altul este referința '​.'​ (punct, //dot//) către director însuși:<​code bash> 
 +cd /tmp 
 +mkdir /​tmp/​test-d 
 +ls -ld /​tmp/​test-d 
 +</​code>​ 
 +    * Creați un subdirector al directorului ''/​tmp/​test-d/''​. Numărul de link-uri va crește la 3, cu ajutorul referinței '​..'​ (punct punct, //dot dot//) de la subdirector:<​code bash> 
 +mkdir /​tmp/​test-d/​test-subd 
 +ls -ld /​tmp/​test-d 
 +</​code>​ 
 +    * Creați un subfișier al directorul ''/​tmp/​test-d/''​. Numărul de link-uri nu se va modifica, întrucât fișierul nu are o referință la directorul părinte:<​code bash> 
 +touch /​tmp/​test-d/​test-f 
 +ls -ld /​tmp/​test-d 
 +</​code>​ 
 +  - Creați un director simplu și vedeți ce spațiu ocupă pe disc, folosind comanda ''​stat'':<​code bash> 
 +cd /tmp 
 +mkdir /​tmp/​fill-d 
 +stat -c %s /​tmp/​fill-d 
 +</​code>​ 
 +    * Copiați scriptul ''​create-long-filenames''​ din arhivă și rulați-l în directorul proaspăt creat:<​code bash> 
 +cd /​tmp/​fill-d 
 +# TODO: copy script 
 +./​create-long-filenames 
 +</​code>​ 
 +    * Observați conținutul directorului și noua dimensiune a acestuia:<​code bash> 
 +ls -l /​tmp/​fill-d 
 +stat -c %s /​tmp/​fill-d 
 +</​code>​ 
 +      * Dimensiunea directorului a crescut datorită numărului de intrări în director. 
 +      * Dimensiunea directorului este multiplu de dimensiunea blocului sistemului. 
 +  - Citirea intrărilor dintr-un director; simularea comenzii ''​ls''​ 
 +    * Intrați în directorul ''​5-dirent/''​. 
 +    * Consultați fișierul ''​dirent.c''​.
     * Compilați fișierul folosind comanda ''​make''​.     * Compilați fișierul folosind comanda ''​make''​.
-      ​Trebuie să aveți drept de sudo pentru a reuși întreg procesul. +    ​Rulați executabilul ​obținut ​dându-i ca argument un director:<​code ​bash
-    * Folosiți ''​ls -l''​ pentru a obține informații complete despre executabilul ''​setuid-test''​. +./dirent tmp 
-      * Observați că executabiul este deținut ​de ''​root''​ și că are bitul de set-user-ID activat. +./dirent /usr 
-    * Ca utilizator neprevilegiat rulațexecutabilul:<​code>​ +./dirent /var/run 
-./setuid-test+./dirent /usr/lib
 </​code>​ </​code>​
-    ​* Observați ​cele trei tipuri de identificatori de utilizatori:​ //user id//, //effective user ID//, //saved set-user-ID//​+      ​* Observați ​afișarea intrărilor și a tipului acestora
-      * Detalii în [[http://​man7.org/​linux/​man-pages/​man7/​credentials.7.html|pagina de manual credentials]]+      * Structura ''​struct dirent''​ reține informațiile legate de o intrare dintr-un director
-    * Observați ​că se poate reveni la utilizator privilegiat,​ dacă cel puțin unul dintre identificatorii ​de utilizatori este 0 (''​root''​) (//​temporary privilege drop//)+    * Un director este, pe disc, un inode ale rui bloc-uri conține un vector ​de intrări asemănătoare cu ''​struct dirent''​. 
-      * În momentul în care nici unul dintre identificatorii ​de utilizatori nu mai este 0nu se poate reveni la utilizator privilegiat ​(//permanent privilege drop//).+      * Intrările sunt citite ​de pe disc folosind apelul ''​readdir''​similar folosirii apelului ''​read''​ pentru fișiere. 
 +      * La fel ca fișierele obișnuite ​(//regular files//) și directoarele folosesc intern un cursor de fișier care este actualizat după fiecare apel ''​readdir''​.
so/cursuri/curs-12.1369050293.txt.gz · Last modified: 2013/05/20 14:44 by razvan.deaconescu
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