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

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Big reformat)
K (aes-cbc durch aes-xts ersetzt (http://www.heise.de/security/artikel/Erfolgreicher-Angriff-auf-Linux-Verschluesselung-2072199.html))
 
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
  
 
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/>
 
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/>
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/>
+
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/>
 
Des Weiteren wird beim Booten eine verschlüsselte '''swap'''-Partitionen angelegt.
 
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 ==
Zeile 15: Zeile 15:
 
=== Installation von cryptsetup (mit LUKS-Erweiterung) ===
 
=== Installation von cryptsetup (mit LUKS-Erweiterung) ===
  
Unter openSUSE 10.2 ist das Programm '''cryptsetup''' im Paket '''<code>util-linux-crypt</code>''' enthalten.
+
Unter openSUSE 10.2 ist das Programm '''<code>cryptsetup</code>''' im Paket '''<code>util-linux-crypt</code>''' enthalten.
  
 
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 '''<code>cryptsetup-luks</code>'''
Zeile 63: Zeile 63:
 
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.
 
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):<br/>
+
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}"
 
  udevinfo -a -p `udevinfo -q path -n /dev/<USB-Device>` | grep "ATTRS{serial}"
Zeile 87: Zeile 87:
  
 
  ATTRS{serial}=="076A1A939BC2"
 
  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. Mit einem beliebigen Editor die Datei <code>/etc/udev/rules.d/01-usb-crypto.rules</code> mit dem Inhalt
  
 
  # udev-rule for encrypted usb-pen
 
  # udev-rule for encrypted usb-pen
Zeile 111: Zeile 110:
 
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.
 
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
 
Anschließend die udev-Regeln mit
  
Zeile 118: Zeile 116:
 
neu laden und den USB-Stick einstecken.
 
neu laden und den USB-Stick einstecken.
  
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 -l</code>''' angezeigt wird - angesprochen werden kann.
+
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.
  
 
== USB-Stick partitionieren/formatieren ==
 
== USB-Stick partitionieren/formatieren ==
  
Zum Partitionieren bieten sich diverse Programme an:<br/>
+
Zum Partitionieren bieten sich diverse Programme an:
 +
 
 
*Konsole:
 
*Konsole:
 
+
**fdisk
fdisk
+
**cfdisk
cfdisk
+
**sfdisk
sfdisk
+
**parted
parted
 
 
 
 
*GUI:
 
*GUI:
 +
**GParted (empfohlen)
 +
**QtParted
  
GParted (empfohlen)
+
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 />
QtParted
 
 
 
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).
 
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 mit sfdisk|
 
{{Box Beispiel|Anlegen von zwei Partitionen auf einem leeren/neuen USB-Stick mit sfdisk|
 
  sfdisk -uM /dev/usbcrypt <<EOF
 
  sfdisk -uM /dev/usbcrypt <<EOF
Zeile 146: Zeile 141:
 
  EOF
 
  EOF
 
}}
 
}}
 
 
Anschließend wird die <u>zweite</u> Partition (unverschlüsselte Datenpartition) formatiert:
 
Anschließend wird die <u>zweite</u> Partition (unverschlüsselte Datenpartition) formatiert:
  
Zeile 157: Zeile 151:
 
  e2fsck -D /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:<br/>
+
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
 
  man tune2fs
Zeile 163: Zeile 157:
 
Anschließend wird das Dateisystem noch überprüft.
 
Anschließend wird das Dateisystem noch überprüft.
 
}}
 
}}
 
 
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.
 
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.
  
Zeile 194: Zeile 187:
 
  modprobe aes-x86_64
 
  modprobe aes-x86_64
  
(Je nachdem, welches zutrifft.)
+
(Je nachdem, welches AES-Modul zutrifft.)
  
 
=== USB-Stick ===
 
=== USB-Stick ===
Zeile 200: Zeile 193:
 
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:
 
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:
  
  cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/usbcrypt1
+
  cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/usbcrypt1
  
 
*Mit '''YES''' bestätigen
 
*Mit '''YES''' bestätigen
Zeile 228: Zeile 221:
 
Anschließend wird das Dateisystem noch überprüft.
 
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).
 
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).
  
Zeile 282: Zeile 274:
 
{{Box Beispiel|Verschlüsselung mit Passwort <u>und</u> Key-File|Die Partition mit AES verschlüsseln:
 
{{Box Beispiel|Verschlüsselung mit Passwort <u>und</u> Key-File|Die Partition mit AES verschlüsseln:
  
  cryptsetup -c aes-cbc-essiv:sha256 -y luksFormat /dev/hda3<
+
  cryptsetup -c aes-xts-essiv:sha256 -y luksFormat /dev/hda3<
  
 
*Mit '''YES''' bestätigen
 
*Mit '''YES''' bestätigen
Zeile 341: Zeile 333:
 
=== Vorbereitung ===
 
=== Vorbereitung ===
  
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.
+
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.
  
 
{{OpenSUSE||[[Bootscript zum Einbinden von dm-crypt/LUKS-Partitionen unter openSUSE]]}}
 
{{OpenSUSE||[[Bootscript zum Einbinden von dm-crypt/LUKS-Partitionen unter openSUSE]]}}
  
Die Rechte für das Script setzen (ausführbar machen):
+
Die Rechte für das Script setzen (ausführbar machen)
  
 
  chown root:root /etc/init.d/boot.cryptdisks
 
  chown root:root /etc/init.d/boot.cryptdisks
  chmod 0700 /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
  
Anschließend die Datei
+
boot.cryptdisks  0:off  1:off  2:off  3:off  4:off  5:off  6:off  B:on
  
/etc/crypttab
+
ausgeben.
  
mit folgendem Inhalt anlegen:
+
Anschließend die Datei <code>/etc/crypttab</code> mit folgendem Inhalt anlegen:
  
 
  # /etc/crypttab
 
  # /etc/crypttab
Zeile 385: Zeile 387:
 
ändern
 
ändern
 
}}
 
}}
 
 
In der <code>/etc/crypttab</code> die Zeile
 
In der <code>/etc/crypttab</code> die Zeile
  
  swap0  /dev/sda2  swap  swap  aes-cbc-essiv:sha256  sha256  /dev/urandom
+
  swap0  /dev/sda2  swap  swap  aes-xts-essiv:sha256  sha256  /dev/urandom
  
 
hinzufügen.
 
hinzufügen.
Zeile 396: Zeile 397:
 
Um die verschlüsselte Partition des USB-Sticks beim Systemstart einzubinden: In der <code>/etc/crypttab</code> die Zeile
 
Um die verschlüsselte Partition des USB-Sticks beim Systemstart einzubinden: In der <code>/etc/crypttab</code> die Zeile
  
  usbkeys  /dev/usbcrypt1  /media/keys  ext3  aes-cbc-essiv:sha256  none  none
+
  usbkeys  /dev/usbcrypt1  /media/keys  ext3  aes-xts-essiv:sha256  none  none
  
 
hinzufügen.
 
hinzufügen.
Zeile 404: Zeile 405:
 
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
 
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
  
  home  /dev/hda3  /home  ext3  aes-cbc-essiv:sha256  none  none
+
  home  /dev/hda3  /home  ext3  aes-xts-essiv:sha256  none  none
  
 
hinzufügen.
 
hinzufügen.
Zeile 410: Zeile 411:
 
== Links ==
 
== Links ==
  
http://www.saout.de/misc/dm-crypt<br/>
+
http://www.saout.de/misc/dm-crypt
http://luks.endorphin.org/dm-crypt<br/>
+
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