Dieses ist der zweite Teil einer Serie von Blogeintraegen, die sich als Reaktion auf die NSA Affaere um den Kontext Sicherheit fuer die eigenen Daten und Verschluesselung drehen.
Der erste Teil war fuer mich das Aufraeumen, einen Ueberblick zu bekommen sowie Strukturen zu schaffen, auf denen ich aufbauen kann. Der zweite Teil, den ich hier beschreiben moechte, bestand darin einen Ort zu schaffen, in dem ich Keys und Passwoerter sicher aufbewahren und gleichzeitig alles in ein vernuenftiges Backup schieben kann.
Es gibt immer Dateien, die muss man sicherer aufbewahren als alle anderen. Das sind zum Beispiel die Keys fuer die Webserver Zertifikate, PGP oder vielleicht auch das ein oder andere Passwort was man sich notieren moechte. Ich habe mich dazu entschlossen das ganze in einer verschluesselten Containerdatei aufzubewahren. Diesen kann ich auch ruhigen Gewissens irgendwo in ein Backup schieben und die Daten liegen nicht frei lesbar herum.
Es war fuer mich wichtig das ganze moeglichst einfach zu halten und nicht so kompliziert in der taeglichen Bedienung. Aus diesem Grund habe ich noch zwei Skripte und Aliase drumherum gebaut, so das ich mit einem simplen Befehl und einem Passwort den Container einhaengen bzw. mit einem weiteren Befehl den Container auch wieder aushaengen kann. Der Reihe nach:
- Erzeugen einer 128MB grossen Containerdatei:
dd if=/dev/urandom of=mycrypt.file bs=1M count=128 |
dd if=/dev/urandom of=mycrypt.file bs=1M count=128
- Die Datei an ein Loopback Device binden:
losetup -f
losetup /dev/loop0 mycrypt.file |
losetup -f
losetup /dev/loop0 mycrypt.file
- Initialisieren und Passwort festlegen:
cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/loop0 |
cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/loop0
- Oeffnen:
cryptsetup luksOpen /dev/loop0 mycryptcontainer |
cryptsetup luksOpen /dev/loop0 mycryptcontainer
- Dateisystem erzeugen:
mkfs.ext4 /dev/mapper/mycryptcontainer |
mkfs.ext4 /dev/mapper/mycryptcontainer
Jetzt kann man die Datei mounten und es als ganz normales Device nutzen:
mount -t ext4 /dev/mapper/mycryptcontainer /home/user/crypt |
mount -t ext4 /dev/mapper/mycryptcontainer /home/user/crypt
Wieder entfernt wird es mit den folgenden Befehlen:
umount /home/user/crypt
cryptsetup luksClose mycryptcontainer
losetup -d /dev/loop0 |
umount /home/user/crypt
cryptsetup luksClose mycryptcontainer
losetup -d /dev/loop0
Das ganze soll ja aber einfach sein. Aus diesem Grund habe ich mir zwei Skripte angelegt:
- /usr/local/sbin/mountContainer.sh
#!/bin/sh
SAFE=/home/user/Dokumente/mycrypt.file
CRYPTNAME=mycryptcontainer
MNT=/home/user/crypt
FS=ext4
LOOPDEV=$(losetup -f)
if [ "$(losetup -a | grep -c "$SAFE")" != "0" ]; then
echo "bereits eingehängt"
exit
fi
/sbin/losetup $LOOPDEV $SAFE
/sbin/cryptsetup luksOpen $LOOPDEV $CRYPTNAME
/bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT |
#!/bin/sh
SAFE=/home/user/Dokumente/mycrypt.file
CRYPTNAME=mycryptcontainer
MNT=/home/user/crypt
FS=ext4
LOOPDEV=$(losetup -f)
if [ "$(losetup -a | grep -c "$SAFE")" != "0" ]; then
echo "bereits eingehängt"
exit
fi
/sbin/losetup $LOOPDEV $SAFE
/sbin/cryptsetup luksOpen $LOOPDEV $CRYPTNAME
/bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT
- /usr/local/sbin/umountContainer.sh
#!/bin/sh
SAFE=/home/user/Dokumente/mycrypt.file
CRYPTNAME=mycryptcontainer
MNT=/home/user/crypt
LOOPDEV=$(losetup -a | grep "$SAFE" | sed "s/: .*//")
if [ "$(losetup -a | grep -c "$SAFE")" != "1" ]; then
echo "nicht eingehängt"
exit
fi
/bin/umount $MNT
/sbin/cryptsetup luksClose $CRYPTNAME
/sbin/losetup -d $LOOPDEV |
#!/bin/sh
SAFE=/home/user/Dokumente/mycrypt.file
CRYPTNAME=mycryptcontainer
MNT=/home/user/crypt
LOOPDEV=$(losetup -a | grep "$SAFE" | sed "s/: .*//")
if [ "$(losetup -a | grep -c "$SAFE")" != "1" ]; then
echo "nicht eingehängt"
exit
fi
/bin/umount $MNT
/sbin/cryptsetup luksClose $CRYPTNAME
/sbin/losetup -d $LOOPDEV
Nicht vergessen sie ausfuehrbar zu machen:
chmod 750 /usr/local/sbin/*mountContainer.sh |
chmod 750 /usr/local/sbin/*mountContainer.sh
Da die Skripte mit root rechten aufgerufen werden muessen habe ich mir weiter die folgende Datei erzeugt:
- /etc/sudoers.d/90_mycryptcontainer
user host = NOPASSWD: /usr/local/sbin/mountContainer.sh
user host = NOPASSWD: /usr/local/sbin/umountContainer.sh |
user host = NOPASSWD: /usr/local/sbin/mountContainer.sh
user host = NOPASSWD: /usr/local/sbin/umountContainer.sh
und noch die Rechte dafuer setzen:
chown root.root /etc/sudoers.d/90_mycryptcontainer
chmod 0440 /etc/sudoers.d/90_mycryptcontainer |
chown root.root /etc/sudoers.d/90_mycryptcontainer
chmod 0440 /etc/sudoers.d/90_mycryptcontainer
Zu guter Letzt noch zwei Aliase in meiner ~/.bash_aliases angelegt und voilà:
alias mcrypt='/usr/bin/sudo /usr/local/sbin/mountContainer.sh'
alias umcrypt='/usr/bin/sudo /usr/local/sbin/umountContainer.sh' |
alias mcrypt='/usr/bin/sudo /usr/local/sbin/mountContainer.sh'
alias umcrypt='/usr/bin/sudo /usr/local/sbin/umountContainer.sh'
Jetzt kann ich mit den Befehlen mcrypt und umcrypt den Container ein- und aushaengen und kann vor allem die verschluesselte Containerdatei ruhigen Gewissens ins Backup packen.
Die hier beschriebenen Schritte stammen groesstenteils aus dem Wikieintrag Containerdatei von ubuntuusers.de.