• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Usb Platte mit verschlüsselung... Treiber schmiert ab!

nuke

Newbie
Hi leutz ,

ich hab ein gravierendes Problem, und zwar hab ich ein script geschrieben das meine usb festplatte verschlüsselt und mountet.
Das funktioniert auch soweit nur wenn ich dir platte abziehe bevor ich sie unmounted habe schmiert der usb treiber komplett ab, nicht mehr ansprechbar und ich kann ihn auch nich entladen. Einzige möglichkeit ihn wieder zum laufen zu kriegen ist ein system neustart. Da ich das script für die Firma in der ich arbeite geschrieben hab und der Server dort den ganzen tag in benutzung ist kann ich das system nicht andauernd restarten wenn jemand aus versehen die platte abzieht.

plz help me ^^

Mfg

Nuke


------------------------------------------------------------------------------------

System:

Suse SLES 9
IBM Xseries 226
120gb Usb 2.0 Platte


Script:

#!/bin/bash

trap catch INT

catch()
{
echo "Catched !"
sleep 3
exit -1
}

FS=reiserfs
FILE=/dev/sdb1
LOOP=/dev/loop1
MOUNTPOINT=backup
PASSWDFILE=/etc/loop1.pwd
FS_KEY=/etc/fskey9.gpg
SEEDFILE=/etc/seed.pwd
PASSWDFD=3
KEYFD=4

# reset file permissions
/bin/chmod 400 ${PASSWDFILE} ${FS_KEY} ${SEEDFILE} 2>&1 > /dev/null

read SEED < ${SEEDFILE}

exec 3<> ${PASSWDFILE}

# Load modul if not already pressent
mod=`/sbin/lsmod | grep loop_fish2`
if [ "X$mod" == "X" ]
then
echo "Loading module loop_fish2"
/sbin/modprobe loop_fish2
sleep 3
fi

case $1 in
start)
backup=`/bin/mount | grep ${MOUNTPOINT}`
if [ "X$backup" != "X" ]
then
/bin/umount ${LOOP}
fi

# delete loop device if present
/sbin/losetup ${LOOP} 2>&1 > /dev/null
if [ $? == 0 ]
then
/sbin/losetup -d ${LOOP}
fi

exec 4<> ${FS_KEY}

/sbin/losetup -p ${KEYFD} -e twofish256 -S ${SEED} ${LOOP} ${FILE} && /bin/mount -t ${FS} ${LOOP} /${MOUNTPOINT}
;;

stop)
/bin/umount ${LOOP}
/sbin/losetup -d ${LOOP}
;;

init)
# umount if mounted
backup=`/bin/mount | grep backup`
if [ "X$backup" != "X" ]
then
/bin/umount ${LOOP}
fi

backup=`/bin/mount | grep ${FILE}`
if [ "X$backup" != "X" ]
then
/bin/umount ${FILE}
fi

# create directory if it does'nt exist
if [ ! -d /${MOUNTPOINT} ]
then
mkdir /${MOUNTPOINT}
fi

# delete loop device if present
/sbin/losetup ${LOOP} 2>/dev/null
if [ $? == 0 ]
then
/sbin/losetup -d ${LOOP}
fi

# fill the first 500 1k blocks with 0
/bin/dd if=/dev/zero of=${FILE} bs=1k count=500

# create a crypted random passwd
if [ ! -d /root/.gnupg ]
then
mkdir /root/.gnupg
fi

/usr/bin/openssl rand -base64 32 | \
/usr/bin/uuencode -m - | \
/usr/bin/head -n 65 | \
/usr/bin/tail -n 64 | \
gpg -a --symmetric -c --no-random-seed-file --cipher-algo TWOFISH --passphrase-fd ${PASSWDFD} | \
tail -n6 | head -n 3 | awk -F'\n' '{printf "%s%s%s", $1, $2, $3 }' > ${FS_KEY}
/bin/chmod 400 ${FS_KEY}

exec 4<> ${FS_KEY}

/sbin/losetup -p ${KEYFD} -e twofish256 -S ${SEED} ${LOOP} ${FILE}

case ${FS} in
reiserfs)
/sbin/mkreiserfs -l ${MOUNTPOINT} ${LOOP}
/bin/mount -t reiserfs ${LOOP} /${MOUNTPOINT}
;;
ext2)
/sbin/mke2fs ${LOOP} 2>&1 > /dev/null
/bin/mount -t ext2 ${LOOP} /${MOUNTPOINT}
;;
*)
echo "Unknown filesystem type!"
exit -2
;;
esac

;;
esac
 
Oben