Entwickelt: 202? - schon länger her
Für heikle Daten, die andere Leute nix angehen, nutze ich verschlüsselte Dateisysteme. Ich verschlüssele nicht die komplette Platte (der Client ist ein stationärer Rechner und wird nicht in der Gegend rumgeschleift), die verschlüsselten Dateisysteme werden nur bei Bedarf eingehängt und auch wieder ausgehängt, wenn sie nicht mehr benötigt werden.
Vorarbeiten:
Du benötigst luks auf dem Rechner - sollte bei den gängigen Distributionen bereits
installiert sein. Prüfen kannst Du das z. B. mit dem Kommando losetup -f - wenn das
gefunden wird, dann ist alles im Lot, sonst installierst Du das über die Paketverwaltung nach.
FS anlegen:
Bevor Du mit einem verschlüsselten Dateisystem arbeiten kannst, musst Du es erstmal anlegen.
Hinweis: Bei mir liegen die nachfolgenden Scripts im Home-Verzeichnis unter
~/bin/Cryptfile, ist aber kein Muss.
1 #! /bin/bash 2 # crypt_file_gen.sh: create a crypted file system 3 # application files path 4 export APP_PATH=/home/jan/bin/CryptFile 5 # check for uid 6 if test `id -u` -ne 0; then 7 echo "script has to run as root, exiting" 8 exit 1 9 fi 10 # check for setup script 11 if test -z "" -o ! -x "$APP_PATH/"; then 12 echo "setup script not given or not executable, exiting" 13 echo "usage: script name-of-setup-script" 14 exit 1 15 fi 16 # get the variables 17 . $APP_PATH/ 18 # create container file 19 dd if=/dev/urandom of=$CONTAINER_FILE bs=1M count=$BLOCK_SIZE 20 # setup loop device 21 losetup $LO_DEV $CONTAINER_FILE 22 # luks setup - password question 23 cryptsetup -c aes-xts-plain64 -y -s 512 luksFormat $LO_DEV 24 # open luks device 25 cryptsetup luksOpen $LO_DEV $LUKS_CONTAINER 26 # create a file system 27 mkfs.ext4 $LUKS_MAPPER 28 # mount the crypto device 29 mount -t ext4 $LUKS_MAPPER $CRYPT_MOUNTPT 30 exit 0Der Ablauf:
Das Environment:
Da man ja möglicherweise mehrere solche verschlüsselten Dateisysteme nutzt, bestimmt ein entspr. Script die
Parameter des gewünschten FS. Das wird übrigens von allen Scripts hier genutzt und muss immer als Argument mitgegeben
werden, wie Du es nennst ist Wurscht.
1 #! /bin/bash 2 # container file 3 export CONTAINER_FILE=/datadisk/devel/secret/.data/data_dev 4 # next available loop device 5 export LO_DEV=`losetup -f` 6 # luks device 7 export LUKS_CONTAINER=data_container 8 # device mapper 9 export LUKS_MAPPER=/dev/mapper/$LUKS_CONTAINER 10 # mount point 11 export CRYPT_MOUNTPT=/datadisk/devel/secret/.data/data_mount 12 # block size (= kbytes) 13 export BLOCK_SIZE=8192
Rein ...
Um an die Daten ranzukommen, muss man das Device einhängen:
1 #!/bin/bash 2 # crypt_file_mount.sh: mount a crypted file system 3 # application files path 4 export APP_PATH=/home/jan/bin/CryptFile 5 # check for uid 6 if test `id -u` -ne 0; then 7 echo "script hat to run as root, exiting" 8 exit 1 9 fi 10 # check for setup script 11 if test -z "" -o ! -x "$APP_PATH/"; then 12 echo "setup script not given or not executable, exiting" 13 echo "usage: script name-of-setup-script" 14 exit 1 15 fi 16 # get the variables 17 . $APP_PATH/ 18 # mount if not yet mounted 19 if losetup -a | grep -q $CONTAINER_FILE; then 20 exit 0 21 else 22 losetup $LO_DEV $CONTAINER_FILE 23 cryptsetup luksOpen $LO_DEV $LUKS_CONTAINER 24 mount -t ext4 $LUKS_MAPPER $CRYPT_MOUNTPT 25 fi 26 exit 0Im Dolphin z. B. taucht das Device nach dem Mount als 8,0 GB internes Laufwerk auf.
... und raus
Nach Benutzung räumst Du natürlich auf (Du bist ja ein ordentlicher Mensch):
1 #!/bin/bash 2 # crypt_file_umount.sh: umount a mounted crypted file system 3 # application files path 4 export APP_PATH=/home/jan/bin/CryptFile 5 # check for uid 6 if test `id -u` -ne 0; then 7 echo "script hat to run as root, exiting" 8 exit 1 9 fi 10 # check for setup script 11 if test -z "" -o ! -x "$APP_PATH/"; then 12 echo "setup script not given or not executable, exiting" 13 echo "usage: script name-of-setup-script" 14 exit 1 15 fi 16 # get the variables 17 . $APP_PATH/ 18 # overwrite loop device 19 LO_DEV=`losetup -a | grep "$CONTAINER_FILE" | sed "s/: .*//"` 20 # umount if mounted 21 if test -n "$LO_DEV"; then 22 umount $CRYPT_MOUNTPT 23 cryptsetup luksClose $LUKS_CONTAINER 24 losetup -d $LO_DEV 25 fi 26 exit 0
Helferlein:
Damit ich nicht jedesmal die Kommandos mit Pfad und Argumenten aufrufen muss (Du weisst ja - ich bin ein fauler
Strick), habe ich mir 2 klitzekleine Bequemlichkeits-Shell-Scripts gebastelt und in ~/bin
geparkt.
jan@jake:~$ cat bin/start_work #! /bin/bash export APP_PATH=/home/jan/bin/CryptFile export SETUP_FILE=crypt_file_vars.sh su -c "$APP_PATH/crypt_file_mount.sh $SETUP_FILE" jan@jake:~$ cat bin/stop_work #! /bin/bash export APP_PATH=/home/jan/bin/CryptFile export SETUP_FILE=crypt_file_vars.sh su -c "$APP_PATH/crypt_file_umount.sh $SETUP_FILE" jan@jake:~$ start_work Passwort: Geben Sie die Passphrase für »/datadisk/devel/secret/.data/data_dev« ein: jan@jake:~$ stop_work Passwort: jan@jake:~$