Loop_aes spialaspia@inventati.org v0.01, 08/05/2002 Abstract File system cifrato senza patchare il kernel Table of Contents 1 Panoramica ed utilizzo 2 Istruzioni per costruire il modulo loop.o 3 Esempi 3.1 Esempio 1 3.2 Esempio 2 1 Panoramica ed utilizzo L'aes e' il nuovo standard crittografico che rimpiazza il des, ormai obsoleto e piu' volte violato. Il vincitore del concorso indetto per la scelta di un algortimo e' stato il . L'idea su cui si basa questo tipo di file system cifrato e' del tutto simile a quella sviluppata dal progetto crypto api, per questo per un' introduzione un poco piu' teorica sull'argomento si rimanda all'articolo dedicato a quest'ultimo. La principale differenza tra i due consiste in dove il meccanismo viene attivato. Il primo introduce nel kernel una serie di API crittografiche di piu' ampio respiro e riutilizzabili, il secondo si limita a creare un modulo a partire da una versione di loop.c patchata per includere un livello crittografico. Entrambi richiedono di applicare una patch alle utilities di sistema mount, umount, losetup. Il file README fornito con la patch e' una trattazione piuttosto esaustiva sull'installazione e l'utilizzo del modulo. Qui di seguito c'e' un adattamento delle parti piu' salienti del documento tradotte in italiano. Il sito di riferimento del progetto e' http://loop-aes.sourceforge.net/ 2 Istruzioni per costruire il modulo loop.o Prima di provare a compialre il modulo e' necessario configurare, compilare ed installare il nuovo kernel di modo che CONFIG_MODULES=y e CONFIG_BLK_DEV_LOOP=n. Inoltre CONFIG_KMOD=y sarebbe una buona idea, ma non e' necessario, il kernel 2.0 non possiede CONFIG_KMOD, ma e' possibile settare CONFIG_KERNELD=y. E' importante configurare il kernel perche' non il loop device non funzioni neppure come modulo. Dopo aver ricompilato e rinstallato il nuovo kernel, non bisogna effettuare il clean dei sorgenti, ne' rinominare la directory del kernel. Queste operazioni sono necessarie per una serie di motivi: * per disabilitare il loop driver dal proprio kernel. * perche' i sorgenti corrispondano al kernel in esecuzione. * perche' il .config corrisponda al kernel in esecuzione. Queste premesse sono necessarie perche' il codice compili correttamente, se si sta semplicemente eseguendo un upgrade del modulo, non e' necessario pero' riniziare da capo, bastera' rimuovere il vecchio modulo dal kernel con il comando rmmod. La compilazione e l'installazione avvengono secondo i seguenti passi: il Makefile copia il file loop.c dai sorgenti del kernel alla directory del loop_aes, quindi applica una patch diversa a seconda della versione del kernel. Se il patching va a buon fine tutto viene compilato e linkato per creare il nuovo loop.o ed installato in /lib/modules/`uname -r`/block. Il supporto per l'AES e' dunque incluso nel modulo e sara' disponibile ogni qualvolta loop.o verra' caricato. Non e' necessario modificare nulla in /etc/modules.conf. Per compilare ed installare e' necessario porsi nella directory dei sorgenti ed eseguire make clean make Il Makefile tentera' di trovare automaticamente la directory con i sorgenti, provera' is eguenti percorsi in quest'ordine /lib/modules/`uname -r`/build /usr/src/linux /usr/src/linux-`uname -r` /usr/src/kernel-source-`uname -r` e' possibile forzare una directory in particolare specificando sulla linea di comando: make LINUX_SOURCE=/usr/src/linux-2.2.20aa1 Per creare un modulo nuovo per un kernel diverso da quello attualmente in uso e' sempre necessario specificare la directory dei sorgenti in questa maniera. Il Makefile tenta inoltre di accertare il tipo del processore automaticamente. Se di classe Pentium usera' l'implementazione assembler dell'AES, per i 386,486 e non x86 verra' utilizzato sempre la versione in C. Se si intende disabilitare definitivamente l'utilizzo della versione assembler e' necessario spedificare PENTIUM_ASM=n sulla linea di comando. Istruzioni per generare mount, umount e losetup Perche' il nuovo loop.o sia utilizzabile per la costruzione di file system cifrati e' necessario applicare due patch ai programmi mount, umount ed losetup. Questi programmi sono contenuti nel pacchetto util-linux scaricabile presso ftp://ftp.kernel.org/pub/linux/utils/util-linux/ Segue la sequenza di comandi da dare come root per effettuare queste operazioni: bzip2 -d -c util-linux-2.11q.tar.bz2 | tar xvf - cd util-linux-2.11q patch -p1 <../util-linux-2.11q-1.diff patch -p1 <../util-linux-2.11q-2.diff ./configure make SUBDIRS="lib mount" cd mount install -m 4755 -o root mount umount /bin install -m 755 losetup swapon /sbin rm -f /sbin/swapoff && ( cd /sbin && ln -s swapon swapoff ) rm -f /usr/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz install -m 644 mount.8 umount.8 losetup.8 swapon.8 swapoff.8 /usr/man/man8 rm -f /usr/man/man5/fstab.5.gz install -m 644 fstab.5 /usr/man/man5 mandb cd ../.. Testare il risultato make tests effettuera' una serie di test sul corretto funzionamento del modulo. Se appare a video "*** Test results ok ***" allora tutto e' andato bene, diversamente e' meglio non utlizzare il driver. Anche se il supporto per il /dev/loop continua a funzionare potrebbe essere necessario ricompilare il modulo a partire dai sorgenti del kernel. 3 Esempi Seguono una serie di esempi ripresi dalla documentazione originale per illustrare i possibili utilizzi del modulo. In generale prima di iniziare e' opportuno leggere le manpages di mount ed losetup. 3.1 Esempio 1 Si illustrera' come creare un filesystem ext2 su una partizione cifrata, per l'esempio si usera un'ipotetica partizione /dev/hdx666 ed una altrettanto fittizia /mnt/hdx666 directory come mount point. Il comando "losetup -e" richiede una password, utilizzata anche per accedere alla partizione cifrata: e' dunque fondamentale non dimenticarla. losetup -e AES128 /dev/loop0 /dev/hda666 mkfs -t ext2 /dev/loop0 losetup -d /dev/loop0 mkdir /mnt666 Aggiungendo poi questa riga ad /etc/fstab /dev/hda666 /mnt666 ext2 defaults,noauto,loop=/dev/loop0,encryption=AES128 0 0 sara' possibile effettuare il mount della partizione semplicemente con il comando mount /mnt666 per l'umount invece umount /mnt666 Oppure snza modificare /etc/fstab, per mount e umount: mount -t ext2 /dev/hda666 /mnt666 -o loop=/dev/loop0,encryption=AES128 umount /mnt666 In caso si renda necessario l'utilizzo di fsck per il controllo del file system: losetup -e AES128 /dev/loop0 /dev/hda666 fsck -t ext2 -f -y /dev/loop0 mount -t ext2 /dev/loop0 /mnt666 umount /mnt666 losetup -d /dev/loop0 3.2 Esempio 2 Si costruira' un file system cifrato a partire da un normale file di 5M usato come contenitore, /file666 ed una directory di comodo /mnt666, per il mount. dd if=/dev/zero of=/file666 bs=4k count=1280 losetup -e AES128 /dev/loop1 /file666 mkfs -t ext2 /dev/loop1 losetup -d /dev/loop1 mkdir /mnt666 Aggiungendo questa riga ad /etc/fstab sara' possbile effettuare il mount come descritto nell'esempio 1. /file666 /mnt666 ext2 defaults,noauto,loop=/dev/loop1,encryption=AES128 0 0