Шифрование дисковых разделов в Linux

В статье рассматривается один из способов криптографической защиты файловой системы и раздела подкачки

[dmitrio]

Шифрование дисковых разделов в Linux

По материалам http://forums.gentoo.org/viewtopic.php?t=31363

Подготовка

  1. Рабочая система с отдельным разделом /boot. Если система не работает на обычной файловой системе, то шифрование ничего не исправит.
  2. Исходные коды loop-AES, скачать можно здесь http://sourceforge.net/projects/loop-aes/ Прочитайте loop-AES README, чтобы знать, что делать, если что-нибудь пойдет неправильно.
  3. Исходные коды util-linux-2.11y. Получить можно на любом сайте, распространяющем ядро Linux, например ftp://ftp.kernel.org/pub/utils/util-linux.
  4. CD с Knoppix или Knoppix lite Получить можно на http://www.knoppix.net Необходимо убедиться, что вы можете загрузится с этого диска. В knoppix уже есть поддержка loop-AES.
  5. !!!СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ВАШИХ ДАННЫХ!!!

Установка

  1. Пересоберите ядро с установками:
       CONFIG_MODULES=y
       CONFIG_BLK_DEV_LOOP=n ([y] or [m] НЕ РАБОТАЕТ),
       CONFIG_BLK_DEV_RAM=y,
       CONFIG_BLK_DEV_RAM_SIZE=4096,
       CONFIG_BLK_DEV_INITRD=y,
       CONFIG_MINIX_FS=Y (это потому, что ramdisk is minix),
       CONFIG_DEVFS=Y (dev file system support (EXPERIMENTAL)=Y)
       CONFIG_PROC_FS=Y
       (остальное - по желанию)
    
    Файловая система должна быть включена в ядре как [Y] (а не [M],-прим.ред.), потому что ядро не сможет получить доступа к модулям с зашифрованной файловой системы до тех пор, пока не будет знать ключ расшифровки. Остальное можно оставить в виде модулей (по желанию)
  2. Перейдите в каталог /usr/src и распакуйте loop-AES.хххх.tar (loop-AES-v1.7a.tar.bz2 в нашем случае) Перейдите в новообразованный каталог и запустите make. В результате будут собраны драйвера к loop device, которые знают как шифровать/расшифровать файловую систему
  3. Скопируйте util-linux-2.11y.tar (следите за совпадением diff от loop-AES и util-linux) в каталог loop-AES и распакуйте, затем переместитесь во вновь созданный каталог (cd util-linux-2.11y) ПОДМОНТИРУЙТЕ ВАШУ ЗАГРУЗОЧНУЮ ПАРТИЦИЮ К /BOOT теперь несколько команд
    patch -p1 <../util-linux-2.11y.diff
    #~~~~~~~~~~~~~~Пример~~~~~~~~~~~~~~~~~~~~~~~~~~
    #patch -p1 <../util-linux-2.11y.diff
    #patching file mount/Makefile
    #patching file mount/aes.c
    #patching file mount/aes.h
    #patching file mount/lomount.c
    #patching file mount/losetup.8
    #patching file mount/loumount.c
    #patching file mount/mount.8
    #patching file mount/mount.c
    #patching file mount/rmd160.c
    #patching file mount/rmd160.h
    #patching file mount/sha512.c
    #patching file mount/sha512.h
    #patching file mount/swapon.8
    #patching file mount/swapon.c
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    export CFLAGS=-O2
    export LDFLAGS='-static -s'
    ./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/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz
    install -m 644 mount.8 umount.8 losetup.8 /usr/share/man/man8
    install -m 644 swapon.8 swapoff.8 /usr/share/man/man8
    rm -f /usr/share/man/man5/fstab.5.gz
    install -m 644 fstab.5 /usr/share/man/man5
    cp -p /lib/modules/`uname -r`/block/loop.o /boot/loop-`uname -r`.o
    
  4. В каталоге loop-AES отредактируйте переменные в файле build-initrd.sh
    BOOTDEV
    BOOTTYPE
    CRYPTROOT
    ROOTYPE
    CIPHERTYPE
    USEDEVFS=1 (включена поддержка devfs в ядре )
    USEPIVOT=1
    
    с необходимыми значениями, (остальное оставьте по умолчанию)
       BOOTDEV=/dev/ide/host2/bus0/target0/lun0/part1 (это будет /dev/hde1)
       CRYPTROOT=/dev/ide/host0/bus0/target0/lun0/part10 (это будет /dev/hda10)
    
    (посмотреть можно командой "ls -aR /dev/ide/"), затем выполните
          sh build-initrd
    
    этой командой создается ramdisk, чтобы потом можно было присоеденить зашифрованную систему при загрузке и передать пароль ядру
    #~~~~~~~~Пример~~~~~~~~~~~~~~~~~
    #build-initrd.sh
    #15+0 входных записей
    #15+0 выходных записей
    #32 inodes
    #15 blocks
    #Firstdatazone=5 (5)
    #Zonesize=1024
    #Maxsize=268966912
    #
    #Файловая система           1K-блоков    Испол Доступно Исп%Подключено к
    #/usr/src/loop-AES-v1.7a/tmp-i-13211  10 7 3  70% /usr/src/loop-AES-v1.7a/tmp-d-13211
    #-rw-------    1 root     root         1888 2003-04-17 02:33 /boot/initrd.gz
    #Copying /sbin/losetup to /boot
    #Copying /sbin/insmod to /boot
    #Copying /lib/libc.so.6 to /boot
    #Copying /lib/ld-linux.so.2 to /boot
    #Done.
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
  5. Загрузитесь с Knoppix CD с параметром knoppix 2 для получения root-терминала (мы не грузим то, что не надо и ускоряем процесс). После этого дайте команду на исполнение:
          losetup -e AES256 -T /dev/loop0 /dev/hda2 (здесь указать вашу корневую партицию)
    
    и наберите вашу парольную фразу (и, желательно, не забудьте ее!)
          dd if=/dev/hda2 of=/dev/loop0 bs=64k conv=notrunc
    
    (рездел должен быть неподмонтированным, копирование займет немного времени, прямо пропорционально рамеру раздела)
    #~~~~~~Пример~~~~~~~~~~~~~
    # использовали time для замера времени
    #
    #time dd if=/dev/hda6 of=/dev/loop0 bs=64k conv=notrunc
    #96012+1 входных записей
    #96012+1 выходных записей
    #
    #real    9m56.848s
    #user    0m0.610s
    #sys     2m4.030s
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
  6. Затем создайте директорию
         mkdir /mnt/gentoo
         mkdir /mnt/gentoo/boot
    
    подмонтируйте резделы
         mount /dev/hda2 /mnt/gentoo
         mount /dev/hda1 /mnt/gentoo/boot
    
    теперь смените корневой раздел
         chroot /mnt/gentoo /bin/bash
    
    отредактируйте fstab, так чтобы корневой раздел указывал на /dev/loop5 вместо /dev/hdaENCRYPTED
  7. Перейдите в раздел /boot/grub и добавьте в grub.conf строки:
         title=Encrypted
         root (hd0,0)
         kernel /boot/bzImage-crypt root=/dev/ram0 init=/linuxrc
         initrd /boot/initrd.gz
    
       Note: init=/linuxrc, not init=/boot/linuxrc.
    
  8. Перезагрузитесь (не забудьте извлечь диск с Knoppix) В GRUB выберете Encrypted Root и введите парольную фразу по запросу загрузчика
  9. Если что-то не работает, прочитайте файл README в loop-AES, загрузитесь с Knoppix CD и переделайте losetup (пункт 6). dd if=/dev/hda2 of=/dev/loop0 bs=64k conv=notrun ПОВТОРЯТЬ НЕ НАДО
