[[Vorlage(Archiviert)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Pakete_installieren: Installation von Paketen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Texteditor öffnen] [:Datenträger:] [:Home_umziehen:Home umziehen] [:Notfall: "Betreten" des installierten Systems von einer Live-CD aus] }}} [[Inhaltsverzeichnis(1)]] Die folgende Anleitung wendet sich an fortgeschrittene Benutzer, die bereits mit der Einrichtung von Dateisystemen vertraut sind. = Voraussetzungen = * Es wird das Paket '''cryptsetup''' (''universe'') benötigt. * Diese Kernel-Module müssen zum Start geladen sein: * '''aes''' * '''dm-mod''' * '''dm-crypt''' Die in dieser Anleitung angebenen Gerätedateien '''/dev/hdXY''', '''/dev/hdXZ''' usw. stehen als Variablen und sind durch die tatsächliche Bezeichnung der Partitionen (z.B. '''/dev/hda2''', '''/dev/hda5''', '''/dev/sda3''' o.a.) zu ersetzen. {{{#!vorlage Hinweis Es empfielt sich VOR der Durchführung der folgenden Schritte in den Single-User Betrieb (Runlevel 1) zu wechseln und den Xserver sowie alle nicht benötigen Systemdienste zu stoppen. Bis auf den letzten Schritt, für den die Verwendung einer Live-CD zwingend erforderlich ist, können alle Schritte aus dem Runlevel 1 ausgeführt werden. }}} = Backup der Daten = Als erstes muss eine Sicherung der Daten unter '''/var''' und '''/home''' erfolgen. Mit diesen Befehlen werden die Verzeichnisse '''/var''' und '''/home''' gesichert. Achtung! Den Punkt am Ende des Befehls nicht vergessen: {{{#!vorlage Befehl sudo -s cd /var tar -cpjvf /root/bak_var.tar.bz2 . cd /home tar -cpjvf /root/bak_home.tar.bz2 . }}} = Partitionen anlegen = Falls noch nicht vorhanden, jeweils eine separate Partition für '''/tmp''', '''/var''', '''/swap''' und '''/home''' anlegen. Siehe dazu auch [:Daten_verschlüsseln:hier]. Wer ganz sicher gehen will, kann vor dem Anlegen des Dateisystems die Partition mit Zufallsdaten beschreiben. So kann ein Angreifer nicht ermitteln, wieviel Prozent der Platte mit Daten belegt und wieviel Prozent noch frei sind. Abhilfe schafft folgender Befehl, der die Partition mit Zufallsdaten auffüllt: {{{#!vorlage Befehl sudo dd if=/dev/urandom of=/dev/hdxY }}} Weitere Infos sind hier zu finden: [http://www.linuxjournal.com/article/7743 Encrypt Your Root Filesystem] {en} = Schlüsseldiskette erstellen = Eine leere Diskette einlegen, dann ein ext2-Dateisystem (kein ext3-Dateisystem!)und einen zufällig generierten Schlüssel erzeugen. Aus Sicherheitsgründen ist darauf zu achten, dass das Dateisystem auf der Diskette kein journaling Dateisystem ist. {{{#!vorlage Befehl sudo -s mkfs.ext2 /media/floppy mount /media/floppy cat /dev/random > /media/floppy/keyfile }}} {{{#!vorlage Hinweis Je nach Rechnerleistung kann das erstellen der Keyfile lange Ladezeiten beanspruchen }}} = Partitionen mit Schlüssel verschlüsseln: = Nun verschlüsselte Partitionen anlegen (für die Gerätedateien '''/dev/hdXY''' bzw. '''/dev/hdXZ''' die Geräte-Bezeichnung der '''/home''' bzw. '''/var'''-Partition angeben) {{{#!vorlage Befehl sudo -s cryptsetup create -d /media/floppy/keyfile home /dev/hdXY cryptsetup create -d /media/floppy/keyfile var /dev/hdXZ }}} {{{#!vorlage Hinweis Der obige Befehl erzeugt je ein neues Mapper-Device pro Cryptdisk ('''/dev/mapper/xxx'''), wobei xxx der Bezeichnung entpricht, die bei der Erstellung des Cryptdevices angegeben wurde, in diesem Falle also home und var. }}} = Dateisystem auf Cryptpartitionen anlegen = {{{#!vorlage Befehl mkfs.ext3 /dev/mapper/home mkfs.ext3 /dev/mapper/var }}} = crypttab editieren = Jetzt solle die '''/etc/crypttab''' bearbeitet werden [4] und folgende Einträge vorgenommen werden (Gerätedateien wieder entsprechend anpassen): {{{# swap /dev/hdXW /dev/random swap tmp /dev/hdXV /dev/random tmp home /dev/hdXY /media/floppy/keyfile var /dev/hdXZ /media/floppy/keyfile }}} Die ersten beiden Einträge erzeugen bei jedem Start jeweils ein mit einem zufälligen Schlüssel verschlüsseltes swap-Dateisystem auf der angegebenen Swap-Partition und ein ext2-Dateisystem auf der angegebenen tmp-Partition. Zu beachten ist, dass diese Partitionen bei jedem Neustart neu formatiert werden, da der Schlüssel jedesmal anders ist. Die letzten zwei Einträge starten die von uns angelegten Cryptpartitionen für '''/home''' und '''/var''' und lesen dabei den Schlüssel von der Diskette (die Diskette nicht verlieren, sonst kommt man nicht mehr an die Daten ran). {{{#!vorlage Hinweis Evtl. ist es besser die verschluesselten Partitionen mit cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/hdXY die optionen sind nur als Beispiel anzusehen) anzulegen und ein Passwort (fuer den Notfall) anzugeben. Danach kann das Keyfile mit cryptsetup luksAddKey /dev/hdXY /media/floppy/keyfile eingebunden werden, dann kann man jederzeit auch wenn die keydisk im Eimer ist wieder an die Daten rankommen. Wenn man noch auf den md5 check des keyfiles verzichten kann und will muss einfach in /etc/default/cryptdisks ein CRYPTDISKS_MOUNT="/media/floppy" angeben. dann kann man das einbinden des Scripts ins init.d getrost vergessen. }}} = fstab anpassen = In der Datei '''[:fstab:/etc/fstab]''' sind die Einträge für '''/tmp''', '''/var''' '''/home''' und '''swap''' entsprechend ergänzen bzw. anpassen [4]: {{{/dev/mapper/swap swap swap defaults 0 0 /dev/mapper/home /home ext3 defaults 1 2 /dev/mapper/tmp /tmp ext2 defaults 0 0 /dev/mapper/var /var ext3 defaults 1 2 }}} {{{#!vorlage Hinweis Das Dateisystem von '''/home''' und '''/var''' berücksichtigen. Falls ein anderes Dateisystem als ext3 gewählt wurde, muss dies auch in der fstab geändert werden. }}} = Cryptpartitionen einbinden und Backup zurückspielen = {{{#!vorlage Befehl mount /dev/mapper/home /home mount /dev/mapper/var /var cd /var tar -xpjvf /root/bak_var.tar.bz2 cd /home tar -xpjvf /root/bak_home.tar.bz2 }}} {{{#!vorlage Warnung Diese Daten im Backup sind unverschlüsselt und könnten wiederhergestellt werden, wenn das Backup sich auf einem Journaling Dateisystem befindet. Es ist dafür zu sorgen, dass die Backupdateien unter '''/root''' anschließend sicher gelöscht (shred) werden. Sicheres Löschen funktioniert übrigens nicht, wenn die Daten sich auf einem Filesystem mit Journalfunktion befinden. }}} = md5sum vom keyfile erstellen = An Hand einer Prüfsumme kann das folgende Initscript erkennen, ob sich auf der eingelegten Diskette wirklich der richtige Key befindet. {{{#!vorlage Befehl cd /root md5sum /media/floppy/keyfile > .key_md5sum chmod 400 .key_md5sum }}} = Initscript erstellen = Es muss das folgende Initscript erstellt werden [4], das unter '''/etc/init.d''' als '''keymount.sh''' gespeichert wird: {{{#!/bin/sh ######################################################################## ## This script is used to mount a floppy disk containing a keyfile ## to decrypt encrypted partitions on startup ## Please make sure to execute it before cryptdisk are started ## (c) 2006 by mdkuser, published under the GPL v2 ######################################################################## case "$1" in start) modprobe floppy if [ ! -e /dev/fd0 ]; then mknod /dev/fd0 b 2 0 chown root:floppy /dev/fd0 chmod 660 /dev/fd0 fi if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi echo -n "waiting for key file media... " mount -o ro /dev/fd0 /media/floppy > /dev/null 2>&1 md5sum -c /root/.key_md5sum > /dev/null 2>&1 retval="$?" while [ ! "$retval" -eq "0" ]; do echo "ERROR: No key file media!" if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi read $a mount -o ro /dev/fd0 /media/floppy > /dev/null 2>&1 md5sum -c /root/.key_md5sum > /dev/null 2>&1 retval="$?" done echo "Key file found." ;; stop) if $( grep -q /media/floppy /etc/mtab ); then umount /media/floppy fi ;; esac exit 0 }}} Dieses Script muss ausführbar gemacht werden: {{{#!vorlage Befehl chmod 755 /etc/init.d/keymount.sh }}} Danach ist ein symbolischer Link unter '''/etc/rcS.d''' zu erzeugen {{{#!vorlage Befehl cd /etc/rcS.d ln -s ../init.d/keymount.sh S27keymount.sh }}} {{{#!vorlage Hinweis Das Keymount Initscript muss VOR dem Initscript cryptdiscs gestartet werden! Der Symlink mit Nummer '''S27keymount.sh''' startet das Script unmittelbar vor dem cryptdisc Init Script, evtl. anpassen. }}} Damit die Diskette nach erfolgreichem Booten wieder entfernt werden kann, ist folgenden Eintrag in '''/etc/rc.local''' zu erzeugen: {{{/etc/init.d/keymount.sh stop }}} = (Optional) Kennwort für root vergeben = Dieser Schritt ist optional, aber dafür sicherer, da man sonst ohne Passwortabfrage auf der Rootshell landet, falls die Cryptdisks nicht gestartet werden können. {{{#!vorlage Befehl sudo passwd root }}} = Verzeichnisse anlegen und Berechtigungen anpassen = Im leeren Verzeichnis '''/var''' auf der Rootpartition ('''/''') sind noch einige Verzeichnisse anzulegen und die Berechtigungen entsprechend zu setzen. Dies ist wichtig, da unter Dapper bei jedem Start unter '''/var''' Aktionen ausgeführt werden, bevor die Cryptpartitionen gestartet werden. Hierzu ist es unbedingt notwendig mit einer '''Live-CD''' zu arbeiten, um die '''/''' Partition zu mounten ohne das '''/var''' eingehangen ist, da '''/var''' im laufenden Betrieb nicht ausgehangen werden kann. {{{#!vorlage Befehl sudo -s mount /dev/hdXU /mnt mkdir /mnt/var/tmp chmod 1777 /mnt/var/tmp mkdir /mnt/var/lock chmod 1777 /mnt/var/lock mkdir /mnt/var/run chmod 755 /mnt/var/run }}} {{{#!vorlage Hinweis '''/dev/hdXU''' ist hier durch die Gerätebezeichnung der Rootpartition ('''/''') zu ersetzen. }}} = Erster Test = Nun das System rebooten, Live-CD entfernen und das neu erzeugte Cryptosystem kann getestet werden. {{{#!vorlage Hinweis Es wird an dieser Stelle ausdrücklich darauf hingewiesen, dass der Autor keine Verantwortung für die Richtigkeit und Vollständigkeit dieser Kurzanleitung und auch nicht für eventuell sich daraus ergebende Probleme übernehme. Die hier beschriebene Konfiguration wurde unter Dapper getestet und für funktional befunden und wird auf einer as-is Basis zur Verfügung gestellt, allerdings wurde die vorliegende Dokumentation dazu nachträglich aus dem Gedächtnis heraus aufgeschrieben, es könnten also hier und da noch einige Anpassungen vorzunehmen sein. Benutzung auf eigene Gefahr! }}} ---- # tag: Sicherheit, Verschlüsselung