Systemverschlüsselung mit dm-crypt: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
(aktualisiert auf 2012-11-01 mit Systemd, Anpassung /etc/hosts nicht mehr notwendig, typos korrigiert (mehrere VMs mit meinen Anpassungen so installiert))
Zeile 1: Zeile 1:
== Zusammenfassung ==
== Zusammenfassung ==


Dieser Artikel behandelt die Installation eines ArchLinux-Grundsystems mit verschlüsseltem LVM und der kompletten Integration von Systemd. Die Anleitung wurde unter Verwendung der Installations-Medien 2012.08.04 erstellt. Die Installation sollte aber auch mit zuküftigen Medien (zumindest vorerst) nicht großartig anders verlaufen.
Dieser Artikel behandelt die Installation eines ArchLinux-Grundsystems mit verschlüsseltem LVM und der kompletten Integration von Systemd. Die Anleitung wurde unter Verwendung der Installations-Medien 2012.11.01 (archlinux-2012.11.01-dual.iso) erstellt. Die Installation sollte aber auch mit zuküftigen Medien (zumindest vorerst) nicht großartig anders verlaufen.




Zeile 9: Zeile 9:




* Das Image auf CD brennen oder unter einem funktionierendem Linux-System (z.B. Live-CD) auf einen USB-Stick kopieren. Dies funktioniert wie folgt:
* Das Image auf CD brennen oder unter einem funktionierendem Linux-System (z. B. Live-CD) auf einen USB-Stick kopieren. Dies funktioniert wie folgt:
     # dd if=archlinux.iso of=/dev/sdx
     # dd if=archlinux.iso of=/dev/sdx


Zeile 26: Zeile 26:
== Festplatte vorbereiten ==
== Festplatte vorbereiten ==


* Jetzt wird es Zeit, die Festplatten zu partitionieren. Dies kann z.B. mit '''cfdisk''' durchgeführt werden. Für unseren Zweck erstellen wir zwei Partitionen:
* Jetzt wird es Zeit, die Festplatten zu partitionieren. Dies kann z. B. mit '''cfdisk''' durchgeführt werden. Für unseren Zweck erstellen wir zwei Partitionen:
'''sda1''' mit einer Größe von 100MB und boot-Flag (dies wird später unsere Boot-Partition)
'''sda1''' mit einer Größe von 100 MB und boot-Flag (dies wird später unsere Boot-Partition)


'''sda2''', welche den Rest der Festplatte spendiert bekommt (hier wird unser verschlüsseltes LVM seinen Platz drauf finden)
'''sda2''', welche den Rest der Festplatte spendiert bekommt (hier wird unser verschlüsseltes LVM seinen Platz drauf finden)
Zeile 35: Zeile 35:
     root@archiso ~ # shred -v /dev/sda2
     root@archiso ~ # shred -v /dev/sda2


Standardmäßig wird dieser Vorgang drei Mal durchgeführt, wobei ein Durchgang bei einer ca. 2TB großen Festplatte schon mal 5 bis 6 Stunden in Anspruch nehmen kann.
Standardmäßig wird dieser Vorgang drei Mal durchgeführt, wobei ein Durchgang bei einer ca. 2 TB großen Festplatte schon mal fünf bis sechs Stunden in Anspruch nehmen kann.




Zeile 52: Zeile 52:




'''Hinweis:''' Für Volumes größer als 2TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33.
'''Hinweis:''' Für Volumes größer als 2 TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33. Die Option aes-xts-plain64 kann auch für Volumes kleiner 2 TiB verwendet werden.




* Die Eingabeaufforderung mit YES bestätigen und anschließ ein sicheres Passwort vergeben. Hierbei sollten schon 20 Zeichen inkl. Sonderzeichen und Zahlen verwendet werden.
* Die Eingabeaufforderung mit YES bestätigen und anschließend ein sicheres Passwort vergeben. Hierbei sollten schon 20 Zeichen inkl. Sonderzeichen und Zahlen verwendet werden.




* Jetzt wird die verschlüsselte Partiton geöffnet und das LVM eingerichtet:
* Jetzt wird die verschlüsselte Partition geöffnet und das LVM eingerichtet:
     root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
     root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
     root@archiso ~ # pvcreate /dev/mapper/lvm
     root@archiso ~ # pvcreate /dev/mapper/lvm
Zeile 65: Zeile 65:
     root@archiso ~ # lvcreate -L 8GB -n swap main
     root@archiso ~ # lvcreate -L 8GB -n swap main
     root@archiso ~ # lvcreate -l 100%FREE -n home main
     root@archiso ~ # lvcreate -l 100%FREE -n home main
