La Red de Conocimientos Pedagógicos - Currículum vitae - CÓMO de cifrado de Linux Cómo crear un sistema de archivos cifrados

CÓMO de cifrado de Linux Cómo crear un sistema de archivos cifrados

Configuración de particiones

Su disco duro (hda) debe contener al menos tres particiones:

hda1: esta pequeña partición no cifrada debe requerir una contraseña para poder montarse. el sistema de archivos raíz cifrado

hda2: esta partición debe contener su sistema de archivos raíz cifrado

hda3: esta partición es su sistema GNU/Linux actual

p>

En este momento, hda1 y hda2 no se utilizan. hda3 es la distribución de Linux que está instalando actualmente; /usr y /boot no se pueden montar en otras particiones.

La distribución de tu partición puede verse así:

# fdisk -l /dev/hda

Disco /dev/hda: 255 cabezas, 63 sectores, 2432 cilindros

Unidades = cilindros de 16065 * 512 bytes

Dispositivo Arranque Inicio Fin Bloques Id Sistema

/dev/hda1 1 1 8001 83 Linux

p>

/dev/hda2 2 263 2104515 83 Linux

/dev/hda3 264 525 2104515 83 Linux

/dev/hda4 526 2047 12225465 83 Linux

Instalar Linux-2.4.27

Hay dos opciones principales para agregar soporte de cifrado loopback al kernel: cryptoloop y loop-AES. Este artículo se basa en el esquema loop-AES porque se caracteriza por una implementación muy rápida y muy optimizada de Rijndael en lenguaje ensamblador. Si tienes una CPU IA-32 (x86), te dará el máximo rendimiento.

Además, existen algunas preocupaciones de seguridad sobre cryptoloop.

Primero, descargue y descomprima el paquete loop-AES:

wget /loop-AES/loop-AES-v2.2b. .bz2

tar -xvjf loop-AES-v2.2b.tar.bz2

Luego descargue el código fuente del kernel y los parches y parchee el código fuente del kernel:

wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.27.tar.bz2

tar -xvjf linux-2.4.27.tar . bz2

cd linux-2.4.27

rm include/linux/loop.h drivers/block/loop.c

parche -Np1 -i . /loop-AES-v2.2b/kernel-2.4.27.diff

Establecer mapa de teclas:

dumpkeys | loadkeys -m - > drivers/char/defkeymap.c

A continuación, configure su kernel y asegúrese de haber seleccionado las siguientes opciones:

make menuconfig

Bloquear dispositivos --->

<* > Compatibilidad con dispositivos de bucle invertido

[*] Compatibilidad con dispositivos de bucle cifrado AES (NUEVO)

<*> Compatibilidad con discos RAM

(4096) Tamaño de disco RAM predeterminado ( NUEVO)

[*] Compatibilidad con disco RAM inicial (initrd)

Sistemas de archivos --->

<*> Compatibilidad con sistema de archivos de diario Ext3

<*> Segundo soporte extendido para fs

(nota importante: no habilite el soporte del sistema de archivos /dev)

Compile e instale el kernel:

p>

make dep bzImage

make module module_install

cp arch/i386/boot/bzImage /boot/vmlinuz

Si tu lanzador es grub , actualice su archivo /boot/grub/menu.lst o /boot/grub/grub.conf:

cat > /boot/grub/menu.lst << EOF

default 0

tiempo de espera 10

color verde/negro verde claro/negro

título Linux

raíz (hd0,2)

kernel /boot/vmlinuz ro root=/dev/hda3

EOF

Si el iniciador es lilo, actualice /etc/lilo.conf y ejecute lilo :

cat > /etc/lilo.conf << EOF

lb

a32

boot=/dev/hda

prompt

timeout=100

image=/boot/vmlinuz

label=Linux

solo lectura

root=/dev/hda3

EOF

lilo

Ahora reinicie su sistema.

Instala Linux 2.6.8.1

Procede como se mencionó anteriormente, usando el parche loop-aes'kernel-2.6.8.1.diff. Tenga en cuenta que necesita instalar el paquete module-init-tools para que su sistema admita módulos.

Instalar util-linux-2.12b

Este programa losetup está incluido en el paquete util-linux-2.12b. Debe parchearse y recompilarse para admitir el cifrado. Descarga, descomprime y parchea util-linux:

wget http://ftp.kernel.org/pub/linux/utils/util-linux/util-linux-2.12b.tar.bz2

tar -xvjf util-linux-2.12b.tar.bz2

cd util-linux-2.12b

parche -Np1 -i ../loop -AES- v2.2b/util-linux-2.12c.diff

Utilice una contraseña de menos de 20 caracteres, escriba:

CFLAGS="-O2 -DLOOP_PASSWORD_MIN_LENGTH=8" ;

La seguridad puede ser tu principal preocupación. Para hacer esto, no haga que su contraseña tenga menos de 20 caracteres. La confidencialidad de los datos no es gratuita, debes 'pagar' para utilizar contraseñas largas.

