Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
shell [2008/04/22 14:15] – Festplatte / Partition verschlüsseln Cryptodisk LVM Debian geraldshell [2024/02/29 13:36] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-Debian: Daten verschlüsseln 
-apt-get install cryptsetup 
-http://www.andreas-janssen.de/cryptodisk.html#a1 
  
-LUKS-Partition vorbereiten +{{tag>shell bash bourne .sh shellscript}}
-Im Folgenden werde ich an einem Beispiel erklären, welche Befehle benötigt werden um eine verschlüsselte Partition mit dm-crypt/LUKS einzurichten und zu verwenden. +
-Vorbereitung: Es wird eine verfügbare Partition oder ein leeres Logical Volume benötigt. Es ist *nicht* möglich, eine bestehende Partition ohne Verlust aller auf ihr gespeicherten Daten zu verschlüsseln. Vor der Initialisierung kann die Partition mit Zufallswerten überschrieben werden. Von außen kann man später die verschlüsselten Daten nicht von den leeren Bereichen mit Zufallswerten unterscheiden. Außerdem werden dabei alte noch vorhandene Datenreste überschrieben.+
  
- AchtungNach einmaligem Überschreiben kann man nicht mehr über ein herkömmliches Datenrettungsprogramm an die Datenreste gelangen, aufwändigere Methoden (bei denen die Festplatte im allgemeinen zerlegt werden muss) können das unter Umständen immer noch! Um noch vorhandene Daten wirklich unwiderruflich zu löschen muss die Partition mehrmals überschrieben werden. Es gibt unterschiedliche Meinungen darüber wie oft das nötig ist, ich gehe hier nicht weiter auf dieses Thema ein. +siehe auch[[bash]]
-In meinem Beispiel wird nun die Partition /dev/hda3 mit Zufallswerten überschrieben. Dazu dient /dev/urandom als Quelle: +
-dd if=/dev/urandom of=/dev/hda3 bs=10M +
-liest jeweils Blöcke von 10 Megabytes Größe aus /dev/urandom und schreibt diese dann auf die Platte, solange bis die Partition voll ist. +
-Nachdem die Partition vorbereitet wurde muss sie nun über cryptsetup  initialisiert werden. Praktischerweise gibt es ein kleines Skript namens luksformat, welches dieses mit vernünftigen Voreinstellungen für die Verschlüsselung erledigt. Außerdem legt es zusätzlich noch ein Dateisystem auf der Partition an. Da die Partition nur unter Linux benutzt werden soll werde ich das ext3-Dateisystem verwenden: +
-sirius:~# luksformat -t ext3 /dev/hda3 +
-creating encrypted device on /dev/hda3+
  
-WARNING! +====== Bash Shell / Bourne Shell ======
-======== +
-Daten auf /dev/hda3 werden unwiderruflich überschrieben.+
  
-Are you sure? (Type uppercase yes)YES +[[shell:if|IF-Operator]]
-luksformat fragt nach einem Passwort für die Partition, welches insgesamt dreimal eingegeben werden muss. Abschließend entsperrt es die Partition, legt ein ext3-Dateisystem an und sperrt sie dann wieder. Statt luksformat könnte man auch direkt cryptsetup benutzen, die entsprechenden Befehle wären: +
-cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 /dev/hda3 +
-cryptsetup luksOpen /dev/hda3 luksformatxxx +
-mkfs.ext3 /dev/mapper/luksformatxxx +
-cryptsetup luksClose /dev/mapper/luksformatxxx +
-Damit sind die Vorbereitungen angeschlossen und die Partition kann verwendet werden. +
-Nach oben  +
-Partition benutzen - cryptsetup und mount +
-Um die Partition nun zu mounten muss sie entsperrt werden. Dabei wird das Passwort oder der Schlüssel angegeben. cryptsetup konfiguriert den Device Mapper entsprechend, so daß dieser die verschlüsselte Partition mit einer Gerätedatei in /dev/mapper verknüpft, welche dann ganz normal mit mount eingehängt werden kann. Der Name dieser Datei ist frei wählbar, zur Übersichtlichkeit benutze ich hda3_crypt: +
-sirius:~# cryptsetup luksOpen /dev/hda3 hda3_crypt +
-Enter LUKS passphrase: +
-key slot 0 unlocked. +
-Command successful +
-sirius:~# ls /dev/mapper +
-control hda3_crypt +
-Die Partition ist damit entsperrt. Alle Zugriffe auf /dev/mapper/hda3_crypt laufen nun durch den Device Mapper. Erfolgt ein Schreibzugriff auf hda3_crypt so werden die Daten verschlüsselt und dann auf hda3 gespeichert. Erfolgt ein Lesezugriff auf hda3_crypt wird der passende Datenblock von hda3 gelesen, entschlüsselt und dann ausgegeben. Die Partition kann mit mount eingehängt werden: +
-sirius:~# mount /dev/mapper/hda3_crypt /mnt +
-sirius:~# mount grep hda3 +
-/dev/mapper/hda3_crypt on /mnt type ext3 (rw) +
-Wie man sehen kann benötigt mount keine Informationen über die Verschlüsselung, es verwendet einfach das vom Device Mapper erstellte Gerät wie eine normale Partition. +
-Nach dem Entsperren kann man über dieses Gerät auf alle Daten auf der Partition zugreifen. Möchte man die Partition vorübergehend nicht mehr verwenden kann man sie sperren dazu wird sie ausgehängt und anschließend die Device-Mapper-Verknüpfung gelöscht: +
-sirius:~# umount /mnt +
-sirius:~# cryptsetup luksClose /dev/mapper/hda3_crypt +
-sirius:~# ls /dev/mapper +
-control +
-Nach oben  +
-Einbinden automatisieren - crypttab +
-Auf die oben beschriebene Art und Weise kann man die verschlüsselten Partitionen von Hand aktivieren und deaktivieren. Auf die Dauer ist das aber sehr lästig. cryptsetup sieht allerdings eine Möglichkeit vor, Partitionen automatisch beim Hochfahren des Systems zu entsperren. Dazu trägt man diese in der Datei /etc/crypttab ein. Folgende Informationen können dort eingetragen werden: +
-Der Name der Device-Mapper-Verknüpfung, hier also  hda3_crypt +
-Der Name der verschlüsselten Partition, hier  /dev/hda3 +
-Der Pfad zu einer Schlüsseldatei, oder bei Verwendung eines Passwortes stattdessen none +
-Angaben über die verwendete Verschlüsselung - da diese Informationen bei LUKS im Anfangsbereich der Partition gespeichert werden in diesem Fall einfach nur luks +
-Die komplette Zeile für das oben genannte Beispiel würde also so aussehen: +
-# <target name> <source device>         <key file>      <options> +
-     hda3_crypt       /dev/hda3               none           luks+
  