'''Hinweis:''' Je nach Festplattengröße und/oder zukünftiger Erweiterung des Grundsystems kann auch eine geringere Größe für das root-Volume (-n root) festgelegt werden. Wenn das home-Volume (-n home) nicht den verbleibenden Platz komplett ausfüllt, können später LVM-Snapshots erstellt werden. Dazu kann - wie bei den anderen lvcreate-Befehlen - eine geringere Größe angegeben werden, zum Beispiel -L 50GB.




* Mit mkfs wird nun das Dateisystem auf die Partitionen geschrieben.
* Mit mkfs wird nun das Dateisystem auf die Partitionen geschrieben.
     root@archiso ~ # mkfs.ext4 /dev/mapper/main-root -L root
     root@archiso ~ # mkfs.ext4 -L root /dev/mapper/main-root
     root@archiso ~ # mkfs.ext4 /dev/mapper/main-home -L home
     root@archiso ~ # mkfs.ext4 -L home /dev/mapper/main-home
     root@archiso ~ # mkfs.ext4 /dev/sda1 -L boot
     root@archiso ~ # mkfs.ext4 -L boot /dev/sda1
     root@archiso ~ # mkswap /dev/mapper/main-swap -L swap
     root@archiso ~ # mkswap -L swap /dev/mapper/main-swap




* Dann werden die Partitionen gemounted:
* Dann werden die Partitionen gemountet:
     root@archiso ~ # mount /dev/mapper/main-root /mnt
     root@archiso ~ # mount /dev/mapper/main-root /mnt
     root@archiso ~ # mkdir /mnt/home
     root@archiso ~ # mkdir /mnt/home
Zeile 116: Zeile 118:
== System konfigurieren ==
== System konfigurieren ==


* Nun ermitteln wir zuerst die UUID der Swap-Partition:
* Nun aktivieren wir die Swap-Partition:
     root@archiso ~ # blkid | grep swap
     root@archiso ~ # swapon -L swap




* Dann wird die fstab generiert und anschließend angepasst:
* Dann wird die fstab generiert:
     root@archiso ~ # genfstab -p /mnt >> /mnt/etc/fstab
     root@archiso ~ # genfstab -U -p /mnt >> /mnt/etc/fstab
     root@archiso ~ # nano /mnt/etc/fstab
     root@archiso ~ # nano /mnt/etc/fstab
* Am Ende der Datei folgendes anfügen:
    # UUID=die_eben_ausgelesene_UUID LABEL=swap
    /dev/mapper/main-swap none swap defaults 0 1




Zeile 162: Zeile 159:
     sh-4.2# echo FONT=lat9w-16 >> /etc/vconsole.conf
     sh-4.2# echo FONT=lat9w-16 >> /etc/vconsole.conf
     sh-4.2# echo FONT_MAP=8859-1_to_uni >> /etc/vconsole.conf
     sh-4.2# echo FONT_MAP=8859-1_to_uni >> /etc/vconsole.conf
    sh-4.2# echo Europe/Berlin >> /etc/timezone
    sh-4.2# nano /etc/hosts
* Nun den Hostnamen hinzufügen:
    #<ip-address> <hostname.domain.org> <hostname>
    127.0.0.1 localhost.localdomain localhost myhostname
    ::1 localhost.localdomain localhost myhostname




Zeile 176: Zeile 165:




* /etc/rc.conf bearbeiten:
* /etc/mkinitcpio.conf anpassen:
     USELVM="yes".
     sh-4.2# nano /etc/mkinitcpio.conf




* HOOKS in /etc/mkinitcpio.conf bearbeiten:
* Die MODULES- und HOOKS-Werte entsprechend anpassen:
     HOOKS="base udev autodetect sata usbinput keymap encrypt lvm2 filesystems fsck shutdown"
    MODULES="ext4"
     HOOKS="base udev autodetect pata scsi sata usb usbinput keymap encrypt lvm2 filesystems fsck shutdown"


Die hier vorgegebenen Hooks sind für das Booten von einer S-ATA-Festplatte mit einer USB-Tastatur gedacht und müssen daher evtl. angepasst werden. Alle verfügbaren Hooks sind unteter https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS zu finden.
Die hier vorgegebenen Hooks sind für das Booten von einer S-ATA-Festplatte mit einer USB-Tastatur gedacht und müssen daher evtl. angepasst werden. Alle verfügbaren Hooks sind unteter https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS zu finden.
Zeile 198: Zeile 188:
* Jetzt legen wir das Passwort für root an:
* Jetzt legen wir das Passwort für root an:
     sh-4.2# passwd
     sh-4.2# passwd
