FreeBSD crypt disk via GBDE

Во FreeBSD есть замечательная подсистема GEOM, в рамках которой реализована фича, которая называется GEOM based disk encryption или GBDE. GBDE позволяет создавать шифрованные разделы, а утилита mdconfig позволяет создавать разделы, которые физичeски распологаются в файле.

Итак:

cd ~
dd if=/dev/zero of=.crypt bs=512 count=скока вешать в граммах?
mdconfig -a -t vnode -u 1 -f .crypt
gbde init /dev/md1
gbde attach /dev/md1
newfs /dev/md1.bde
mount /dev/md1.bde /mnt

Готово! Теперь у нас есть шифрованный диск. Но! Нет удобного способа его монтирования/размонтирование/резервного копирования, поэтому … Скрипт в студию!

Отмаз: Это болванка скрипта, обработка ошибочных ситуаций практически не реализована. Так что — AS IS. И еще. Я использую KDE и поэтому взаимодействие с пользователем (тоесть со мной) скрипт осуществляет через программу kdialog. У вас ее может не быть и поэтому, можно использовать утилиты вроде dialog, ssh-askpass и другие сходные по назначению. Также, нужно помнить, что все выше и ниже написанное будет работать только в FreeBSD 5-й версии и выше.

#!/bin/sh

start_disk ()
{
        if [ -z "`mount | grep bde`" ]; then
                if [ ! -c /dev/md$UNIT ]; then
                        mdconfig -a -t vnode -u $UNIT -f /usr/home/asmi/.crypt
                fi
                if [ -c /dev/md$UNIT ]; then
                        gbde attach /dev/md$UNIT -p "`kdialog --password "Crypted disk"`"
                fi
                if [ -z "`mount | grep bde`" -a -c /dev/md$UNIT.bde ]; then
                        fsck -F -t ufs -p /dev/md0.bde
                        mount /dev/md$UNIT.bde /home/asmi/Crypt
                fi
        fi
}

stop_disk ()
{
        if [ ! -z "`mount | grep bde`" ]; then
                umount /dev/md$UNIT.bde
                if [ $? -eq 1 ]; then
                        kdialog --error "Can not umount crypt drive"
                        exit
                fi
        fi
        if [ -c /dev/md$UNIT.bde ]; then
                gbde detach /dev/md$UNIT
        fi
        if [ -c /dev/md$UNIT ]; then
                mdconfig -d -u $UNIT
        fi
}

UNIT=0
FLASH="/dev/ad4s1"
#Здесь у меня находится PCMCIA ATA FLASH

case $1 in
start)
        start_disk
        ;;
stop)
        stop_disk
        ;;
copy)
        if [ ! -c $FLASH ]; then
                kdialog --error "No flash device $FLASH"
                exit
        fi
        stop_disk
        MNT=`mount | grep $FLASH`
        if [ -z "$MNT" ]; then
                MDIR=`dd if=/dev/random count=1 2>/dev/null | md5`
                mkdir /tmp/$MDIR
                mount -t msdos $FLASH /tmp/$MDIR
                cp /home/asmi/.crypt /tmp/$MDIR
                umount $FLASH
                if [ -z `mount | grep /tmp/$MDIR` ]; then
                        rm -rf /tmp/$MDIR
                else
                        kdialog --error "Can not umount /tmp/$MDIR"
                fi
        else
                DIR=`echo "$MNT" | awk '{print $3}'`
                echo "DIR: $MNT [$DIR]"
                cp /home/asmi/.crypt $DIR
        fi

        ;;
*)
        echo "usage: $0 start|stop|copy"
esac

Все просто и изяшно! Пользуйтесь на здоровье!

Запись опубликована в рубрике ЧАВО. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>