File System e permessi

File System

Il File System è il sistema che il SO (o anche un programma) usa per organizzare e tenere traccia dei file e delle directory.
Il SO Linux solitamente usa(va) un filesytem di nome ext2 (ora in via di sostituzione con la nuova versione, l'ext3)
Esistono diversi tipi di filesystem, molti dei quali sono supportati, almeno in parte, da Linux. Il supporto va compilato nel kernel, staticamente per il filesystem della partizione di root (/) e volendo come modulo per tutti gli altri.
Ogni filesystem ha caratteristiche differenti per quanto riguarda sia la strategia di gestione dei file, sia di conseguenza il tempo di accesso agli stessi. A cosa può servire avere il supporto per diversi file system? Ovviamente per poter accedere ai dati contenuti su partizioni/dischi/floppy/cdrom che usano tipologie di fs differenti. In particolare:


Esistono pure filesytem "virtuali", che vengono creati a run-time dal kernel. Un esempio importante è il proc-fs che solitamente trovate montato sulla dir /proc. Questo contiene tutti i dati relativi a tutti i processi attivi sul sistema, kernel compreso.

I filesystem devono esser montati per essere acceduti: il comando che si usa è:
> mount -t type device mountpoint
dove
- type è il tipo di fs (ext2, ext3, reiserfs, vfat...)
- device è il device che vogliamo montare (/dev/hda1, /dev/cdrom, /home/biko/miofiledamontare, ...)
- mount point è la directory (che deve esiste) sulla quale vogliamo montare il nostro fs.
Ad esempio, per montare il cdrom sotto la dir cdrom useremo il comando:
> mount -t iso9660 /dev/cdrom /cdrom

Un'importante opzione di mount è il loop (il cui supporto va compilato nel kernel) che consente di montare dei file contenenti un filesystem come se fossero dei device: è il caso, ad esempio, delle immagini iso dei cdrom...
> mount -t iso9660 miofiledamontare ./mountpoint -o loop

Permessi dei file

Linux e unix in generale hanno il concetto non solo di utenti, ma anche della proprietà dei file.
TUTTI i file presenti sul FS hanno un utente proprietario (che al limite può essere anche l'utente nobody).
Le operazioni di lettura/scrittura/esecuzione dei file vengono concesse o negate in base ai diritti associati al file stessi.
In particolar distinguiamo, dal punto di vista del file, te tipi di utenti:
- lo user, o proprietario del file, identificato con la lettera u
- il gruppo di appartenenza del file (che può essere quello dello user o un altro), identificato con la lettera g
- tutti gli altri, identificati con la lettera o
Per ciascuno di essi c'è una tripletta di permessi, rispettivamente read, write ed execute (rwx)
Alle lettere sono associati dei valori numerici espressi in potenza di 2:
r = 2^2
w= 2^1
x= 2^0
esempio:
[biko@polgara:~/public_html]$ ls -la kernel.html 
-rw-r--r--    1 biko     biko         1836 May 21 00:18 kernel.html
[biko@polgara:~/public_html]$ 


Per cambiare i diritti ad un file si usa il comando
> chmod
le directory DEVONO avere il diritto di esecuzione settato per essere accedute
per dare ad esempio il tutti diritti sul file di cui sopra al proprietario, solo lettura al suo gruppo e nulla agli altri, usiamo il comando
[biko@polgara:~/public_html]$ chmod 740 kernel_conf.html 
[biko@polgara:~/public_html]$ ls -la kernel_conf.html 
-rwxr-----    1 biko     biko         4647 May 21 00:28 kernel_conf.html
[biko@polgara:~/public_html]$ 


È anche possibile cambiare la proprieta' dei file: il comando da usare in questo caso e'
> chown utente.gruppo nomefile
Notate che l'utente root può cambiare permessi e proprietà dei file a suo piacimento, gli utenti comuni (ovviamente) no: possono cambiare i diritti solo dei file che appartengono loro o ai gruppi di cui fanno parte (se e' dato il permesso di scrittura al gruppo).
Per la proprietà dei file possono cambiare il gruppo di apparteneza degli stessi solo se fanno parte del gruppo "destinazione", mentre non possono cambiare l'utente proprietario del file.