* Damit per DHCP automatisch eine IP-Adresse beim Bootvorgang bezogen wird, aktivieren wir den entsprechenden Systemd-Dienst:
    sh-4.2# systemctl enable dhcpcd@.service




Zeile 209: Zeile 203:




== Systemd einrichten und SysVInit deinstallieren ==  
== Systemd einrichten ==  
 
* Als erstes bringen wir nun pacman auf den neusten Stand:
    [root@myhostname ~] pacman -Syy
 


* Sollte das Netzwerk nicht gestartet sein, folgenden Befehl ausführen:
* Sollte das Netzwerk nicht gestartet sein, folgenden Befehl ausführen:
     [root@myhostname ~] dhcpcd
     [root@myhostname ~]# dhcpcd
 


* Dann wird systemd installiert.
    [root@myhostname ~] pacman -S systemd


 
* Welche IP-Adresse vergeben wurde, kann mittels ip-Programm festgestellt werden:
* In /boot/syslinux/syslinux.cfg fügen wir den APPEND-Zeile vom LABEL arch folgenden Eintrag am Ende hinzu:
     [root@myhostname ~]# ip addr
    init=/bin/systemd
 
 
* Dann starten wir das System neu und wählen im Bootmenü den Eintrag Arch Linux aus:
    [root@myhostname ~] reboot
 
* In /boot/syslinux/syslinux.cfg entfernen wir nun wieder den zuvor gesetzten Eintrag init=/bin/systemd.
 
 
* Um systemd komplett zu integrieren, werden nun folgende Befehle ausgeführt:
     [root@myhostname ~] pacman -R initscripts sysvinit
    [root@myhostname ~] pacman -S systemd-sysvcompat




* Services für systemd einrichten:
* Services für systemd einrichten:
     [root@myhostname ~] systemctl enable dhcpcd@.service
     [root@myhostname ~]# systemctl enable cronie.service
    [root@myhostname ~] systemctl enable cronie.service
     [root@myhostname ~]# systemctl enable lvm.service
     [root@myhostname ~] systemctl enable lvm.service




* Im Falle, dass ein x86_64 System installiert wurde, kann in der /etc/pacman.conf noch das multilib-repo aktiviert werden. Anschließend müssen pacman’s Paketlisten wieder auf den neusten Stand gebracht werden:
* Im Falle, dass ein x86_64 System installiert wurde, kann in der /etc/pacman.conf noch das multilib-repo aktiviert werden. Anschließend müssen pacman’s Paketlisten wieder auf den neusten Stand gebracht werden:
     [root@myhostname ~] pacman -Syy
     [root@myhostname ~]# pacman -Syy




* Ein letzer Reboot und wir können damit anfangen, unser frisch installiertes Arch an unsere Bedürfnisse anzupassen.
* Ein letzer Reboot und wir können damit anfangen, unser frisch installiertes Arch an unsere Bedürfnisse anzupassen.
     [root@myhostname ~] reboot
     [root@myhostname ~]# reboot






Erstellt von [[Benutzer:Durag|Durag]] am 20. August 2012
Erstellt von [[Benutzer:Durag|Durag]] am 20. August 2012
[[Kategorie:Installation]]
[[Kategorie:Installation]]
[[en:dm-crypt with LUKS]]
[[en:dm-crypt with LUKS]]

Version vom 13. November 2012, 21:30 Uhr

Zusammenfassung

Dieser Artikel behandelt die Installation eines ArchLinux-Grundsystems mit verschlüsseltem LVM und der kompletten Integration von Systemd. Die Anleitung wurde unter Verwendung der Installations-Medien 2012.11.01 (archlinux-2012.11.01-dual.iso) erstellt. Die Installation sollte aber auch mit zuküftigen Medien (zumindest vorerst) nicht großartig anders verlaufen.


Installationsmedium vorbereiten


  • Das Image auf CD brennen oder unter einem funktionierendem Linux-System (z. B. Live-CD) auf einen USB-Stick kopieren. Dies funktioniert wie folgt:
   # dd if=archlinux.iso of=/dev/sdx


Installation starten

  • Nun wird vom vorbereiteten Installations-Medium gebootet und das Setup für die entsprechende Systemarchitektur (i686 oder x86_64) gestartet.


  • Auf der Konsole angekommen, wird zuerst einmal das deutsche Tastatur-Layout geladen.
   root@archiso ~ # loadkeys de-latin1

Da das Layout derzeit noch auf Englisch eingestellt ist, muss z anstatt y und ß anstatt - eingegeben werden.