Utilice el usuario root para compilar e instalar el programa losetup:

./configure && make lib mount

mv -f /sbin/losetup /sbin/losetup ~

p>

rm -f /usr/share/man/man8/losetup.8*

montaje de cd

gzip losetup.8

cp losetup /sbin

cp losetup.8.gz /usr/share/man/man8/

Crear un sistema de archivos raíz cifrado

Llene la partición de destino con datos aleatorios:

shred -n 1 -v /dev/hda2

Instale el dispositivo de loopback cifrado:

losetup -e aes256 -S xxxxxx /dev/loop0 /dev /hda2

Para evitar ataques de diccionario más rápidos, se recomienda agregar la opción -S xxxxxx, "xxxxxx" es su semilla seleccionada aleatoriamente (por ejemplo, puede elegir "gPk4lA"). Además, para evitar problemas de asignación de teclas al inicio, no utilice caracteres que no sean ASCII (dialectos, etc.) en las contraseñas. El sitio Diceware proporciona una manera sencilla de crear contraseñas seguras y fáciles de recordar.

Ahora comienza a crear el sistema de archivos ext3:

mke2fs -j /dev/loop0

Comprueba que la contraseña que has introducido es correcta:

losetup -d /dev/loop0

losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2

mkdir /mnt/efs

mount /dev/loop0 /mnt/efs

Puedes comparar datos cifrados y no cifrados:

xxd /dev/hda2 less

xxd / dev/loop0 | menos

Ahora es el momento de instalar su sistema Linux cifrado. Si está utilizando una distribución GNU/Linux (como Debian, Slackware, Gentoo, Mandrake, RedHat/Fedora, SuSE, etc.), ejecute el siguiente comando:

cp -avx / /mnt/efs

Si estás usando el manual Linux From Scratch, configúralo como se describe en el manual de lfs, pero haz las siguientes modificaciones:

Capítulo 6 - Instalación de util-linux:

Aplique el parche loop-AES después de descomprimir el código fuente.

Capítulo 8 - Cómo hacer que el sistema LFS sea arrancable:

Apunta a nuestro siguiente capítulo (creación de un dispositivo de arranque).

------------------------------------------- ----- -------------

Crear dispositivo de arranque

Crear disco ram

Al principio, primer uso el comando chroot para ingresar Cifre la partición y cree un punto de montaje para el dispositivo de arranque:

chroot /mnt/efs

mkdir /loader

Luego cree un disco ram inicial (initrd), que se utilizará más adelante:

cd

dd if=/dev/zero of=initrd bs=1k count=4096

mke2fs -F initrd

p>

mkdir ramdisk

mount -o loop initrd ramdisk

Si usa grsecurity, puede recibir un archivo ". Mensaje de error "Permiso denegado"; si es así, deberá ejecutar el comando mount antes del comando chroot.

Cree la organización del directorio del sistema de archivos y copie los archivos necesarios en ella:

mkdir ramdisk/{bin,dev,lib,mnt,sbin}

cp /bin/{bash,mount} ramdisk/bin/

ln -s bash ramdisk/bin/sh

mknod -m 600 ramdisk/dev/console c 5 1

p>

mknod -m 600 ramdisk/dev/hda2 b 3 2

mknod -m 600 ramdisk/dev/loop0 b 7 0

