#/bin/bash # ____ _ _ _ _ _ # / ___|_ __ _ _ _ __ | |_ ___ | | ___ ___ _ __ | | | | _____ _| |_ ___ # | | | '__| | | | '_ \| __/ _ \| |/ _ \ / _ \| '_ \ _____| |_| |/ _ \ \ /\ / / __/ _ \ # | |___| | | |_| | |_) | || (_) | | (_) | (_) | |_) |_____| _ | (_) \ V V /| || (_) | # \____|_| \__, | .__/ \__\___/|_|\___/ \___/| .__/ |_| |_|\___/ \_/\_/ \__\___/ # |___/|_| |_| # # geschrieben von Christian Scheucher ( re-exess@gmx.at ) # Das ist ein ausführbares howto für alle kernelversionen !!! ( sollte also bei kernel 2.2.x, 2.4.x und 2.6.x funktionieren ) # es ist allerdings nicht dazu gedacht das "root" dateisystem zu verschlüsseln !!! # ausserdem hab ich mich bemüht das script für alle distributionen zu basteln # egal ob du jetzt mit debian, mandrake, redhat, lfs, suse oder ähnlichem arbeitest # es setzt nur installierte und richtig konfigurierte kernel-sources, wget, einen c# compiler, gnugpg und uuencode vorraus # debian user: "apt-get install sharutils gnupg gcc zlib1g-dev figlet -y" dann sollte alles notwendige installiert sein # der rest sollte eigentlich auf allen standard systemen installiert sein # du kannst den key auch auf eine diskette (die gehn aber leicht kaputt) oder ein zip-drive speichern # ein usb-memory-stick is aber so schön klein und kostet nicht die welt - muss ja nicht mehr drauf als ein paar kb :-) VERSION=2004-01-22 clear echo Cryptoloop-Maker | figlet -w 200 echo echo "Copyleft by Tron" | figlet -w 200 echo echo "( re-exess@gmx.at ) " | figlet -w 200 echo echo if [ $UID != 0 ] then echo "du bist nicht root" echo "gib das root passwort ein und starte das script neu" su exit fi if [ $# -lt 3 ] then less Crypto_Howto echo "./Crypto_Howto DEVICE MOUNTPOINT FILESYSTEM" echo "zb. so:" echo "./$0 /dev/md0 /home/ ext3" echo echo echo echo cat /etc/fstab exit 1 fi if [ "$2" = "/" ] then echo " dieses script is nicht dazu gedacht das root dateisystem zu verschlüsseln" echo " liess nochmal das howto" sleep 5 less Crypto_Howto exit 1 fi clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo echo Version: $VERSION echo echo echo "Verwende Device " $1 echo "mounte es auf " $2 echo "und erzeuge Filesystem " $3 echo echo " !!! WARNUNG !!!" echo " ALLE FILES AUF DEM ZIELLAUFWERK WERDEN GELÖSCHT !!! " echo " gib \"YES, Do as I say\" ein um weiterzumachen" read -p "weitermachen ?: " bestaetigung if [ "$bestaetigung" != "YES, Do as I say" ] then echo ABBRUCH exit 1 fi clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo daten_vernichten=n echo " daten auf dem ziellaufwerk vernichten?" read -p " das kann bei grossen dateinträgern einige stunden dauern (y/n): " daten_vernichten umount $2 losetup -d /dev/loop0 losetup -d /dev/loop1 rm /usr/src/Crypto/ -Rf clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo apt-get install sharutils gnupg gcc zlib1g-dev figlet -y # bevor du dieses script lauffen lässt *musst* du einen kernel aus den sources kompilieren !!! # beachte folgendes: die .config *muss* folgendes enthalten: CONFIG_MODULES=y CONFIG_BLK_DEV_LOOP=n # ( ladbarer modul support eingeschaltet, loopdevice ausgeschaltet ) # CONFIG_KMOD=y ist empfohlen aber nicht unbedingt notwendig # zunächst stell sicher dass sich die kernelsources unter /usr/src/linux befinden # (im normalfall sollte /usr/src/linux ein link auf die eigentlichen kernelsources sein - etwa /usr/src/linux-2.6.0) kern=0 # ist Loadable modules support im kernel == "y" ? --> dann ist gut :-) if cat /usr/src/linux/.config | grep CONFIG_MODULES=n then echo "kein Modul-support im kernel gefunden" cat /usr/src/linux/.config | sed s/CONFIG_MODULES=n/CONFIG_MODULES=y/g >> /usr/src/linux/.config_tmp mv /usr/src/linux/.config_tmp /usr/src/linux/.config -vf kern=1 fi # sind die loopbackdevices == "n" ? --> dann ist gut :-) if cat /usr/src/linux/.config | grep CONFIG_BLK_DEV_LOOP=y then echo "Block Device support *muss* ausgeschaltet sein" cat /usr/src/linux/.config | sed s+CONFIG_BLK_DEV_LOOP=y+#\ CONFIG_BLK_DEV_LOOP\ is\ not\ set+g >> /usr/src/linux/.config_tmp mv /usr/src/linux/.config_tmp /usr/src/linux/.config -vf kern=1 fi # sind die loopbackdevices == "n" ? --> dann ist gut :-) if cat /usr/src/linux/.config | grep CONFIG_BLK_DEV_LOOP=m then echo "Block Device support *muss* ausgeschaltet sein" cat /usr/src/linux/.config | sed s+CONFIG_BLK_DEV_LOOP=m+#\ CONFIG_BLK_DEV_LOOP\ is\ not\ set+g >> /usr/src/linux/.config_tmp mv /usr/src/linux/.config_tmp /usr/src/linux/.config -vf kern=1 fi # wurde kernelkonfiguration verändert -> kernel neu kompilieren if [ $kern = 1 ] then cd /usr/src/linux/ make dep clean bzImage modules modules_install ls -l /boot/ read -p " wie soll der kernel heissen ? " kernelname cp /usr/src/linux/arch/i386/boot/bzImage /boot/$kernelname lilo # grub user werden mich jetzt hassen ;-) read -p "soll der rechner jetzt neu gestartet werden? " neustart if [ "$neustart" = "y" ] then reboot else exit 1 fi fi echo "kernel konfiguration scheint in ordnung " # wir erstellen ein verzeichniss /usr/src/Crypto/ und wechseln da rein cd /usr/src/ mkdir Crypto cd Crypto/ # wir brauchen die neuesten sources von loop-AES - wir werden das ganze mit AES-256 verschlüsseln clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo wget http://loop-aes.sourceforge.net/loop-AES-latest.tar.bz2 # die entpacken wir mit bzip2 -df loop-AES-latest.tar.bz2 tar -xf loop-AES-latest.tar cd loop-AES-v2.0e/ # dann kompilieren und installieren wir das ganze make clean make cd /usr/src/Crypto/ # dann brauchen wir zlib - sonst gibts nen fehler beim kompilieren clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo wget http://www.zlib.net/zlib-1.2.1.tar.gz tar xzfv zlib-1.2.1.tar.gz cd zlib-1.2.1/ make make install cd /usr/src/Crypto/ # ausserdem brauchen wir die neuesten linux-utils (für mount, umount, swapon, swapoff, losetup) clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo wget http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz # die entpacken wir wieder mit gzip -df util-linux-2.12.tar.gz tar -xf util-linux-2.12.tar # wir wechseln in das verzeichniss util-linux-2.12/ cd util-linux-2.12/ # nun müssen wir die linux-utils patchen und kompilieren patch -p1 <../loop-AES-v2.0e/util-linux-2.12.diff CFLAGS=-O2 ./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 ) # alte man-seiten löschen und neue man-seiten installieren 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 # man database aktualisieren mandb cd ../../loop-AES-v2.0e/ # noch schnell ein test ob alles funktioniert hat make tests || exit 1 # hier sollte *** Test results ok *** kommen - wenn nicht musst du den kernel wie oben beschrieben neu machen # wir schreiben nun sinnlose daten auf den datenträger - dann ist das cryptoloop-fs so gut wie gar nicht drauf zu entdecken # das dauert allerdings ne zeitlang - auf meiner 9.1 giga platte so etwa 3 stunden ... :-/ # darum hab ich das mal kommentiert - muss nicht unbedingt gemacht werden clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo if [ $daten_vernichten = y ] then echo "es werden nun randomize daten auf den datenträger geschriben - das kann einige stunden dauern :-/ " dd if=/dev/urandom of=$1 bs=1M fi # guten morgen - gut geschlafen ? ;-) # weiter gehts mit etwas das lange dauert ;-) # jetzt wird ein gpg-key generiert und auf deinem usb-dongle gespeichert # ich füge hier den namen des rechners in den namen des gpg-files hinzu # dann kannst du alle keyfiles aller deiner rechner auf einem dongle speichern :-) clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo cat /etc/fstab echo echo " das ist deine \"fstab\" - nur für den fall dass du den mountpoint deines usb-dongles nicht weisst" read -p "gib den pfad zu deinem usbdongle ein (/mnt/dongle/ ?): " donglepfad mount $donglepfad echo " generiere gpg-key und speichere ihn unter" $donglepfad`uname -n`key.gpg # bei der ersten zeile wird man nach einer passphrase gefragt, bei der 2. nicht head -c 2880 /dev/random | uuencode -m - | head -n 65 | tail -n 64 | gpg --symmetric -a >$donglepfad`uname -n`key.gpg # head -c 2880 /dev/random | uuencode -m - | head -n 65 | tail -n 64 | gpg --store -a >$donglepfad`uname -n`key.gpg # damit das file kein user lesen und schreiben kann ändern wir noch schnell die berechtigungen chmod 600 $donglepfad`uname -n`key.gpg # ohne worte ;-) cat $donglepfad`uname -n`key.gpg echo echo -e der key ist \\c cat $donglepfad`uname -n`key.gpg | wc -c echo "bytes lang - den musst du jetzt auswendig lernen" sleep 5 echo " nee - stimmt nicht ;-) " sleep 5 # backup der alten /etc/fstab machen cp /etc/fstab /etc/fstab.bak # alten eintrag aus der /etc/fstab löschen cat /etc/fstab | grep -v $1 > /etc/fstab_2 mv /etc/fstab_2 /etc/fstab -vf # einen eintrag in die /etc/fstab machen echo $1 $2 $3 defaults,loop=/dev/loop0,encryption=AES128,gpgkey=$donglepfad`uname -n`key.gpg 0 0 >>/etc/fstab # nun richten wir loop0 als device für das cryptoloop ein clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo echo " Gib das Passwort ein" losetup -F /dev/loop0 # und erstellen ein filesystem drauf mkfs -t $3 /dev/loop0 losetup -d /dev/loop0 # nun mounten wir das ganze mkdir $2 clear echo "Cryptoloop-Maker" | figlet -w 200 echo echo echo " wir mounten das filesystem nun - dazu brauche ich das passwort nocheinmal" mount $2 echo "mit dieser ausgabe kannst du überprüfen ob das dateisystem wirklich gemountet wurde" mount # TODO: # das filesystem automatsch mounten wenn der memory-stick am computer angeschlossen wird # wahlweise das filesystem automatsch umounten wenn der memory-stick vom rechner entfernt wird # hmmm - ich denke das wars :-) echo "Cryptoloop-Maker" | figlet -w 200 echo echo echo "DONE !!!" echo "Done :-)" | figlet -w 200