Festplatte vorbereiten

  • Jetzt wird es Zeit, die Festplatten zu partitionieren. Dies kann z. B. mit cfdisk durchgeführt werden. Für unseren Zweck erstellen wir zwei Partitionen:

sda1 mit einer Größe von 100 MB und boot-Flag (dies wird später unsere Boot-Partition)

sda2, welche den Rest der Festplatte spendiert bekommt (hier wird unser verschlüsseltes LVM seinen Platz drauf finden)


  • Zur Sicherheit wird die Festplatte jetzt überschrieben:
   root@archiso ~ # shred -v /dev/sda2

Standardmäßig wird dieser Vorgang drei Mal durchgeführt, wobei ein Durchgang bei einer ca. 2 TB großen Festplatte schon mal fünf bis sechs Stunden in Anspruch nehmen kann.


  • Wer deswegen den Vorgang nur einmal durchführen möchte, kann stattdessen folgenden Befehl ausführen:
   # shred -v -n 1 /dev/sda2


Verschlüsseltes LVM einrichten

  • Jetzt werden die benötigte Kernel-Modul für die Verschlüsselung geladen:
   root@archiso ~ # modprobe dm-crypt


  • Anschließend wird sda2 verschlüsselt:
   root@archiso ~ # cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2


Hinweis: Für Volumes größer als 2 TiB sollte aes-xts-plain64 verwendet werden. Kernelunterstützung hierfür gibt es seit Kernel 2.6.33. Die Option aes-xts-plain64 kann auch für Volumes kleiner 2 TiB verwendet werden.


  • Die Eingabeaufforderung mit YES bestätigen und anschließend ein sicheres Passwort vergeben. Hierbei sollten schon 20 Zeichen inkl. Sonderzeichen und Zahlen verwendet werden.


  • Jetzt wird die verschlüsselte Partition geöffnet und das LVM eingerichtet:
   root@archiso ~ # cryptsetup luksOpen /dev/sda2 lvm
   root@archiso ~ # pvcreate /dev/mapper/lvm
   root@archiso ~ # vgcreate main /dev/mapper/lvm
   root@archiso ~ # lvcreate -L 200GB -n root main
   root@archiso ~ # lvcreate -L 8GB -n swap main
   root@archiso ~ # lvcreate -l 100%FREE -n home main

Hinweis: Je nach Festplattengröße und/oder zukünftiger Erweiterung des Grundsystems kann auch eine geringere Größe für das root-Volume (-n root) festgelegt werden. Wenn das home-Volume (-n home) nicht den verbleibenden Platz komplett ausfüllt, können später LVM-Snapshots erstellt werden. Dazu kann - wie bei den anderen lvcreate-Befehlen - eine geringere Größe angegeben werden, zum Beispiel -L 50GB.


  • Mit mkfs wird nun das Dateisystem auf die Partitionen geschrieben.
   root@archiso ~ # mkfs.ext4 -L root /dev/mapper/main-root
   root@archiso ~ # mkfs.ext4 -L home /dev/mapper/main-home
   root@archiso ~ # mkfs.ext4 -L boot /dev/sda1
   root@archiso ~ # mkswap -L swap /dev/mapper/main-swap


  • Dann werden die Partitionen gemountet:
   root@archiso ~ # mount /dev/mapper/main-root /mnt
   root@archiso ~ # mkdir /mnt/home
   root@archiso ~ # mount /dev/mapper/main-home /mnt/home
   root@archiso ~ # mkdir /mnt/boot
   root@archiso ~ # mount /dev/sda1 /mnt/boot


Basissystem und Bootloader installieren

  • Bevor es jetzt los geht und wir das Basissystem installieren, testen wir erstmal die Internetverbindung:
   root@archiso ~ # ping -c 3 www.google.com


  • Besteht keine Verbindung, sollte folgender Befehl Abhilfe schaffen:
   root@archiso ~ # dhcpcd


  • Wir bearbeiten nun zuerst unsere Mirrorliste, und kommentieren alle weit entfernten Server mit # aus.
   root@archiso ~ # nano /etc/pacman.d/mirrorlist