Для расшифровки файловой системы надо
  1. Загрузиться с Knoppix CD
  2. losetup -e AES256 /dev/loop0 /dev/hdaENCRYPTED (ваш раздел root)
    Для проверки можно выполнить
           mount /dev/loop0 /mnt/222 (подмонтировать директорию)
           ls /mnt/222 (должны увидеть свои файлы)
           umount /mnt/222 (отмонтировать директорию)
    
  3. dd if=/dev/loop0 of=/dev/hdaENCRYPTED bs=64k conv=notrunc

Как зашифровать swap

  1. Отключите swap-раздел
         swapoff -a
    
  2. измените значения в fstab, как это описано в loop-AES readme
          /dev/hdaSWAP   none   swap   sw,loop=/dev/loop6,encryption=AES128  0   0
    
  3. losetup -e AES256 /dev/loop0 /dev/hdaSWAP
    (потребуется указать пароль длиной 20 и более символов)

  4. Зашифруйте физический раздел
       
          dd if=/dev/hdaSWAP of=/dev/loop6 bs=64k conv=notrunc
    
  5. отключите swap от loop
          losetup -d /dev/loop0
    
  6. активируйтем swap (автоматически будет подключатся к указанному loop device)
          swapon -a
    
  7. Просмотрите swap - в начале будет идти масса нулей
          od -xa /dev/hdaSWAP | less
    

Оригинал: http://www.linuxshop.ru/forum/viewtopic.php?p=4190#4190
Статья взята с сайта OpenNet.

[ опубликовано 15/03/2004 ]

dmitrio - Шифрование дисковых разделов в Linux   Версия для печати