cp /lib/ {ld- linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/

cp /lib/{libncurses.so.5,libtermcap.so.2} ramdisk /lib/

cp /sbin/{losetup,pivot_root} ramdisk/sbin/

Si ve algo como "/lib/libncurses.so.5: No existe tal archivo o directorio "," /lib/libtermcap.so.2: No existe tal archivo o directorio", esto es normal. bash sólo requiere una de estas dos bibliotecas. Puede comprobar cuál necesita realmente:

ldd /bin/bash

Compile el programa de suspensión, lo que evitará que la solicitud de contraseña se inunde con mensajes del kernel (por ejemplo, cuando usb cuando el dispositivo está registrado).

cat > sleep.c << "EOF"

#include

#include

int main( int argc, char *argv[] )

{

if( argc == 2 )

dormir( atoi( argv[1 ] ) );

return( 0

}

EOF

gcc -s sleep.c -o ramdisk/bin /sleep

rm sleep.c

Crea un script de inicialización (no olvides reemplazar la semilla "xxxxxx" que seleccionaste antes):

cat > ramdisk/ sbin/init << "EOF"

#!/bin/sh

/bin/sleep 3

/sbin/losetup -e aes256 - S xxxxxx /dev/loop0 /dev/hda2

/bin/mount -r -n -t text3 /dev/loop0 /mnt

mientras [ $? -ne 0 ]

do

/sbin/losetup -d /dev/loop0

/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2

/bin/mount -r -n -t text3 /dev/loop0 /mnt

hecho

cd /mnt

/sbin /pivot_root

exec /usr/sbin/chroot

EOF

chmod 755 ramdisk/sbin/init

Desmonte el dispositivo loopback y comprima el initrd:

umount -d ramdisk

rmdir ramdisk

gzip initrd

mv initrd. gz /boot/

Arranque desde CD-ROM

Recomiendo encarecidamente que inicie su sistema desde un medio de sólo lectura, como un CD de arranque.

Descargar y descomprimir syslinux:

wget http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.10.tar.bz2

tar -xvjf syslinux-2.10.tar.bz2

Configurar isolinux:

mkdir bootcd

cp /boot/{vmlinuz,initrd.gz } syslinux-2.10/isolinux.bin bootcd

echo "DEFAULT /vmlinuz initrd=initrd.gz ro root=/dev/ram0" \

> bootcd/isolinux.cfg p>

Grabar la imagen iso en un disco de arranque:

mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \

-no- emul -boot -boot-load-size 4 -boot-info-table \

-J -hide-rr-moved -R bootcd/

cdrecord -dev 0,0, 0 -speed 4 -v bootcd.iso

rm -rf bootcd{,.iso}

Arranque desde el disco duro

Cuando pierde su CD de arranque, la partición de arranque puede resultar útil.

Recuerde que hda1 es una partición grabable, por lo que no es muy confiable. ¡Úsela sólo cuando se encuentre con una emergencia!

Crea y monta el sistema de archivos ext2:

dd if=/dev/zero of=/dev/hda1 bs=8192

mke2fs /dev/hda1

montar /dev/hda1 /loader

Copiar el kernel y el disco ram inicial:

cp /boot/{vmlinuz,initrd.gz} /loader

Si estás usando grub:

mkdir /loader/boot

cp -av /boot/grub /loader/boot/

cat > /loader/boot/grub/menu.lst << EOF

predeterminado 0

tiempo de espera 10

color verde/negro verde claro/negro

título Linux

raíz (hd0,0)

kernel /vmlinuz ro root=/dev/ram0

initrd /initrd.gz

EOF

grub-install --root-directory=/loader /dev/hda

umount /loader

Si usas lilo :

mkdir /loader/{boot,dev,etc}

cp /boot/boot.b /loader/boot/

mknod -m 600 / cargador/dev/hda b 3 0

mknod -m 600 /loader/dev/hda1 b 3 1

mknod -m 600 /loader/dev/ram0 b 1 0

p>

cat > /loader/etc/lilo.conf << EOF

lba32

boot=/dev/hda

mensaje

timeout=100

image=/vmlinuz

label=Linux

initrd=/initrd.gz

solo lectura

root=/dev/ram0

EOF

lilo -r /loader

umount /loader

El último paso aún es mantener el estado de chroot, modificar /etc/fstab para agregar las siguientes opciones:

/dev/loop0 / ext3 defaults 0 1

Elimine /etc/mtab y elimínelo del chroot quit. Finalmente, ejecute el comando "umount -d /mnt/efs" y reinicie el sistema. Si algo sale mal, aún puede iniciar su partición no cifrada usando "Linux root=/dev/hda3" en el indicador de LILO.

Si todo va bien, puedes volver a particionar tu disco duro y proceder a cifrar tu partición hda3 o hda4.

En el siguiente script, asumimos que hda3 montará el dispositivo de intercambio y hda4 montará el directorio /home. Primero debe inicializar estas dos particiones:

shred -n 1 -v /dev/hda3

shred -n 1 -v /dev/hda3

p>

triturar -n 1 -v /dev/hda3

p>

triturar -n 1 -v /dev/hda4

losetup -e aes256 -S xxxxxx /dev /loop1 /dev/hda3

losetup -e aes256 -S xxxxxx /dev/loop2 /dev/hda4

mkswap /dev/loop1

mke2fs -j /dev/loop2

Luego créelo en el directorio de inicio del sistema. Un script y actualice /etc/fstab:

cat > /etc/init.d/loop << "EOF"

#!/bin/sh

if [ "`/usr/bin/md5sum /dev/hda1`" != \

"5671cebdb3bed87c3b3c345f0101d016 /dev /hda1" ]

luego

echo -n "¡ADVERTENCIA! La verificación de integridad de hda1 FALLÓ - presione enter."

leer

fi

echo "primera contraseña elegida arriba" | \

/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop1 /dev/hda3

echo "segunda contraseña elegida arriba" | \

/sbin /losetup -p 0 -e aes256 -S xxxxxx /dev/loop2 /dev/hda4

/sbin/swapon / dev/loop1

para i en `seq 0 63`

hacer

echo -n -e "\33[10;10]\33[11 ;10]" > /dev/tty$i

hecho

EOF

chmod 700 /etc/init.d/loop

ln -s ../init.d/loop /etc/rcS.d/ S00loop

vi /etc/fstab

...

/ dev/loop2 /home ext3 valor predeterminado 0 2