GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
12. August 2012

MiniTipp: Mobile Daten verschlüsseln

Inhalt

  1. Einleitung
  2. Voraussetzungen
  3. Verschlüsselung
  4. Skriping
  1. Weiterführende Informationen

1. Einleitung

Mobile Daten zum Transfer von einem Ort zum anderen werden gerne auf einem USB-Stick gespeichert. Mittlerweile ist die Größe von USB-Sticks nun schon bei 64GB angekommen, so dass da schon so einiges drauf passt - und oft auch drauf bleibt. Einen USB-Stick kann man aber auch leicht mal verlieren. So können sensible Daten schnell in die falschen Hände kommen.

Verschlüsselung schafft Abhilfe. In diesem kleinen Artikel wollen wir eine Image-Datei auf einem NTFS-formatierten USB-Stick anlegen, die wir dann mit Linux-Mitteln verschlüsseln. Ein kleiner Teil des Sticks bleibt dabei unsverschlüsselt und eignet sich damit z.B. noch zum Dateiaustausch mit Freunden oder Kollegen.

2. Voraussetzungen

Voraussetzung ist ein partitionierter und NTFS-formatierter USB-Stick. Wie sich ein USB-Stick unter Linux formatieren lässt, kann im unixwerk-Artikel «Schreibzugriff auf NTFS-formatierte USB-Sticks» nachgelesen werden. Folgendes Layout wird in den Beispielen verwendet.

 root# fdisk -l /dev/sdb

 Disk /dev/sdb: 31.9 GB, 31876710400 bytes

    Device Boot      Start         End      Blocks   Id  System
 /dev/sdb1   *       39232    62259199    31109984    7  HPFS/NTFS/exFAT
(Ausgabe verkürzt)

 root# ntfsinfo -q -m /dev/sdb1
 Volume Information
         Name of device: /dev/sdb1
         Device state: 11
         Volume Name: LARGEUSB
         Volume State: 1
         Volume Version: 3.1
(Ausgabe verkürzt)

Der USB-Stick wird unter  /media/LARGEUSB  ins Dateisystem eingehängt:

 root# mount LABEL=LARGEUSB /media/LARGEUSB

3. Verschlüsselung

A. Zunächst legen wir eine 20000 MB große Datei aus Zufallszahlen auf dem USB-Stick an:

 root# dd if=/dev/urandom of=/media/LARGEUSB/DATA.IMG bs=1M count=20000

B. Dann werden die nötigen Kernel-Module geladen:

 root# modprobe cryptoloop
 root# modprobe aes

C. Die Datei wird mit einem Passwort verschlüsselt:

 root# losetup -e aes /dev/loop0 /media/LARGEUSB/DATA.IMG

D. Das Dateisystem kann angelegt werden. Hier habe ich mich für das gute alte ext2 entschieden:

 root# mke2fs -m 0 /dev/loop0
 root# mkdir /media/transfer
 root# mount -o loop,encryption=aes t ext2 /media/LARGEUSB/DATA.IMG /media/transfer
 Password: ********
 root# df /media/transfer
 Filesystem     1MB-blocks  Used Available Use% Mounted on
 /dev/loop0          20643  1230     19413   6% /media/transfer

Fertig!

4. Skripting

Man könnte  /media/transfer  natürlich in der Datei  /etc/fstab  mit den Optionen  noauto,user  verankern. Aufgrund der verschiedenen Voraussetzungen habe ich mich aber entschieden ein Skript auf dem unverschlüsselten Teil des Sticks zu hinterlegen, das die verschlüsselte Image-Datei öffnet und schließt. So hat man sein Skript immer dabei.

 root# vi /media/LARGEUSB/mountimage.sh
 #!/bin/bash

 MYPATH=$(readlink -f "$0")
 MYDIR=$(dirname "$MYPATH")
 MYNAME=$(basename "$MYPATH")

 CRYPTIMG="$MYDIR/DATA.IMG"
 MOUNTPOINT=/media/transfer

 start()
 {

  [ -r "$MOUNTPOINT" ] || mkdir -p "$MOUNTPOINT"

  modprobe cryptoloop
  modprobe aes

  mount -o loop,encryption=aes -t ext2 "$CRYPTIMG" "$MOUNTPOINT"
 }

 stop()
 {
  umount "$MOUNTPOINT"
 }

 restart()
 {
  stop
  sleep 10
  start
 }

 status()
 {
  mount | grep "$CRYPTIMG" || echo "$CRYPTIMG not mounted."
 }

 case "$1" in

  start) start ;;
  stop) stop ;;
  status) status ;;
  *) echo "Usage: bash $MYNAME { start | stop | status | restart }" ; exit 1 ;;

 esac

Da wir auf NTFS-formatierten Bereichen keine Unix-Rechte setzen können, wird das Skript nicht direkt aufgerufen, sondern explizit an die Bash übergeben:

 root# cd /media/LARGEUSB
 root# bash ./mountimage.sh start
 Password: ********
oder als unpriviliegierter Benutzer mit sudo: $ sudo bash /media/LARGEUSB/mountimage.sh start
 

A. Weiterführende Informationen