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) p>
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> 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 p >
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 p>
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>
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