Dies kann bei der Installation Geschwindigkeitsvorteile von ca. 30 Minuten bringen.


  • Dann wird das Basissystem inkl. Bootloader (ich habe mich für syslinux entschieden) installiert.
   root@archiso ~ # pacstrap /mnt base base-devel syslinux


  • Nach der Basis-Installation wird syslinux in den MBR von sda geschrieben:
   root@archiso ~ # syslinux-install_update -i -a -m -c /mnt


  • Dann wird syslinux konfiguriert:
   root@archiso ~ # nano /mnt/boot/syslinux/syslinux.cfg


  • Die APPEND-Zeile muss bei beiden Einträgen (arch und archfallback angepasst werden:
   APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8


System konfigurieren

  • Nun aktivieren wir die Swap-Partition:
   root@archiso ~ # swapon -L swap


  • Dann wird die fstab generiert:
   root@archiso ~ # genfstab -U -p /mnt >> /mnt/etc/fstab
   root@archiso ~ # nano /mnt/etc/fstab


  • Jetzt wechseln wir in die chroot-Umgebung:
   root@archiso ~ # arch-chroot /mnt


  • Spracheinstellungen in /etc/locale.conf festlegen:
   LANG="de_DE.UTF-8"
   
   # Keep the default sort order (e.g. files starting with a '.'
   # should appear at the start of a directory listing.)
   LC_COLLATE="C"
   
   LC_TIME="de_DE.UTF-8"
  • /etc/locale.gen editieren und locales generieren:
   sh-4.2# nano /etc/locale.gen


  • # vor folgenden locales entfernen:
   de_DE.UTF-8 UTF-8
   de_DE ISO-8859-1
   de_DE@euro ISO-8859-15


  • locales generieren:
   sh-4.2# locale-gen


  • Config-Dateien für systemd anpassen:
   sh-4.2# echo myhostname >> /etc/hostname
   sh-4.2# echo KEYMAP=de-latin1 >> /etc/vconsole.conf
   sh-4.2# echo FONT=lat9w-16 >> /etc/vconsole.conf
   sh-4.2# echo FONT_MAP=8859-1_to_uni >> /etc/vconsole.conf


  • Symlink für die Zeitzone erstellen:
   sh-4.2# ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime


  • /etc/mkinitcpio.conf anpassen:
   sh-4.2# nano /etc/mkinitcpio.conf


  • Die MODULES- und HOOKS-Werte entsprechend anpassen:
   MODULES="ext4"
   HOOKS="base udev autodetect pata scsi sata usb usbinput keymap encrypt lvm2 filesystems fsck shutdown"

Die hier vorgegebenen Hooks sind für das Booten von einer S-ATA-Festplatte mit einer USB-Tastatur gedacht und müssen daher evtl. angepasst werden. Alle verfügbaren Hooks sind unteter https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS zu finden.


Kernel-Image erstellen und der erste Neustart

  • Damit es bei der Erstellung des Kernel-Images nicht zu dem Fehler bsdcpio: Failed to set default locale kommt, führen wir folgendes aus:
   sh-4.2# export LANG=de_DE.UTF-8


  • Dann erstellen wir das Kernel-Image:
   sh-4.2# mkinitcpio -p linux


  • Jetzt legen wir das Passwort für root an:
   sh-4.2# passwd


  • Damit per DHCP automatisch eine IP-Adresse beim Bootvorgang bezogen wird, aktivieren wir den entsprechenden Systemd-Dienst:
   sh-4.2# systemctl enable dhcpcd@.service


  • Anschließend verlassen wir die chroot-Umgebung und hängen die Partitionen aus:
   sh-4.2# exit
   root@archiso ~ # umount /mnt/{boot,home,}
   root@archiso ~ # reboot


  • Der PC startet nun neu und wir werden – sofern bisher alles gut gegangen ist – von unserem Bootloader gefolgt von der Eingabeaufforderung zur Entschlüsselung des cryptdevice begrüßt. Gebt das Passwort ein und meldet euch, nachdem der Bootvorgang abgeschlossen ist, als root an.


Systemd einrichten

  • Sollte das Netzwerk nicht gestartet sein, folgenden Befehl ausführen:
   [root@myhostname ~]# dhcpcd


  • Welche IP-Adresse vergeben wurde, kann mittels ip-Programm festgestellt werden:
   [root@myhostname ~]# ip addr


  • Services für systemd einrichten:
   [root@myhostname ~]# systemctl enable cronie.service
   [root@myhostname ~]# systemctl enable lvm.service


  • Im Falle, dass ein x86_64 System installiert wurde, kann in der /etc/pacman.conf noch das multilib-repo aktiviert werden. Anschließend müssen pacman’s Paketlisten wieder auf den neusten Stand gebracht werden:
   [root@myhostname ~]# pacman -Syy


  • Ein letzer Reboot und wir können damit anfangen, unser frisch installiertes Arch an unsere Bedürfnisse anzupassen.
   [root@myhostname ~]# reboot


Erstellt von Durag am 20. August 2012