Come funzionano le autorizzazioni / gli attributi dei file? Livello di kernel, livello di FS o entrambi?


8

Una domanda che mi è stata posta in precedenza: le autorizzazioni / gli attributi dei file dipendono dal sistema operativo (e quindi dal kernel) o dal file system? Mi sembra che la seconda alternativa sia la più logica, eppure non ho mai sentito parlare dei reiserfspermessi sui file, ad esempio: solo "permessi sui file Unix". D'altra parte, per citare un articolo di Wikipedia :

Con l'uscita delle nuove versioni di Windows, Microsoft ha aggiunto all'inventario degli attributi disponibili sul file system NTFS

che sembra suggerire che gli attributi dei file di Windows siano in qualche modo legati al filesystem.

Qualcuno può illuminarmi per favore?

Risposte:


7

Sia il kernel che il filesystem hanno un ruolo. Le autorizzazioni sono archiviate nel filesystem, quindi deve esserci un posto dove archiviare le informazioni nel formato del filesystem. Le autorizzazioni vengono applicate e comunicate alle applicazioni dal kernel, quindi il kernel deve implementare le regole per determinare il significato delle informazioni archiviate nel filesystem.

Le "autorizzazioni per i file Unix" si riferiscono a un sistema di autorizzazioni tradizionale che prevede tre azioni (lettura, scrittura, esecuzione) controllate tramite tre tipi di ruolo (utente, gruppo, altro). Il compito del filesystem è di memorizzare 3 × 3 = 9 bit di informazioni. Il compito del kernel è interpretare questi bit come permessi; in particolare, quando un processo tenta un'operazione su un file, il kernel deve determinare, dato all'utente e ai gruppi su cui è in esecuzione il processo, i bit di autorizzazione del file e l'operazione richiesta, se consentire l'operazione. (Le "autorizzazioni per i file Unix" in genere includono anche bit setuid e setgid , che non sono autorizzazioni strettamente parlando).

I moderni sistemi unix possono supportare altre forme di autorizzazioni. La maggior parte dei moderni sistemi unix (Solaris, Linux, * BSD) supportano elenchi di controllo di accesso che consentono di assegnare autorizzazioni di lettura / scrittura / esecuzione per più di un utente e più di un gruppo per ciascun file. Il filesystem deve avere spazio per memorizzare queste informazioni extra, e il kernel deve includere il codice per cercare e usare queste informazioni. Ext2, reiserfs, btrfs, zfs e la maggior parte dei moderni formati di file system unix definiscono un posto dove archiviare tali ACL. Mac OS X supporta un diverso set di ACL che include autorizzazioni non tradizionali come "append" e "create subdirectory"; il formato del file system HFS + li supporta. Se montate un volume HFS + su Linux, questi ACL non verranno applicati poiché il kernel Linux non li supporta.

Al contrario, ci sono sistemi operativi e filesystem che non supportano il controllo degli accessi. Ad esempio, FAT e le varianti sono state progettate per sistemi operativi per utente singolo e supporti rimovibili e le sue autorizzazioni sono limitate a lettura / lettura-scrittura e nascosto / visibile. Queste sono le autorizzazioni imposte da DOS . Se monti un filesystem ext2 su DOS, non imporrà le autorizzazioni ext2. Al contrario, se si accede a un filesystem FAT su Linux, tutti i file avranno le stesse autorizzazioni.

Le versioni successive di Windows hanno aggiunto il supporto per più tipi di autorizzazioni. Il file system NTFS è stato esteso per archiviare quelle autorizzazioni extra. Se accedi a un filesystem con le autorizzazioni più recenti su un sistema operativo precedente, il sistema operativo non sarà a conoscenza di queste autorizzazioni più recenti e quindi non le imporrà. Al contrario, se si accede a un file system precedente con un sistema operativo più recente, non avrà le nuove autorizzazioni e spetta al sistema operativo fornire fallback sensibili.


"Il compito del kernel è interpretare questi bit come permessi; in particolare, quando un processo tenta un'operazione su un file, il kernel deve determinare [...]" Ciò non significa che in teoria un kernel potrebbe essere modificato ignorare tutto ciò e leggere comunque i dati? (Una specie di accesso diretto al disco) O c'è qualcos'altro che lo impedisce?
Overmind

@Overmind Certo. Il codice del kernel ha accesso a tutto. Il disco non sa nulla di processi, utenti o autorizzazioni. Il kernel dice al disco "dammi il blocco 232876" e il disco risponde con il contenuto del blocco. Determinare quali processi possono accedere a quali blocchi (o quali parti di blocchi) è il lavoro del kernel.
Gilles 'SO- smetti di essere malvagio' il

4

Per poter utilizzare determinati diritti sia il kernel che il filesystem devono supportarli. Se il filesystem non supporta nemmeno i diritti di accesso più elementari, il codice del filesystem deve falsarli (ad es. Con l'opzione mount umaskper vfat).


3

La mia comprensione è che il kernel implementa gli inode in VFS. gli inode contengono informazioni di autorizzazione (UNIX e ACL) insieme ad altri metadati e il filesystem può estendere l'inode per aggiungere funzionalità. Se sei interessato, leggi su Linux VFS - roba gory se non sei un programmatore di sistemi.


1

Come regola generale, i permessi dei file e gli attributi dei file sono memorizzati nel filesistem [il modo esatto dipende dal filesystem in questione (ext3 / 4, riser, NTFS ecc ...)] ma sono usati dal kernel, normalmente per imporre qualcosa.

Ad esempio Il kernel in * nix come il sistema è "la cosa" che conosce il significato dell'UID associato a un file / directory. Un UID di file è semplicemente un numero memorizzato a fianco di un file certan dal filesystem ma la "traduzione" di tale numero a un determinato utente (e i diritti corrispondenti a fare qualcosa o no) è fatta dal kernel.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.