-Beim nächsten Neustart des Systems wird cryptsetup automatisch die Partition entsperren und dabei nach dem Passwort fragen. Um die Partition beim Systemstart automatisch einzuhängen muss nur noch ein Eintrag in der /etc/fstab angelegt werden, zum Beispiel: +[[shell:in-out|Ein- und Ausgaben umleiten]]
-/dev/mapper/hda3_crypt    /mnt    ext3    auto,defaults    0    0 +
-Nach oben  +
-Datei statt Passwort als Schlüssel +
-Im vorangegangenen Beispiel wurde ein Passwort zum Entsperren der verschlüsselten Partition benutzt. Der Debian-Installer kann ebenfalls nur verschlüsselte Partitionen mit Passwörtern einrichten (oder, im Falle von Swap, mit Zufallsschlüsseln). +
-Alternativ kann man aber auch eine Datei, zum Beispiel auf einem USB-Stick, als Schlüssel verwenden. Während man bei der Benutzung von Passwörtern diese (für jede verschlüsselte Partition) beim Hochfahren eintippen muss, bleibt einem bei Schlüsseldateien diese Arbeit erspart - man muss nur dafür sorgen, daß auf den Schlüssel zugegriffen werden kann (zum Beispiel indem der USB-Stick eingesteckt wird). +
-Wie oben geschrieben kann man für eine LUKS-Partition bis zu acht Passwörter oder Schlüssel verwenden. Vom Debian-Installer oder von luksformat angelegte Partitionen können also mit einer Schlüsseldatei nachgerüstet werden. Die dazu nötigen Schritte lassen sich mit cryptsetup erledigen. Zunächst einmal muss aber eine Schlüsseldatei erstellt werden. Sie sollte nicht zu klein sein (unsicher), aber auch nicht zu groß (lange Dauer beim Entsperren). Ich verwende eine vier kilobyte große Datei: +
-sirius:~# dd if=/dev/urandom of=/media/usb/key bs=4k count=1 +
-1+0 Datensätze ein +
-1+0 Datensätze aus +
-4096 Bytes (4,1 kB) kopiert, 0,0018383 Sekunden, 2,2 MB/s +
-Als nächstes muss der Schlüssel der LUKS-Partition hinzugefügt werden. Dabei wird das bestehende Passwort eingegeben und damit dann der Datenschlüssel dechiffriert. Dann wird er durch die Schlüsseldatei neu chiffriert und in einer freien Speicherstelle gesichert: +
-cryptsetup luksAddKey /dev/hda3 /media/usb/key +
-Enter any LUKS passphrase: +
-key slot 0 unlocked. +
-Command successful +
-Nun kann testweise die Partition mit dem neuen Schlüssel statt dem Passwort entsperrt werden: +
-sirius:~# cryptsetup luksOpen /dev/hda3 hda3_crypt --key-file /media/usb/key +
-key slot 1 unlocked. +
-Command successful +
-Damit kann die Partition ähnlich wie mit einem Passwort manuell entsperrt werden. Dieser Vorgang lässt sich aber auch über die crypttab automatisieren. An dieser Stelle kommt nun die keyfile-Option ins Spiel. Aus dem vorherigen Beispiel wird: +
-# <target name> <source device>         <key file>      <options> +
-     hda3_crypt       /dev/hda3     /media/usb/key           luks +
-Das ist allerdings noch nicht alles. cryptsetup muss angewiesen werden, das Medium mit dem Schlüssel vor dem Abarbeiten der crypttab zu mounten. Dazu muss es einen Eintrag für das Medium in der /etc/fstab geben, außerdem muss die der Mountpunkt in /etc/default/cryptdisks eingetragen werden: +
-CRYPTDISKS_MOUNT="/media/usb" +
-Nach dem Entsperren aller verschlüsselten Partitionen wird das Medium automatischwieder ausgehängt. Zur Sicherheit kann nun noch die initial ram disk neu gebaut werden: +
-update-initramfs -u +
-Das Passwort kann auch weiterhin als Ersatz beibehalten (oder mit cryptsetup luksDelKey entfernt) werden. Ist der USB-Stick mit dem Schlüssel eingesteckt, fährt das System ohne Benutzereingaben hoch und entsperrt alle in der crypttab eingetragenen Partitionen selbstständig. Diese Konfiguration funktioniert für alle Partitionen außer der Root-Partition. Da auf dieser Partition gerade die zum Entsperren notwendigen Programme liegen sind hier einige weitere Maßnahmen notwendig.+
  
 +[[shell:shortcuts|Tastaturabkürzungen]]
 +
 +[[shell:input Password|Passworteingabe über die Shell]]
 +
 +[[shell:find|Text in einer Datei suchen]]
 +
 +[[shell:email|eMail per Shellscript verschicken]]
 +
 +
 +[[shell:explode|String nach bestimmten Zeichen splitten/cutten /wie explode in PHP)]]
 +
 +[[http://tldp.org/LDP/abs/html/complexfunct.html|Complex Functions and Function Complexities]]
 +
 +A quick guide to writing scripts using the bash shell:
 +[[http://pegasus.rutgers.edu/~elflord/unix/bash-tute.html]]
 +
 +Command Substitution:
 +[[http://www.injunea.demon.co.uk/pages/page206.htm]]
 +
 +The Linux Terminal - a Beginners' Bash:
 +[[http://linux.org.mt/article/terminal]]
 +
 +Bash Shell Programming in Linux:
 +[[http://www.arachnoid.com/linux/shell_programming.html]]
 +
 +=== bash shell script: ===
 +
 +
 +wichtig, dass am Anfang:
 +<code>
 +#!/bin/bash
 +</code>
 +Das ist wichtig, weil der User, sollte er eine andere Shell als Bash gewält haben, eine andere Syntax vorherrschen kann.
 +Variablen:
 +<code>
 +x="hallo" # wichtig: KEINE Leerzeichen bei dem '='
 +</code>
 +
 +$1, $2 etc. 1., 2., etc Parameter beim Aufruf
 +Um Variablen zu unterscheiden (z.B. /hallo/wer$binich/denn ist falsch, weil Interpreter nicht
 +weiss, wo Variable endet). Richtig: /hallo/wer${bin}ich/denn
 +
 +Quoting:
 +bei echo '$x' kommt raus: $x
 +
 +bei echo "$x" kommt raus: hallo
 +
 +" interpretiert Variablen,
 +' tut das nicht! (sondern 'wörtlich')
 +
 +parameter /variables substitution:
 +http://www.unet.univie.ac.at/aix/aixuser/usrosdev/parameter_subst.htm#AC8A8CF676shar
 +
 +nette einfhrung:
 +http://www.tu-berlin.de/zrz/information/paper/instant/sh/sh-03.html
 +
 +Werte eines Files in Veriablen einlesen
 +Achtung: Dieses Skript liest wortweise ein (Leerzeichen getrennt) und ignoriert
 +Leerzeichen/Leerzeilen
 +
 +<code bash>
 +#!/bin/sh
 +ISOPATH=/data1/iso
 +DESTINATION=/mnt/iso
 +ls ${ISOPATH} > /tmp/isomount.tmp
 +index=1
 +ISO=""
 +for x in `cat /tmp/isomount.tmp`
 +do
 + ISO[index]="$x"
 + index=`expr $index +1`
 +done
 +for y in `echo ${ISO[@]}`
 +do
 + mkdir -p ${DESTINATION}/y
 + mount -o loop -t iso9660 ${ISOPATH}/y ${DESTINATION}/y
 +done
 +exit 0
 +</code>
 +
 +Datei zeile für zeile lesen: 
 +<code bash>
 +script <datei
 +while [ true ]
 + do
 +         read X  #read a line
 +         if [ $? -ne 0 ] #Break if EOF
 +         then
 +                 break
 +         fi
 +         echo $X #Your action goes here.
 + done < tmp.txt
 +</code>
 +
 +gut:
 +
 +[[http://steve-parker.org/sh/bourne.html]]
 
Nach oben
shell.1208873742.txt.gz · Zuletzt geändert: 2024/02/29 13:35 (Externe Bearbeitung)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0
DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp   Dogecoin Donations Accepted Here    DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp  DFmW2CEce3htPL1uNQuHUVu4Tk6WXigFQp