Во 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
Все просто и изяшно! Пользуйтесь на здоровье!