2014-07-07 17 views
9

Sto lavorando al progetto accademico, una parte della quale sta applicando la crittografia trasparente (AES-CTR) ai file Ext4 selezionati memorizzati sul disco (posso già contrassegnarli come crittografati usando nuovo ioctl ecc.).Modifica dati scritti su disco dal filesystem Ext4

Per fare ciò, ho bisogno di trovare il punto migliore per chiamare il mio algoritmo sui dati, mentre viene letto o scritto dal/sul dispositivo. A causa di una grande quantità di funzionalità (come journal, inline, o-direct, extent) fornite dal filesystem, sto faticando da qualche giorno per trovare la soluzione adeguata - ho bisogno di operare sui dati grezzi, dato che sono memorizzati in i datablocks.

ho avuto alcune idee in mente, uno era di agganciare in qualche parte sul CALLPATH da sys_read(...) e sys_write(...), più precisamente ext4_file_write(...) e generic_file_aio_read(...) -, ma che non avrebbe funzionato con mmap, e probabilmente non è la strada da percorrere. Un altro approccio sarebbe quello di farlo attraverso ext4_writepages(...) e ext4_readpages(...) (ed è callback, dato che è asincrono), quando le pagine di memoria vengono scritte su disco.

Perché non è la versione di produzione, è solo una dimostrazione del concetto: posso disattivare alcune funzionalità di Ext4 per semplificare l'operazione. Durante l'utilizzo dell'algoritmo, devo essere in grado di accedere agli xargs dell'inode (dove è memorizzato l'id della chiave) e anche di essere a conoscenza del numero di blocco per generare il vettore iniziale utilizzato nella criptazione [en/de]. Hai qualche idea e/o suggerimento riguardo a quel problema?

risposta

2

Ci sono molte alternative per progettare la soluzione per questo.

Un modo potrebbe essere quello di utilizzare Wrapfs (un file system impilabile) che consente di intercettare la chiamata da VFS al file system fisico sottostante. È possibile scegliere di aggiungere il proprio hook prima o dopo la chiamata del file system sottostante.

I vantaggi di fare in questo modo sarebbe. 1. Il tuo codice può funzionare perfettamente con qualsiasi filesystem fisico. 2. Non è necessario modificare/modificare il codice del file system originale. 3. Avrai un modulo completamente diverso.

Quindi la gerarchia di richiamo sarà simile, Application < => VFS < => Wrapfs < => FS fisico (ext3/ext4/etc)

+0

Grazie mille per la risposta! Questo sembra essere un buon approccio, tuttavia non sono sicuro se accettabile, in quanto si trattava piuttosto di modificare Ext4 stesso - ciò che ovviamente rende le cose molto più difficili ... –

+0

Con l'approccio che ho menzionato non è necessario modificare EXT4 in uscita implementazione, ed è la cosa bella dell'uso di wrapfs. Per favore fatemi sapere se avete bisogno di ulteriori chiarimenti su questo. – Mavla

0

FUSE (Filesystems in userspace) è una buona alternativa, perché è più facile implementare nello spazio utente piuttosto che nello spazio del kernel. Hai una vasta gamma di lingue tra cui scegliere. Questo approccio sarà molto più facile.

+0

Grazie, questo sembra un approccio interessante. Comunque il punto principale era farlo nello spazio del kernel, estendendo fs ext4, come ho sottolineato. Era parte del clasess del Sistema Operativo. –

+0

Penso che Mavla stia cercando di dire che dovresti riconsiderare la modifica delle specifiche. Se il tuo insegnante ha detto che vuole che tu modifichi Ext4, potrebbe essere stato un suggerimento, non un requisito. Spesso non ho avuto problemi a negoziare cambiamenti all'università. – ArekBulski