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