Verschluesselung: dm-crypt/luks unter openSUSE: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (aes-cbc durch aes-xts ersetzt (http://www.heise.de/security/artikel/Erfolgreicher-Angriff-auf-Linux-Verschluesselung-2072199.html))
 
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
  
 
= Verschlüsselung: dm-crypt/luks unter openSUSE =
 
= Verschlüsselung: dm-crypt/luks unter openSUSE =
Dieser Artikel beschreibt das Verschlüsseln einer '''/home'''-Partion mit '''cryptsetup''' (mit LUKS-Erweiterung) mit einem Key-File,<br/>dass auf einer ebenfalls verschlüsselten Partition auf einem USB-Stick gespeichert ist und während des Bootvorgangs eingebunden wird.<br/>
+
 
Dabei wird für den USB-Stick ein Passwort abgefragt um eine Partition zu mounten auf der verschiedene Schlüssel liegen,<br/>mit denen weitere Partitionen automatisch eingebunden werden können.<br/>
+
Dieser Artikel beschreibt das Verschlüsseln einer '''<code>/home</code>'''-Partion mit '''cryptsetup''' (mit LUKS-Erweiterung) mit einem Key-File, das auf einer ebenfalls verschlüsselten Partition auf einem USB-Stick gespeichert ist und während des Bootvorgangs eingebunden wird.<br/>
Desweiteren wird beim Booten eine verschlüsselte '''swap'''-Partitionen angelegt.<br/>
+
Dabei wird für den USB-Stick ein Passwort abgefragt, um eine Partition zu mounten, auf der verschiedene Schlüssel liegen, mit denen weitere Partitionen automatisch eingebunden werden können.<br/>
<br/>
+
Des Weiteren wird beim Booten eine verschlüsselte '''swap'''-Partitionen angelegt.
{{Box Hinweis||Dieser Artikel beschreibt die Einrichtung einer verschlüsselten Partition unter openSUSE,<br/>sollte aber mit geringem Aufwand auch auf andere Distribution übertragbar sein.}}
+
 
 +
{{Box Hinweis||Dieser Artikel beschreibt die Einrichtung einer verschlüsselten Partition unter openSUSE, sollte aber mit geringem Aufwand auch auf andere Distribution übertragbar sein.}}
  
 
== Allgemeines ==
 
== Allgemeines ==
  
<br/>
+
== Voraussetzungen ==
  
== Voraussetzungen ==
 
<br/>
 
 
=== Installation von cryptsetup (mit LUKS-Erweiterung) ===
 
=== Installation von cryptsetup (mit LUKS-Erweiterung) ===
<br/>
+
 
Unter openSUSE 10.2 ist das Programm '''cryptsetup''' im Paket
+
Unter openSUSE 10.2 ist das Programm '''<code>cryptsetup</code>''' im Paket '''<code>util-linux-crypt</code>''' enthalten.
util-linux-crypt
+
 
enthalten.<br/><br/>
+
Bis einschließlich SuSE Linux 10.1 gibt es das Paket '''<code>cryptsetup-luks</code>'''
Bis einschließlich SuSE Linux 10.1 gibt es das Paket
+
bei [[YaST-Installationsquellen für SuSE Linux#Packman_.28Die_Multimediaf.C3.A4higkeiten_von_SuSE_Linux_erweitern.29|Packman]].
cryptsetup-luks
 
bei [[YaST-Installationsquellen für SuSE Linux#Packman_.28Die_Multimediaf.C3.A4higkeiten_von_SuSE_Linux_erweitern.29|Packman]].<br/>
 
<br/>
 
  
 
=== Unterstützung von dm-crypt und AES im Kernel ===
 
=== Unterstützung von dm-crypt und AES im Kernel ===
<br/>
 
Um den Device-Mapper '''dm-crypt''' und AES-Verschlüsselung zu nutzen müssen folgende Optionen im Kernel aktiviert sein:
 
<pre>
 
Code maturity level options --->
 
  
  [*] Prompt for development and/or incomplete code/drivers
+
Um den Device-Mapper '''dm-crypt''' und AES-Verschlüsselung zu nutzen, müssen folgende Optionen im Kernel aktiviert sein:
 +
 
 +
Code maturity level options --->
 +
  [*] Prompt for development and/or incomplete code/drivers
  
  Device Drivers --> RAID and LVM Support -->  
+
Device Drivers --> RAID and LVM Support -->  
  [*] Multiple devices driver support (RAID and LVM)  
+
  [*] Multiple devices driver support (RAID and LVM)  
    <*> Device mapper support
+
    <M> Device mapper support
    <*> Crypt target support
+
    <M> Crypt target support
 +
 
 +
Cryptographic Options -->
 +
  <M> Cryptographic API
 +
    <M> AES cipher algorithims ''oder''
 +
    <M> AES cipher algorithims (i586) ''oder''
 +
    <M> AES cipher algorithims (x86_64)
 +
    <M> SHA256 digest algorithm
 +
 
 +
Diese Optionen sind im SUSE-Standardkernel bereits aktiviert. Nur wer einen eigenen Kernel verwendet, muss diese Optionen berücksichtigen. Für i586 und x86_64 gibt es optimierte Versionen auf Assemblerbasis, es empfiehlt sich diese zu verwenden.
  
  Cryptographic Options -->
 
    <*> AES cipher algorithims (i586)
 
    <*> SHA256 digest algorithm
 
</pre>Diese Optionen sind im SUSE-Standardkernel bereits aktiviert.<br/>
 
Nur wer einen eigenen Kernel verwendet muss diese Optionen berücksichtigen.<br/>
 
<br/>
 
 
Kontrollieren lassen sich diese Einstellungen mit:
 
Kontrollieren lassen sich diese Einstellungen mit:
 +
 
  zcat /proc/config.gz | egrep 'DM_CRYPT|_AES|SHA256|CRYPTO='
 
  zcat /proc/config.gz | egrep 'DM_CRYPT|_AES|SHA256|CRYPTO='
 +
 
oder
 
oder
 +
 
  egrep 'DM_CRYPT|_AES|SHA256|CRYPTO=' /boot/config-*-default
 
  egrep 'DM_CRYPT|_AES|SHA256|CRYPTO=' /boot/config-*-default
{{Box Beispiel|/proc/config.gz|<pre># zcat /proc/config.gz | egrep 'DM_CRYPT|_AES|SHA256|CRYPTO='
 
  
CONFIG_DM_CRYPT=m
+
{{Box Beispiel|/proc/config.gz|
CONFIG_CRYPTO=y
+
# zcat /proc/config.gz | egrep 'DM_CRYPT|_AES|SHA256|CRYPTO='
CONFIG_CRYPTO_SHA256=m
+
CONFIG_CRYPTO_AES=m
+
CONFIG_DM_CRYPT=m
CONFIG_CRYPTO_AES_X86_64=m</pre>
+
CONFIG_CRYPTO=y
 +
CONFIG_CRYPTO_SHA256=m
 +
CONFIG_CRYPTO_AES=m
 +
CONFIG_CRYPTO_AES_X86_64=m
 
}}
 
}}
<br/>
 
  
 
== Einbinden des USB-Sticks ==
 
== Einbinden des USB-Sticks ==
Um den USB-Stick immer über dasselbe Device ansprechen zu können, muss eine entsprechende UDEV-Regel erstellt, werden,<br/>die automatisch einen Symlink auf den Stick (und die jeweiligen Partitionen) anlegt.<br/>
 
<br/>
 
Zuerst ermittelt man die Seriennummer des USB-Sticks<br/>(anhand dieser Nummer kann das Device später eindeutig zugeordnet werden):<br/>
 
udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep ATTRS{serial}
 
{{Box Beispiel|USB-Device: /dev/sdc|<pre># udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep ATTRS{serial}
 
  
ATTRS{serial}=="076A1A939BC2"
+
Um den USB-Stick immer über dasselbe Device ansprechen zu können, muss eine entsprechende udev-Regel erstellt, werden, die automatisch einen Symlink auf den Stick (und die jeweiligen Partitionen) anlegt.
ATTRS{serial}=="0000:00:02.1"</pre>
+
 
 +
Zuerst ermittelt man die Seriennummer des USB-Sticks (anhand dieser Nummer kann das Device später eindeutig zugeordnet werden):
 +
 
 +
udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep "ATTRS{serial}"
 +
 
 +
{{Box Beispiel|USB-Device: /dev/sdc|
 +
# udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep "ATTRS{serial}"
 +
 +
ATTRS{serial}=="076A1A939BC2"
 +
ATTRS{serial}=="0000:00:02.1"
 
}}
 
}}
Welche Seriennummer nun zum USB-Stick gehört ermittelt man mit:<br/>
+
Welche Herstellerbezeichnung nun zum USB-Stick gehört ermittelt man mit:
udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep ATTRS{product}
 
{{Box Beispiel|USB-Device: /dev/sdc|<pre>#  udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep ATTRS{product}
 
  
ATTRS{product}=="USB DISK 28X"
+
udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep "ATTRS{product}"
ATTRS{product}=="USB2.0 Hub"
+
 
ATTRS{product}=="EHCI Host Controller"</pre>
+
{{Box Beispiel|USB-Device: /dev/sdc|
In diesem Fall gehört also die erste Seriennummer zum USB-Stick.<br/>
+
# udevinfo -a -p `udevinfo -q path -n /dev/sdc` | grep "ATTRS{product}"
Also: <pre>ATTRS{serial}=="076A1A939BC2"</pre>
+
 +
ATTRS{product}=="USB DISK 28X"
 +
ATTRS{product}=="USB2.0 Hub"
 +
ATTRS{product}=="EHCI Host Controller"
 +
 
 +
In diesem Fall gehört also die erste Seriennummer zum USB-Stick. Also:  
 +
 
 +
ATTRS{serial}=="076A1A939BC2"
 
}}
 
}}
 +
Anschließend eine udev-Regel erstellen. Mit einem beliebigen Editor die Datei <code>/etc/udev/rules.d/01-usb-crypto.rules</code> mit dem Inhalt
  
Anschließend eine UDEV-Regel erstellen:<br/>
+
  # udev-rule for encrypted usb-pen
Mit einem beliebigen Editor die Datei
+
  /etc/udev/rules.d/01-usb-crypto.rules
+
SUBSYSTEMS=="usb", ATTRS{serial}=="<Seriennummer>", KERNEL=="sd*", NAME="%k", SYMLINK+="<Device-Name>%n"
mit dem Inhalt
+
 
<pre># udev-rule for encrypted usb-pen
+
erstellen. Wobei
  
SUBSYSTEMS=="usb", ATTRS{serial}=="<Seriennummer>", KERNEL=="sd*", NAME="%k", SYMLINK+="<Device-Name>%n"</pre>
 
erstellen.<br/><br/>
 
Wobei
 
 
  ATTRS{serial}=="<Seriennummer>"
 
  ATTRS{serial}=="<Seriennummer>"
natürlich durch die Seriennummer des eigenen USB-Sticks ersetzt werden muss<br/>
+
 
und mit
+
natürlich durch die Seriennummer des eigenen USB-Sticks ersetzt werden muss und mit
 +
 
 
  SYMLINK+="<Device-Name>%n"
 
  SYMLINK+="<Device-Name>%n"
festgelegt wird unter welchem Devicenamen der Stick später verwendet wird.<br/><br/>
 
{{Box Beispiel|Seriennummer: 076A1A939BC2, USB-Device: /dev/usbcrypt|<pre># udev-rule for encrypted usb-pen
 
  
 +
festgelegt wird, unter welchem Devicenamen der Stick später verwendet wird.
 +
 +
{{Box Beispiel|Seriennummer: 076A1A939BC2, USB-Device: /dev/usbcrypt|
 +
<pre># udev-rule for encrypted usb-pen
 
SUBSYSTEMS=="usb", ATTRS{serial}=="076A1A939BC2", KERNEL=="sd*", NAME="%k", SYMLINK+="usbcrypt%n"</pre>
 
SUBSYSTEMS=="usb", ATTRS{serial}=="076A1A939BC2", KERNEL=="sd*", NAME="%k", SYMLINK+="usbcrypt%n"</pre>
Der komplette Stick kann in diesem Fall mit
 
<pre>/dev/usbcrypt</pre>
 
die erste Partition mit
 
<pre>/dev/usbcrypt1</pre>
 
die zweite Partition mit
 
<pre>/dev/usbcrypt2</pre>
 
usw. angesprochen werden.}}
 
  
Anschließend die UDEV-Regeln mit
+
Der komplette Stick kann in diesem Fall mit <code>/dev/usbcrypt</code>, die erste Partition mit <code>/dev/usbcrypt1</code>, die zweite Partition mit <code>/dev/usbcrypt2</code>, usw. angesprochen werden.
 +
}}
 +
Anschließend die udev-Regeln mit
 +
 
 
  udevcontrol reload_rules
 
  udevcontrol reload_rules
neu laden und den USB-Stick einstecken.<br/>
 
<br/>
 
  
Unter
+
neu laden und den USB-Stick einstecken.
/dev
+
 
sollte dann mindestens (je nachdem wieviele Partitionen auf dem Stick existieren), das Device
+
Unter <code>/dev</code> sollte dann mindestens (je nachdem wieviele Partitionen auf dem Stick existieren), das Device <code>/dev/usbcrypt</code> auftauchen unter dem der Stick dann - unabhängig von dem echten Device, dass z.B. bei '''<code>fdisk&nbsp;-l</code>''' angezeigt wird - angesprochen werden kann.
/dev/usbcrypt
 
auftauchen unter dem der Stick dann - unabhängig von dem echten Device, dass z.B. bei '''fdisk -l''' angezeigt wird - angesprochen werden kann.<br/><br/>
 
  
 
== USB-Stick partitionieren/formatieren ==
 
== USB-Stick partitionieren/formatieren ==
  
Zum Partitionieren bieten sich diverse Programme an:<br/>
+
Zum Partitionieren bieten sich diverse Programme an:
*Konsole:<br/>
+
 
<pre>fdisk
+
*Konsole:
cfdisk
+
**fdisk
sfdisk
+
**cfdisk
parted</pre>
+
**sfdisk
*GUI:<br/>
+
**parted
<pre>GParted (empfohlen)
+
*GUI:
QtParted</pre>
+
**GParted (empfohlen)
Es wird mindestens eine Partition benötigt, auf der später die Schlüssel (Keys) gespeichert werden.<br/><br/>
+
**QtParted
Im folgenden Beispiel werden auf einem <u>'''leeren'''</u> USB-Stick zwei neue Partitionen angelegt.<br/>
+
 
Auf der ersten Partition (50MB) wird später der Schlüssel für die /home-Partition gespeichert - die zweite kann für Daten genutzt werden (unverschlüsselt).<br/>
+
Es wird mindestens eine Partition benötigt, auf der später die Schlüssel (Keys) gespeichert werden. Im folgenden Beispiel werden auf einem <u>'''leeren'''</u> USB-Stick zwei neue Partitionen angelegt.<br />
 +
Auf der ersten Partition (50MB) wird später der Schlüssel für die <code>/home</code>-Partition gespeichert - die zweite kann für Daten genutzt werden (unverschlüsselt).
 +
 
 
{{Box Achtung||Mit der folgenden Eingabe werden alle Daten auf dem Stick gelöscht!}}
 
{{Box Achtung||Mit der folgenden Eingabe werden alle Daten auf dem Stick gelöscht!}}
{{Box Beispiel|Anlegen von zwei Partitionen auf einem leeren/neuen USB-Stick mitt sfdisk|<pre>sfdisk -uM /dev/usbcrypt << "EOF"
+
{{Box Beispiel|Anlegen von zwei Partitionen auf einem leeren/neuen USB-Stick mit sfdisk|
 +
sfdisk -uM /dev/usbcrypt <<EOF
 +
0,50,L,+
 +
,,L
 +
EOF
 +
}}
 +
Anschließend wird die <u>zweite</u> Partition (unverschlüsselte Datenpartition) formatiert:
 +
 
 +
{{Box Beispiel|Partition '''/dev/usbcrypt2''' mit dem '''ext3'''-Dateisystemformatieren|
 +
mkfs.ext3 -L Daten -c /dev/usbcrypt2
 +
tune2fs -m 0 /dev/usbcrypt2
 +
tune2fs -c 0 -i 0 /dev/usbcrypt2
 +
tune2fs -O dir_index /dev/usbcrypt2
 +
tune2fs -o journal_data /dev/usbcrypt2
 +
e2fsck -D /dev/usbcrypt2
  
0,50,L,+
+
Damit werden ein '''ext3'''-Dateisystem erzeugt, der für root reservierte Platz auf 0%, die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:
  
,,L
+
man tune2fs
  
EOF</pre>
+
Anschließend wird das Dateisystem noch überprüft.
}}<br/>
+
}}
Anschließend wird die <u>zweite</u> Partition (unverschlüsselte Datenpartition) formatiert:<br/>
+
Für die formatierte Partition noch einen Eintrag in der '''<code>/etc/fstab</code>''' anlegen. Danach noch den den Mountpoint erstellen und die Partition mounten.
{{Box Beispiel|Partition '''/dev/usbcrypt2''' mit dem '''ext3'''-Dateisystemformatieren|<pre>mkfs.ext3 -L Daten -c /dev/usbcrypt2
 
  
tune2fs -m 0 /dev/usbcrypt2
+
{{Box Beispiel|Partition '''/dev/usbcrypt2''' einbinden|In der <code>/etc/fstab</code> die Zeile
  
tune2fs -c 0 -i 0 /dev/usbcrypt2
+
/dev/usbcrypt2 /media/daten  ext3  noauto,noexec,nodev  0 0
  
tune2fs -O dir_index /dev/usbcrypt2
+
einfügen, den Mountpoint erzeugen
  
tune2fs -o journal_data /dev/usbcrypt2
+
mkdir -p /media/daten
  
e2fsck -D /dev/usbcrypt2</pre>Damit werden ein '''ext3'''-Dateisystem erzeugt, der für root reservierte Platz auf 0%,<br/>die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt<br/> und die automatischen Dateisystemchecks deaktiviert.<br/>
+
und die Partition einbinden
Für Einzelheiten zu den Optionen siehe:<br/>
+
 
<pre>man tune2fs</pre>
+
mount /media/daten
Anschließend wird das Dateisystem noch überprüft.}}
+
}}
Für die formatierte Partition noch einen Eintrag in der '''/etc/fstab''' anlegen.<br/>
 
Danach noch den den Mountpoint erstellen und die Partition mounten.<br/>
 
{{Box Beispiel|Partition '''/dev/usbcrypt2''' einbinden|In der <pre>/etc/fstab</pre>
 
die Zeile
 
<pre>/dev/usbcrypt2            /media/daten      ext3        noauto,noexec,nodev                  0  0</pre>
 
einfügen, den Mountpoint erzeugen<br/>
 
<pre>mkdir -p /media/daten</pre>
 
und die Partition einbinden<br/>
 
<pre>mount /media/daten</pre>}}
 
<br/>
 
  
 
== Verschlüsselte Partitionen anlegen ==
 
== Verschlüsselte Partitionen anlegen ==
<br/>
+
 
 
=== Vorbereitung ===
 
=== Vorbereitung ===
<br/>
+
 
Benötigte Module laden:<br/>
+
Benötigte Module laden:
*Device-Mapper:<br/>
+
*Device-Mapper:
 +
 
 
  modprobe dm-crypt
 
  modprobe dm-crypt
*AES:<br/>
+
 
 +
*AES:
 +
 
 
  modprobe aes
 
  modprobe aes
<br/>
+
modprobe aes-i586
 +
modprobe aes-x86_64
 +
 
 +
(Je nachdem, welches AES-Modul zutrifft.)
  
 
=== USB-Stick ===
 
=== USB-Stick ===
<br/>
+
 
Zuerst wird die erste Partition auf dem USB-Stick verschlüsselt auf der anschließend der Schlüssel für die /home-Partition gespeichert wird.<br/>
+
Zuerst wird die erste Partition auf dem USB-Stick verschlüsselt auf der anschließend der Schlüssel für die <code>/home</code>-Partition gespeichert wird. Die Partition mit AES verschlüsseln:
Die Partition mit AES verschlüsseln:
+
 
  cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/usbcrypt1
+
  cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/usbcrypt1
*Mit '''YES''' bestätigen.<br/>
+
 
*Passwort '''eingeben'''.<br/>
+
*Mit '''YES''' bestätigen
*Passwort '''bestätigen'''.<br/>
+
*Passwort '''eingeben'''
<br/>
+
*Passwort '''bestätigen'''
Die neu erstellte Partition kann nun geöffnet werden:<br/>
+
 
 +
Die neu erstellte Partition kann nun geöffnet werden:
 +
 
 
  cryptsetup luksOpen /dev/usbcrypt1 usbkeys
 
  cryptsetup luksOpen /dev/usbcrypt1 usbkeys
*Passwort '''eingeben'''.<br/>
 
Die verschlüsselte Partition wurde damit auf '''usbkeys''' "gemappt".<br/>
 
Unter<br/>
 
/dev/mapper
 
sollte nun das Device<br/>
 
usbkeys
 
auftauchen.<br/><br/>
 
Dieses Device kann nun formatiert werden:<br/>
 
{{Box Beispiel|Partition '''/dev/mapper/usbkeys''' mit dem '''ext3'''-Dateisystemformatieren|<pre>mkfs.ext3 -L Keys -c /dev/mapper/usbkeys
 
  
tune2fs -m 0 /dev/mapper/usbkeys
+
*Passwort '''eingeben'''
 +
 
 +
Die verschlüsselte Partition wurde damit auf '''usbkeys''' "gemappt". Unter <code>/dev/mapper/</code> sollte nun das Device <code>usbkeys</code> auftauchen. Dieses Device kann nun formatiert werden:
 +
 
 +
{{Box Beispiel|Partition '''/dev/mapper/usbkeys''' mit dem '''ext3'''-Dateisystemformatieren|
 +
mkfs.ext3 -L Keys -c /dev/mapper/usbkeys
 +
tune2fs -m 0 /dev/mapper/usbkeys
 +
tune2fs -c 0 -i 0 /dev/mapper/usbkeys
 +
tune2fs -O dir_index /dev/mapper/usbkeys
 +
tune2fs -o journal_data /dev/mapper/usbkeys
 +
e2fsck -D /dev/mapper/usbkeys
 +
 
 +
Damit werden ein '''ext3'''-Dateisystem erzeugt, der für root reservierte Platz auf 0%, die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:
 +
 
 +
man tune2fs
 +
 
 +
Anschließend wird das Dateisystem noch überprüft.
 +
}}
 +
Für die formatierte Partition wird noch Eintrag in der '''<code>/etc/fstab</code>''' angelegt (sicherheitshalber wird die Partition Standardmäßig nur '''read-only''' eingebunden). Danach noch den den Mountpoint erstellen und die Partition mounten (dabei wird die Partition ausnahmsweise auch schreibbar eingebunden, um anschließend den Schlüssel speichern zu können).
 +
 
 +
{{Box Beispiel|Partition '''/dev/mapper/usbkeys''' einbinden|In der <code>/etc/fstab</code> die Zeile
  
tune2fs -c 0 -i 0 /dev/mapper/usbkeys
+
/dev/mapper/usbkeys /media/keys  ext3  ro,noauto,noexec,nodev  0 0
  
tune2fs -O dir_index /dev/mapper/usbkeys
+
einfügen, den Mountpoint erzeugen
  
tune2fs -o journal_data /dev/mapper/usbkeys
+
mkdir -p /media/keys
 +
 
 +
die Partition einbinden
 +
 
 +
mount /media/keys
  
e2fsck -D /dev/mapper/usbkeys</pre>Damit werden ein '''ext3'''-Dateisystem erzeugt, der für root reservierte Platz auf 0%,<br/>die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt<br/> und die automatischen Dateisystemchecks deaktiviert.<br/>
 
Für Einzelheiten zu den Optionen siehe:<br/>
 
<pre>man tune2fs</pre>
 
Anschließend wird das Dateisystem noch überprüft.}}
 
Für die formatierte Partition wird noch Eintrag in der '''/etc/fstab''' angelegt (sicherheitshalber wird die Partition Standardmäßig nur '''readonly''' eingebunden).<br/>
 
Danach noch den den Mountpoint erstellen und die Partition mounten (dabei wird die Partition ausnahmsweise auch schreibbar eingebunden, um anschließend den Schlüssel speichern zu können).<br/>
 
{{Box Beispiel|Partition '''/dev/mapper/usbkeys''' einbinden|In der <pre>/etc/fstab</pre>
 
die Zeile
 
<pre>/dev/mapper/usbkeys            /media/keys      ext3        ro,noauto,noexec,nodev                  0  0</pre>
 
einfügen, den Mountpoint erzeugen<br/>
 
<pre>mkdir -p /media/keys</pre>
 
die Partition einbinden<br/>
 
<pre>mount /media/keys</pre>
 
 
und "beschreibbar" 'remounten''
 
und "beschreibbar" 'remounten''
<pre>mount -o rw,remount /media/keys</pre>}}
+
 
<br/>
+
mount -o remount,rw /media/keys
 +
}}
  
 
=== /home-Partition ===
 
=== /home-Partition ===
<br/>
+
 
 
==== Vorbereitung ====
 
==== Vorbereitung ====
<br/>
+
 
Bevor nun die /home-Partition verschlüsselt wird, muss noch mit '''dd''' ein entsprechender Key erzeugt werden:<br/>
+
Bevor nun die /home-Partition verschlüsselt wird, muss noch mit '''<code>dd</code>''' ein entsprechender Key erzeugt werden:
{{Box Beispiel|Schlüssel für die /home-Partition erstellen|In der <pre>dd if=/dev/urandom of=/media/keys/home.key bs=1k count=2</pre>
+
 
Schlüssel nur für '''root''' lesbar machen:
+
{{Box Beispiel|Schlüssel für die '''/home'''-Partition erstellen|Mit
<pre>chown 0:0 /media/keys/home.key
+
<pre>dd if=/dev/urandom of=/media/keys/home.key bs=1k count=2</pre>
chmod 0400 /media/keys/home.key</pre>}}
+
einen Key erzeugen. Diesen nur für '''root''' lesbar machen:
Da beim Verschlüsseln einer Partition die vorhandenen Daten gelöscht werden, muss das vorhandene Homeverzeichnis zuvor gesichert werden:<br/>
+
<pre>chown root:root /media/keys/home.key
{{Box Achtung||Auf der Sicherungs-Partition muss genügend Platz für das Homeverzeichnis vorhanden sein!}}
+
chmod 0400 /media/keys/home.key</pre>
Das Homeverzeichnis mit '''tar''' auf eine andere Partition (in diesem Fall die root-Partition) sichern:
+
}}
{{Box Beispiel|Homeverzeichnis mit '''tar''' auf '''/media''' sichern|<pre>tar -cjpvf /media/home.tar.bz2 /home</pre>}}
+
Da beim Verschlüsseln einer Partition die vorhandenen Daten gelöscht werden, muss das vorhandene Homeverzeichnis zuvor gesichert werden:
Anschließend kann die '''/home'''-Partition ausgehängt werden:<br/>
+
 
 +
{{Box Achtung||Auf der Sicherungs-Partition muss genügend Platz für das Homeverzeichnis vorhanden sein!
 +
}}
 +
Das Homeverzeichnis mit '''<code>tar</code>''' auf eine andere Partition (in diesem Fall z.B. die root-Partition) sichern:
 +
 
 +
{{Box Beispiel|Homeverzeichnis mit '''tar''' auf '''/media''' sichern|
 +
tar -cjpvf /media/home.tar.bz2 /home
 +
}}
 +
Anschließend kann die '''<code>/home</code>'''-Partition ausgehängt werden:
 +
 
 
  umount /home
 
  umount /home
<br/>
 
  
 
==== Verschlüsselung ====
 
==== Verschlüsselung ====
<br/>
+
 
 
Jetzt kann die Partition verschlüsselt werden:
 
Jetzt kann die Partition verschlüsselt werden:
{{Box Hinweis||Um die '''/home'''-Partition im Notfall auch ohne Schlüssel mounten zu können wird die Partition zuerst mit einer Passphrase verschlüsselt.<br>
+
{{Box Hinweis||Um die '''/home'''-Partition im Notfall auch ohne Schlüssel mounten zu können wird die Partition zuerst mit einer Passphrase verschlüsselt. Anschließend wird der Schlüssel als zusätzlicher Key hinzugefügt (ein Feature der LUKS-Erweiterung).}}
Anschließend wird der Schlüssel als zusätzlich Key hinzugefügt (ein Feature der LUKS-Erweiterung).}}
+
Im folgenden Beispiel wird die '''<code>/home</code>'''-Partition '''<code>/dev/hda3</code>''' verschlüsselt:
Im folgenden Beispiel wird die '''/home'''-Partition '''/dev/hda3''' verschlüsselt:
+
 
 
{{Box Achtung||Mit der folgenden Eingabe werden alle Daten auf der Partition gelöscht!}}
 
{{Box Achtung||Mit der folgenden Eingabe werden alle Daten auf der Partition gelöscht!}}
{{Box Beispiel|Verschlüsselung mit Passwort <u>und</u> Key-File|Die Partition mit AES verschlüsseln: <pre>cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/hda3</pre>
+
{{Box Beispiel|Verschlüsselung mit Passwort <u>und</u> Key-File|Die Partition mit AES verschlüsseln:
*Mit '''YES''' bestätigen.<br/>
+
 
*Passwort '''eingeben'''.<br/>
+
cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/hda3<
*Passwort '''bestätigen'''.<br/><br/>
+
 
Schlüssel hinzufügen:<br/>
+
*Mit '''YES''' bestätigen
<pre>cryptsetup luksAddKey /dev/hda3 /media/keys/home.key</pre>
+
*Passwort '''eingeben'''
*Passwort '''eingeben'''.<br/>
+
*Passwort '''bestätigen'''
*Passwort '''bestätigen'''.}}
+
 
Die neu erstellte Partition kann nun geöffnet werden:<br/>
+
Schlüssel hinzufügen:
 +
 
 +
cryptsetup luksAddKey /dev/hda3 /media/keys/home.key
 +
 
 +
*Passwort '''eingeben'''
 +
*Passwort '''bestätigen'''
 +
}}
 +
Die neu erstellte Partition kann nun geöffnet werden:
 +
 
 
  cryptsetup -d /media/keys/home.key luksOpen /dev/hda3 home
 
  cryptsetup -d /media/keys/home.key luksOpen /dev/hda3 home
Die verschlüsselte Partition wurde damit auf '''home''' "gemappt".<br/>
 
Unter<br/>
 
/dev/mapper
 
sollte nun das Device<br/>
 
home
 
auftauchen.<br/><br/>
 
Dieses Device kann nun formatiert werden:<br/>
 
{{Box Beispiel|Partition '''/dev/mapper/home''' mit dem '''ext3'''-Dateisystemformatieren|<pre>mkfs.ext3 -L Home -c /dev/mapper/home
 
  
tune2fs -c 0 -i 0 /dev/mapper/home
+
Die verschlüsselte Partition wurde damit auf '''home''' "gemappt". Unter <code>/dev/mapper</code> sollte nun das Device <code>home</code> auftauchen. Dieses Device kann nun formatiert werden:
 +
 
 +
{{Box Beispiel|Partition '''/dev/mapper/home''' mit dem '''ext3'''-Dateisystemformatieren|
 +
mkfs.ext3 -L Home -c /dev/mapper/home
 +
tune2fs -c 0 -i 0 /dev/mapper/home
 +
tune2fs -O dir_index /dev/mapper/home
 +
tune2fs -o journal_data /dev/mapper/home
 +
e2fsck -D /dev/mapper/home
 +
 
 +
Damit werden ein '''ext3'''-Dateisystem erzeugt, die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:
 +
 
 +
man tune2fs
 +
 
 +
Anschließend wird das Dateisystem noch überprüft.
 +
}}
 +
Für die formatierte Partition noch den Eintrag in der '''<code>/etc/fstab</code>''' anlegen und danach den den Mountpoint erstellen sowie die Partition mounten.
  
tune2fs -O dir_index /dev/mapper/home
+
{{Box Beispiel|Partition '''/dev/mapper/home''' einbinden|In der <code>/etc/fstab</code> den "alten" Eintrag für '''<code>/home</code>''' von
  
tune2fs -o journal_data /dev/mapper/home
+
/dev/hda3  /home ext3  defaults  1 2
  
e2fsck -D /dev/mapper/home</pre>Damit werden ein '''ext3'''-Dateisystem erzeugt, die mount-Option '''journal_data''' sowie die Dateisystem-Option '''dir_index''' gesetzt<br/> und die automatischen Dateisystemchecks deaktiviert.<br/>
 
Für Einzelheiten zu den Optionen siehe:<br/>
 
<pre>man tune2fs</pre>
 
Anschließend wird das Dateisystem noch überprüft.}}
 
Für die formatierte Partition noch den Eintrag in der '''/etc/fstab''' anlegen und danach den den Mountpoint erstellen sowie die Partition mounten.<br/>
 
{{Box Beispiel|Partition '''/dev/mapper/home''' einbinden|In der <pre>/etc/fstab</pre>
 
den "alten" Eintrag für '''/home''' von
 
<pre>/dev/hda3            /home      ext3        defaults                  1  2</pre>
 
 
auf
 
auf
<pre>/dev/mapper/home             /home     ext3       noauto                 0   0</pre>
+
 
ändern und die Partition einbinden<br/>
+
/dev/mapper/home /home ext3 noauto 0 0
<pre>mount /home</pre>}}
+
 
<br/>
+
ändern und die Partition einbinden
 +
 
 +
mount /home
 +
}}
  
 
==== Daten zurückspielen ====
 
==== Daten zurückspielen ====
<br/>
+
 
Wenn die "neue" '''/home'''-Partition ins Dateisystem eingebunden wurde, kann das Backup des "alten" Homeverzeichnisses zurückgespielt werden:<br/>
+
Wenn die "neue" '''<code>/home</code>'''-Partition ins Dateisystem eingebunden wurde, kann das Backup des "alten" Homeverzeichnisses zurückgespielt werden:
{{Box Beispiel|Das mit '''tar''' gesicherte Homeverzeichnis wieder einspielen|<pre>cd /
+
 
tar -xjvpf /media/home.tar.bz2</pre>}}
+
{{Box Beispiel|Das mit '''tar''' gesicherte Homeverzeichnis wieder einspielen|
<br/>
+
tar -C / -xjvpf /media/home.tar.bz2
 +
}}
  
 
== Verschlüsselte Partitionen beim Systemstart einbinden ==
 
== Verschlüsselte Partitionen beim Systemstart einbinden ==
<br/>
 
  
 
=== Vorbereitung ===
 
=== Vorbereitung ===
<br/>
+
 
Um die angelegten Partitionen beim Systemstart einzubinden wird ein entsprechendes Bootscript benötigt.<br/>
+
Um die angelegten Partitionen beim Systemstart einzubinden, wird ein entsprechendes Bootscript benötigt. Folgendes Script kopieren und unter <code>/etc/init.d/boot.cryptdisks</code> speichern.
Folgendes Script kopieren und unter<br/>
+
 
/etc/init.d/boot.cryptdisks
 
speichern.<br/>
 
 
{{OpenSUSE||[[Bootscript zum Einbinden von dm-crypt/LUKS-Partitionen unter openSUSE]]}}
 
{{OpenSUSE||[[Bootscript zum Einbinden von dm-crypt/LUKS-Partitionen unter openSUSE]]}}
<br/>
 
Die Rechte für das Script setzen (ausführbar machen):<br/>
 
<pre>chown 0:0 /etc/init.d/boot.cryptdisks
 
chmod 0700 /etc/init.d/boot.cryptdisks</pre>
 
<br/>
 
<br/>
 
Anschließend die Datei
 
/etc/crypttab
 
mit folgendem Inhalt anlegen:
 
<pre># /etc/crypttab
 
# crypttab: Mappings for encrypted partitions
 
#
 
# NAME              = name for device-mapper
 
# SOURCE DEVICE    = encrypted devive
 
# MOUNTPOINT        = where to mount the encrypted partition
 
# FILESYSTEM        = filesystem-type of the device
 
# CIPHER            = encryption method: aes, twofish, ...
 
# OPTS              = options for the enccryption:
 
#                    cryptsetup LUKS: hash-length (swap-devices)
 
#                    cryptsetup: keylength bits
 
# KEY              = path to keyfile to decrypt partition
 
  
# NAME      SOURCE DEVICE          MOUNTPOINT          FILESYSTEM CIPHER                      OPTS        KEY
+
Die Rechte für das Script setzen (ausführbar machen)
 +
 
 +
  chown root:root /etc/init.d/boot.cryptdisks
 +
chmod a+x /etc/init.d/boot.cryptdisks
 +
 
 +
und das Script in den Bootprozess einbinden:
 +
 
 +
chkconfig boot.cryptdisks B
 +
 
 +
Kontrolle:
 +
 
 +
chkconfig -l boot.cryptdisks
 +
 
 +
sollte dann
  
</pre>
+
boot.cryptdisks  0:off  1:off  2:off  3:off  4:off  5:off  6:off  B:on
<br/><br/>
+
 
 +
ausgeben.
 +
 
 +
Anschließend die Datei <code>/etc/crypttab</code> mit folgendem Inhalt anlegen:
 +
 
 +
# /etc/crypttab
 +
# crypttab: Mappings for encrypted partitions
 +
#
 +
# NAME              = name for device-mapper
 +
# SOURCE DEVICE    = encrypted devive
 +
# MOUNTPOINT        = where to mount the encrypted partition
 +
# FILESYSTEM        = filesystem-type of the device
 +
# CIPHER            = encryption method: aes, twofish, ...
 +
# OPTS              = options for the enccryption:
 +
#                    cryptsetup LUKS: hash-length (swap-devices)
 +
#                    cryptsetup: keylength bits
 +
# KEY              = path to keyfile to decrypt partition
 +
 +
# NAME  SOURCE  DEVICE  MOUNTPOINT  FILESYSTEM  CIPHER  OPTS  KEY
  
 
=== swap ===
 
=== swap ===
<br/>
+
 
Um beim Systemstart eine verschlüsselte '''swap'''-Partition anzulegen:<br/><br/>
+
Um beim Systemstart eine verschlüsselte '''swap'''-Partition anzulegen. In der <code>/etc/fstab</code> den '''<code>swap</code>'''-Eintrag entfernen (auskommentieren mit "'''<code>#</code>'''"):
In der
+
 
/etc/fstab
+
{{Box Beispiel|'''swap'''-Partition '''/dev/hda1''' aus der '''/etc/fstab''' entfernen|Den Eintrag
den '''swap'''-Eintrag entfernen (auskommentieren mit "'''#'''"):<br/>
+
 
{{Box Beispiel|'''swap'''-Partition /dev/hda1 aus der /etc/fstab entfernen|Den Eintrag
+
/dev/hda1 swap swap defaults 0 0
<pre>/dev/hda1                                   swap                   swap           defaults                                               0       0</pre>
+
 
 
in
 
in
<pre>#/dev/hda1                                   swap                   swap           defaults                                               0       0</pre>
+
 
ändern}}
+
#/dev/hda1 swap swap defaults 0 0
In der
+
 
/etc/crypttab
+
ändern
die Zeile
+
}}
<pre>swap0       /dev/sda2                 swap                   swap       aes-cbc-essiv:sha256       sha256     /dev/urandom</pre>
+
In der <code>/etc/crypttab</code> die Zeile
 +
 
 +
swap0 /dev/sda2 swap swap aes-xts-essiv:sha256 sha256 /dev/urandom
 +
 
 
hinzufügen.
 
hinzufügen.
<br/><br/>
 
  
 
=== USB-Stick ===
 
=== USB-Stick ===
<br/>
+
 
Um die verschlüsselte Partition des USB-Sticks beim Systemstart einzubinden:<br/><br/>
+
Um die verschlüsselte Partition des USB-Sticks beim Systemstart einzubinden: In der <code>/etc/crypttab</code> die Zeile
In der
+
 
/etc/crypttab
+
usbkeys /dev/usbcrypt1 /media/keys  ext3 aes-xts-essiv:sha256 none none
die Zeile
+
 
<pre>usbkeys     /dev/usbcrypt1           /media/keys  ext3       aes-cbc-essiv:sha256       none       none</pre>
 
 
hinzufügen.
 
hinzufügen.
<br/><br/>
 
  
 
=== /home-Partition ===
 
=== /home-Partition ===
<br/>
+
 
Um die verschlüsselte '''/home'''-Partition beim Systemstart einzubinden:<br/><br/>
+
Um die verschlüsselte '''<code>/home</code>'''-Partition beim Systemstart einzubinden: In der <code>/etc/crypttab</code> <u>'''unterhalb'''</u> des Eintrags für den USB-Stick die Zeile
In der
+
 
/etc/crypttab
+
home /dev/hda3 /home  ext3 aes-xts-essiv:sha256 none none
<u>'''unterhalb'''</u> des Eintrags für den USB-Stick die Zeile
+
 
<pre>home     /dev/hda3           /home  ext3       aes-cbc-essiv:sha256       none       none</pre>
 
 
hinzufügen.
 
hinzufügen.
<br/><br/>
 
  
 
== Links ==
 
== Links ==
http://www.saout.de/misc/dm-crypt<br/>
 
http://luks.endorphin.org/dm-crypt<br/>
 
<br/>
 
  
<br/><br/>
+
http://www.saout.de/misc/dm-crypt
 +
http://luks.endorphin.org/dm-crypt
  
[[Security | Zurück zu Security]]<br />
+
[[Security | Zurück zu Security]]
 
[[Category:Security]]
 
[[Category:Security]]
 
[[Category:Konsole]]
 
[[Category:Konsole]]

Aktuelle Version vom 11. April 2014, 19:44 Uhr

Security

Verschlüsselung: dm-crypt/luks unter openSUSE

Dieser Artikel beschreibt das Verschlüsseln einer /home-Partion mit cryptsetup (mit LUKS-Erweiterung) mit einem Key-File, das auf einer ebenfalls verschlüsselten Partition auf einem USB-Stick gespeichert ist und während des Bootvorgangs eingebunden wird.
Dabei wird für den USB-Stick ein Passwort abgefragt, um eine Partition zu mounten, auf der verschiedene Schlüssel liegen, mit denen weitere Partitionen automatisch eingebunden werden können.
Des Weiteren wird beim Booten eine verschlüsselte swap-Partitionen angelegt.

Hinweis:

Dieser Artikel beschreibt die Einrichtung einer verschlüsselten Partition unter openSUSE, sollte aber mit geringem Aufwand auch auf andere Distribution übertragbar sein.


Allgemeines

Voraussetzungen

Installation von cryptsetup (mit LUKS-Erweiterung)

Unter openSUSE 10.2 ist das Programm cryptsetup im Paket util-linux-crypt enthalten.

Bis einschließlich SuSE Linux 10.1 gibt es das Paket cryptsetup-luks bei Packman.

Unterstützung von dm-crypt und AES im Kernel

Um den Device-Mapper dm-crypt und AES-Verschlüsselung zu nutzen, müssen folgende Optionen im Kernel aktiviert sein:

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers
Device Drivers --> RAID and LVM Support --> 
  [*] Multiple devices driver support (RAID and LVM) 
    <M> Device mapper support
    <M> Crypt target support
Cryptographic Options -->
  <M> Cryptographic API
    <M> AES cipher algorithims oder
    <M> AES cipher algorithims (i586) oder
    <M> AES cipher algorithims (x86_64)
    <M> SHA256 digest algorithm

Diese Optionen sind im SUSE-Standardkernel bereits aktiviert. Nur wer einen eigenen Kernel verwendet, muss diese Optionen berücksichtigen. Für i586 und x86_64 gibt es optimierte Versionen auf Assemblerbasis, es empfiehlt sich diese zu verwenden.

Kontrollieren lassen sich diese Einstellungen mit:

zcat /proc/config.gz | egrep 'DM_CRYPT|_AES|SHA256|CRYPTO='

oder

egrep 'DM_CRYPT|_AES|SHA256|CRYPTO=' /boot/config-*-default
Beispiel: /proc/config.gz
# zcat /proc/config.gz 


Einbinden des USB-Sticks

Um den USB-Stick immer über dasselbe Device ansprechen zu können, muss eine entsprechende udev-Regel erstellt, werden, die automatisch einen Symlink auf den Stick (und die jeweiligen Partitionen) anlegt.

Zuerst ermittelt man die Seriennummer des USB-Sticks (anhand dieser Nummer kann das Device später eindeutig zugeordnet werden):

udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep "ATTRS{serial}"
Beispiel: USB-Device: /dev/sdc
# udevinfo -a -p `udevinfo -q path -n /dev/sdc` 


Welche Herstellerbezeichnung nun zum USB-Stick gehört ermittelt man mit:

udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep "ATTRS{product}"
Beispiel: USB-Device: /dev/sdc
# udevinfo -a -p `udevinfo -q path -n /dev/sdc` 


Anschließend eine udev-Regel erstellen. Mit einem beliebigen Editor die Datei /etc/udev/rules.d/01-usb-crypto.rules mit dem Inhalt

# udev-rule for encrypted usb-pen

SUBSYSTEMS=="usb", ATTRS{serial}=="<Seriennummer>", KERNEL=="sd*", NAME="%k", SYMLINK+="<Device-Name>%n"

erstellen. Wobei

ATTRS{serial}=="<Seriennummer>"

natürlich durch die Seriennummer des eigenen USB-Sticks ersetzt werden muss und mit

SYMLINK+="<Device-Name>%n"

festgelegt wird, unter welchem Devicenamen der Stick später verwendet wird.

Beispiel: Seriennummer: 076A1A939BC2, USB-Device: /dev/usbcrypt
# udev-rule for encrypted usb-pen
SUBSYSTEMS=="usb", ATTRS{serial}=="076A1A939BC2", KERNEL=="sd*", NAME="%k", SYMLINK+="usbcrypt%n"

Der komplette Stick kann in diesem Fall mit /dev/usbcrypt, die erste Partition mit /dev/usbcrypt1, die zweite Partition mit /dev/usbcrypt2, usw. angesprochen werden.


Anschließend die udev-Regeln mit

udevcontrol reload_rules

neu laden und den USB-Stick einstecken.

Unter /dev sollte dann mindestens (je nachdem wieviele Partitionen auf dem Stick existieren), das Device /dev/usbcrypt auftauchen unter dem der Stick dann - unabhängig von dem echten Device, dass z.B. bei fdisk -l angezeigt wird - angesprochen werden kann.

USB-Stick partitionieren/formatieren

Zum Partitionieren bieten sich diverse Programme an:

  • Konsole:
    • fdisk
    • cfdisk
    • sfdisk
    • parted
  • GUI:
    • GParted (empfohlen)
    • QtParted

Es wird mindestens eine Partition benötigt, auf der später die Schlüssel (Keys) gespeichert werden. Im folgenden Beispiel werden auf einem leeren USB-Stick zwei neue Partitionen angelegt.
Auf der ersten Partition (50MB) wird später der Schlüssel für die /home-Partition gespeichert - die zweite kann für Daten genutzt werden (unverschlüsselt).

Achtung:

Mit der folgenden Eingabe werden alle Daten auf dem Stick gelöscht!


Beispiel: Anlegen von zwei Partitionen auf einem leeren/neuen USB-Stick mit sfdisk
sfdisk -uM /dev/usbcrypt <<EOF
0,50,L,+
,,L
EOF


Anschließend wird die zweite Partition (unverschlüsselte Datenpartition) formatiert:

Beispiel: Partition /dev/usbcrypt2 mit dem ext3-Dateisystemformatieren
mkfs.ext3 -L Daten -c /dev/usbcrypt2
tune2fs -m 0 /dev/usbcrypt2
tune2fs -c 0 -i 0 /dev/usbcrypt2
tune2fs -O dir_index /dev/usbcrypt2
tune2fs -o journal_data /dev/usbcrypt2
e2fsck -D /dev/usbcrypt2

Damit werden ein ext3-Dateisystem erzeugt, der für root reservierte Platz auf 0%, die mount-Option journal_data sowie die Dateisystem-Option dir_index gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:

man tune2fs

Anschließend wird das Dateisystem noch überprüft.


Für die formatierte Partition noch einen Eintrag in der /etc/fstab anlegen. Danach noch den den Mountpoint erstellen und die Partition mounten.

Beispiel: Partition /dev/usbcrypt2 einbinden

In der /etc/fstab die Zeile

/dev/usbcrypt2  /media/daten  ext3  noauto,noexec,nodev  0 0

einfügen, den Mountpoint erzeugen

mkdir -p /media/daten

und die Partition einbinden

mount /media/daten


Verschlüsselte Partitionen anlegen

Vorbereitung

Benötigte Module laden:

  • Device-Mapper:
modprobe dm-crypt
  • AES:
modprobe aes
modprobe aes-i586
modprobe aes-x86_64

(Je nachdem, welches AES-Modul zutrifft.)

USB-Stick

Zuerst wird die erste Partition auf dem USB-Stick verschlüsselt auf der anschließend der Schlüssel für die /home-Partition gespeichert wird. Die Partition mit AES verschlüsseln:

cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/usbcrypt1
  • Mit YES bestätigen
  • Passwort eingeben
  • Passwort bestätigen

Die neu erstellte Partition kann nun geöffnet werden:

cryptsetup luksOpen /dev/usbcrypt1 usbkeys
  • Passwort eingeben

Die verschlüsselte Partition wurde damit auf usbkeys "gemappt". Unter /dev/mapper/ sollte nun das Device usbkeys auftauchen. Dieses Device kann nun formatiert werden:

Beispiel: Partition /dev/mapper/usbkeys mit dem ext3-Dateisystemformatieren
mkfs.ext3 -L Keys -c /dev/mapper/usbkeys
tune2fs -m 0 /dev/mapper/usbkeys
tune2fs -c 0 -i 0 /dev/mapper/usbkeys
tune2fs -O dir_index /dev/mapper/usbkeys
tune2fs -o journal_data /dev/mapper/usbkeys
e2fsck -D /dev/mapper/usbkeys

Damit werden ein ext3-Dateisystem erzeugt, der für root reservierte Platz auf 0%, die mount-Option journal_data sowie die Dateisystem-Option dir_index gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:

man tune2fs

Anschließend wird das Dateisystem noch überprüft.


Für die formatierte Partition wird noch Eintrag in der /etc/fstab angelegt (sicherheitshalber wird die Partition Standardmäßig nur read-only eingebunden). Danach noch den den Mountpoint erstellen und die Partition mounten (dabei wird die Partition ausnahmsweise auch schreibbar eingebunden, um anschließend den Schlüssel speichern zu können).

Beispiel: Partition /dev/mapper/usbkeys einbinden

In der /etc/fstab die Zeile

/dev/mapper/usbkeys  /media/keys  ext3  ro,noauto,noexec,nodev  0 0

einfügen, den Mountpoint erzeugen

mkdir -p /media/keys

die Partition einbinden

mount /media/keys

und "beschreibbar" 'remounten

mount -o remount,rw /media/keys


/home-Partition

Vorbereitung

Bevor nun die /home-Partition verschlüsselt wird, muss noch mit dd ein entsprechender Key erzeugt werden:

Beispiel: Schlüssel für die /home-Partition erstellen

Mit

dd if=/dev/urandom of=/media/keys/home.key bs=1k count=2

einen Key erzeugen. Diesen nur für root lesbar machen:

chown root:root /media/keys/home.key
chmod 0400 /media/keys/home.key


Da beim Verschlüsseln einer Partition die vorhandenen Daten gelöscht werden, muss das vorhandene Homeverzeichnis zuvor gesichert werden:

Achtung:

Auf der Sicherungs-Partition muss genügend Platz für das Homeverzeichnis vorhanden sein!


Das Homeverzeichnis mit tar auf eine andere Partition (in diesem Fall z.B. die root-Partition) sichern:

Beispiel: Homeverzeichnis mit tar auf /media sichern
tar -cjpvf /media/home.tar.bz2 /home


Anschließend kann die /home-Partition ausgehängt werden:

umount /home

Verschlüsselung

Jetzt kann die Partition verschlüsselt werden:

Hinweis:

Um die /home-Partition im Notfall auch ohne Schlüssel mounten zu können wird die Partition zuerst mit einer Passphrase verschlüsselt. Anschließend wird der Schlüssel als zusätzlicher Key hinzugefügt (ein Feature der LUKS-Erweiterung).


Im folgenden Beispiel wird die /home-Partition /dev/hda3 verschlüsselt:

Achtung:

Mit der folgenden Eingabe werden alle Daten auf der Partition gelöscht!


Beispiel: Verschlüsselung mit Passwort und Key-File

Die Partition mit AES verschlüsseln:

cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/hda3<
  • Mit YES bestätigen
  • Passwort eingeben
  • Passwort bestätigen

Schlüssel hinzufügen:

cryptsetup luksAddKey /dev/hda3 /media/keys/home.key
  • Passwort eingeben
  • Passwort bestätigen


Die neu erstellte Partition kann nun geöffnet werden:

cryptsetup -d /media/keys/home.key luksOpen /dev/hda3 home

Die verschlüsselte Partition wurde damit auf home "gemappt". Unter /dev/mapper sollte nun das Device home auftauchen. Dieses Device kann nun formatiert werden:

Beispiel: Partition /dev/mapper/home mit dem ext3-Dateisystemformatieren
mkfs.ext3 -L Home -c /dev/mapper/home
tune2fs -c 0 -i 0 /dev/mapper/home
tune2fs -O dir_index /dev/mapper/home
tune2fs -o journal_data /dev/mapper/home
e2fsck -D /dev/mapper/home

Damit werden ein ext3-Dateisystem erzeugt, die mount-Option journal_data sowie die Dateisystem-Option dir_index gesetzt und die automatischen Dateisystemchecks deaktiviert. Für Einzelheiten zu den Optionen siehe:

man tune2fs

Anschließend wird das Dateisystem noch überprüft.


Für die formatierte Partition noch den Eintrag in der /etc/fstab anlegen und danach den den Mountpoint erstellen sowie die Partition mounten.

Beispiel: Partition /dev/mapper/home einbinden

In der /etc/fstab den "alten" Eintrag für /home von

/dev/hda3  /home  ext3  defaults  1 2

auf

/dev/mapper/home  /home  ext3  noauto  0 0

ändern und die Partition einbinden

mount /home


Daten zurückspielen

Wenn die "neue" /home-Partition ins Dateisystem eingebunden wurde, kann das Backup des "alten" Homeverzeichnisses zurückgespielt werden:

Beispiel: Das mit tar gesicherte Homeverzeichnis wieder einspielen
tar -C / -xjvpf /media/home.tar.bz2


Verschlüsselte Partitionen beim Systemstart einbinden

Vorbereitung

Um die angelegten Partitionen beim Systemstart einzubinden, wird ein entsprechendes Bootscript benötigt. Folgendes Script kopieren und unter /etc/init.d/boot.cryptdisks speichern.

openSUSE:


Die Rechte für das Script setzen (ausführbar machen)

chown root:root /etc/init.d/boot.cryptdisks
chmod a+x /etc/init.d/boot.cryptdisks

und das Script in den Bootprozess einbinden:

chkconfig boot.cryptdisks B

Kontrolle:

chkconfig -l boot.cryptdisks

sollte dann

boot.cryptdisks  0:off  1:off  2:off  3:off  4:off  5:off  6:off  B:on

ausgeben.

Anschließend die Datei /etc/crypttab mit folgendem Inhalt anlegen:

# /etc/crypttab
# crypttab: Mappings for encrypted partitions
#
# NAME              = name for device-mapper
# SOURCE DEVICE     = encrypted devive
# MOUNTPOINT        = where to mount the encrypted partition
# FILESYSTEM        = filesystem-type of the device
# CIPHER            = encryption method: aes, twofish, ...
# OPTS              = options for the enccryption:
#                     cryptsetup LUKS: hash-length (swap-devices)
#                     cryptsetup: keylength bits
# KEY               = path to keyfile to decrypt partition

# NAME  SOURCE  DEVICE  MOUNTPOINT  FILESYSTEM  CIPHER  OPTS  KEY

swap

Um beim Systemstart eine verschlüsselte swap-Partition anzulegen. In der /etc/fstab den swap-Eintrag entfernen (auskommentieren mit "#"):

Beispiel: swap-Partition /dev/hda1 aus der /etc/fstab entfernen

Den Eintrag

/dev/hda1  swap  swap  defaults  0 0

in

#/dev/hda1  swap  swap  defaults  0 0

ändern


In der /etc/crypttab die Zeile

swap0  /dev/sda2  swap  swap  aes-xts-essiv:sha256  sha256  /dev/urandom

hinzufügen.

USB-Stick

Um die verschlüsselte Partition des USB-Sticks beim Systemstart einzubinden: In der /etc/crypttab die Zeile

usbkeys  /dev/usbcrypt1  /media/keys  ext3  aes-xts-essiv:sha256  none  none

hinzufügen.

/home-Partition

Um die verschlüsselte /home-Partition beim Systemstart einzubinden: In der /etc/crypttab unterhalb des Eintrags für den USB-Stick die Zeile

home  /dev/hda3  /home  ext3  aes-xts-essiv:sha256  none  none

hinzufügen.

Links

http://www.saout.de/misc/dm-crypt http://luks.endorphin.org/dm-crypt

Zurück zu Security