Vorgehen beim Aufsetzen eines Debian Lenny Servers

Geschrieben von Eric Scheibler am 07.09.2010

Vor einiger Zeit habe ich mir einen Server bestehend aus einem Atom D510 Prozessor, 2GB RAM, einer 1TB Systemfestplatte und einer 2TB Datenfestplatte zusammengestellt. Als Betriebssystem setze ich Debian Lenny ein. In dem folgenden Beitrag möchte ich die Konfiguration meines Servers beschreiben.

Inhaltsverzeichnis

Installation - Netinstall

Ziel: Debian Lenny mit Logical Volume Management (LVM) installieren, System soll vollständig verschlüsselt werden.

Von Debian.org den NetInstaller herunterladen (vorausgesetzt der Server hat Zugang zum Internet), das Image brennen und von der CD booten.

Hat man einen Piepton gehört, befindet man sich im Auswahlmenü, der Textinstaller ist bereits ausgewählt. Um die deutsche Brailleschrifttabelle zu laden, drückt man 1x die Tab - Taste, gibt dann folgendes ein und bestätigt mit Enter:

brltty=,,de

Dabei ist zu beachten, dass der Installer das amerikanische Tastaturlayout verwendet, d.h. y und z sind vertauscht und das = befindet sich rechts vom ß. Der obige Befehl funktioniert aber nur für eine USB Braillezeile, da diese von Brltty automatisch erkannt wird, für serielle Zeilen verweise ich auf den Artikel http://www.linux-fuer-blinde.de/146-0-debian-lenny-mit-einer-braillezeile-installieren.html. Jetzt sollte BrlTTY die angeschlossene Braillezeile finden, bei mir hat das mit einer Baum Supervario 40 (USB) sofort funktioniert. Eine Sprachausgabe ist während der Installation leider nicht verfügbar.

Anschließend bei der Installation unter Anderem folgende Einstellungen auswählen (Rest sollte selbsterklärend sein):

  1. Sprache und Tastaturlayout wählen
  2. Partitionierung: geführt, gesamte Festplatte verwenden, LVM und Verschlüsselung
  3. Ein mind. 15 stelliges Bootpasswort wählen, mit dem dann die HDD verschlüsselt wird
  4. root und Nutzer mit den jeweiligen Passwörtern einrichten
  5. Paketauswahl: alles bis auf Standard (oder auch System genannt) abwählen. Man kann natürlich auch mehr installieren aber ich bevorzuge ein schlankes System und installiere die Pakete lieber selbst, eine grafische Umgebung benötige ich bei einem Server auch nicht.

Nach der Installtion und dem Neustart muss das Bootpasswort eingegeben werden,, danach wird die Braillezeile wieder erkannt und schließlich kann der Nutzer und das Passwort eingegeben werden.

Für die meisten der folgenden Befehle werden Root - Rechte benötigt, also entweder gleich als root einloggen oder die Root - Rechte mittels “su root” und der Eingabe des Passworts erlangen.

Als erstes sollte man nun die Repositorys aktualisieren und Updates einspielen.

# apt-get update
# apt-get upgrade

Ich will den Server später ausschließlich über SSH steuern, demnach sollte der nächste Schritt die Installation des SSH-Servers sein (wenn er nicht bereits vorinstalliert ist):

# apt-get install ssh openssh-server

Die Konfiguration des SSH - Servers folgt später.

Ab jetzt können alle weiteren Aktionen remote mit dem bevorzugten SSH Client durchgeführt werden (bei mir ist das OpenSSH unter Windows XP), also den Server neu starten und das Bootpasswort eingeben. Anschließend bleibt der Server bei der Benutzereingabe stehen, SSH ist zu diesem zeitpunkt bereits gestartet.

LVM auf Systemplatte verwalten

Warum LVM?Local Volumes kann man prinzipiell mit herkömmlichen Partitionen gleichsetzen, sie bieten aber u.A. den Vorteil der Flexibilität. Es ist beispielsweise ziemlich einfach, die Größe eines Volumes nachträglich zu verändern. Dies finde ich in sofern nützlich als das ich beim Aufsetzen des Servers noch gar nicht genau weiß, wie viel Platz die einzelnen Partitionen benötigen. Sehr hilfreich fand ich folgendes Howto, daraus habe ich auch die meisten Informationen: A simple introduction to working with LVM. Es gibt aber noch viele weitere Quellen, sodass ich mich im Folgenden auf die Dokumentation meiner konkreten Arbeitsschritte beschränke.

Voraussetzungen: Der Debian Installer hat die Systemplatte /dev/sda verschlüsselt und zwei physische Partitionen erstellt. /dev/sda1 ist eine nur wenige MB große Partition namens “boot”, welche unverschlüsselt bleibt und den Bootvorgang einleitet. /dev/sda2 ist verschlüsselt und nimmt den restlichen Speicherplatz ein. Auf /dev/sda2 wurde eine Volumegroup namens “server” angelegt. Das Root - Volume erstreckt sich über die gesamte Partition (knapp 1TB).

Zuerst noch einige nützliche LVM Befehle:

  • pvscan: sucht nach physischen Volumes
  • vgscan: sucht nach Volumegruppen
  • lvscan: sucht nach Volumes
  • pvdisplay: zeigt die Eigenschaften der LVM Festplatten
  • vgdisplay: Liste der Volume Groups
  • lvdisplay: zeigt die einzelnen Volumes in der jeweiligen Gruppe an
  • vgchange -a y: initialisiert die Volume Groups neu, wird benötigt, wenn eine HDD im laufenden Betrieb angesteckt wird
  • vgchange -an Volumegroupname: meldet die angegebene Volumegroup ab (ähnlich einem umount bei HDDs), nötig, wenn z.B. eine externe Festplatte mit LVM genutzt wird

Root Volume auf 30 GB verkleinern

Da man ein Volume nur verkleinern kann, wenn es nicht gemountet ist, man das Root - Volume aber im laufenden Betrieb natürlich nicht aushängen kann, muss das folgende mit einer Live Distribution von Linux durchgeführt werden. Ich habe dazu Knoppix genommen, da es von Knoppix bereits eine Variante mit integriertem Screenreader gibt, nämlich Knoppix ADRIANE

Anleitung:

  1. KNOPPIX Live CD booten
  2. Repository aktualisieren:
# apt-get update
  1. Cryptsetup und Cryptmount installieren, um die verschlüsselte Systemplatte mounten zu können:
# apt-get install cryptsetup cryptmount
  1. Platte entschlüsseln:
# cryptsetup luksOpen /dev/sdxx bezeichner

also bei mir:

# cryptsetup luksOpen /dev/sda2 systemplatte
  1. Mounten
# mount /dev/mapper/bezeichner /dev/mapper/zielordner
  1. lvm group initialisieren, damit sie vom Kernel auch gefunden wird:
# lvm vgchange -a y

nach erfolgreicher Ausgabe ist sie dann unter dev/volumegroupname zu finden, bei mir /dev/server/ Sollte sie nicht zu finden sein, hilft meist ein “vgscan”.

  1. root volume überprüfen:
# e2fsck -f /dev/volumegroupname/root
  1. filesystem verkleinern:
# resize2fs -f /dev/volumegroupname/root 30G
  1. nochmal überprüfen:
e2fsck -f /dev/volumegroupname/root
  1. root Volume verkleinern:
lvm lvreduce -L30G /dev/volumegroupname/root
  1. Knoppix herunterfahren

Wenn keine Fehler aufgetaucht sind, ist das root - Volume jetzt 30GB groß und der Rest der HDD kann nun aufgeteilt werden.

Natürlich funktioniert dies auch, wenn man das Root - Volume vergrößern möchte. Lediglich die Schritte 8 und 10 müssen dann vertauscht werden, da sonst das Dateisystem beschädigt wird.

neues LVM Volume erstellen

Voraussetzung: genügend freier Platz in der VolumeGroup, mit “pvscan” kann man sich den freien Speicherplatz anzeigen lassen

Anleitung:

  1. Volume erstellen:
# lvcreate -n volumename --size "Anzahl_GB"g Name_der_volume-Group

also bei mir wieder:

# lvcreate -n musik --size 300g server
  1. Volume mit EXT3 formatieren:
# mkfs.ext3 /dev/Name_der_volume-Group/Volumename
  1. Mountordner erstellen:
# mkdir /archiv/Ordnername
  1. Volume mounten:
# mount /dev/Name_der_volume-Group/Volumename /archiv/Ordnername

Volumes beim Systemstart mounten

Damit man nach einem Neustart des Servers nicht alle Volumes von Hand mounten muss, kann man sie in die FSTab eintragen. Dies funktioniert allerdings nur, wenn die Festplatte nicht verschlüsselt ist - in diesem Fall könnte natürlich kein Volume gefunden werden. In meinem Fall kann ich also nur die Volumes der Systemplatte automatisch mounten lassen, diese ist zum Zeitpunkt des Mountings schon entschlüsselt. An die /etc/fstab muss folgendes angefügt werden:

# nano /etc/fstab
...
/dev/Name_der_volume-Group/Volumename /archiv/ordnername    ext3  noatime  0 2

Größe der Volumes ändern (nicht root)

Wenn man die Größe eines Volumes ändern möchte, muss man es zuerst auswerfen, sonst droht der Verlust der Daten:

# umount /dev/Name_der_Volumegroup/zu_änderndes_Volume

Vergrößern:

  1. Volume vergrößern:
# lvextend -L+"anzahl_GB"g Name_der_volume-Group/zu_vergrößerndes_Volume
  1. Volume überprüfen:
# e2fsck -f /dev/Name_der_volume-Group/zu_vergrößerndes_Volume
  1. Filesystem anpassen:
# resize2fs /dev/Name_der_volume-Group/zu_vergrößerndes_Volume

Nun kann das Volume wieder gemountet werden.

Verkleinern:

  1. Filesystem anpassen:
# resize2fs /dev/Name_der_volume-Group/zu_verkleinendes_Volume "neue_Größe_in_GB"g
  1. Volume verkleinern:
# lvreduce -L "neue_Größe_in_GB"g Name_der_volume-Group/zu_verkleinerndes_Volume
  1. Volume überprüfen:
# e2fsck -f /dev/Name_der_volume-Group/zu_verkleinendes_Volume

Wie schon unter 3.1 erwähnt ist die Reihenfolge der einzelnen Befehle wichtig, da das Dateisystem sonst beshädigt wird.

Volume löschen

Vorsicht mit dem folgenden Befehl, das betreffende Volume wird umgehend gelöscht:

# lvremove /dev/Name_der_volume-Group/zu_löschendes_Volume

Zusammenfassung

Zum jetzigen Zeitpunkt habe ich die 1TB Systemplatte /dev/sda in 5 Volumes aufgeteilt, die alle zur Volumegroup “server” gehören. Sie werden beim Systemstart automatisch gemountet. Wie anfangs beschrieben habe ich aber noch eine weitere 2TB HDD eingebaut, die im Folgenden in das System integriert werden soll.

Weitere HDD hinzufügen

Voraussetzungen: bereits verschlüsseltes System, LVM (siehe 1. und 2.) Ziel: neue 2TB HDD (/dev/sdb/) mit Cryptsetup verschlüsseln und eigene Volume Group einrichten.

Anleitung:

  1. Partitionieren

Eine große Partition /dev/sdb1 anlegen, ich habe dazu “cfdisk” genutzt.

# cfdisk /dev/sdb

eine primäre Partition erstellen, die die gesamte HDD füllt, das Dateisystem kann übernommen werden, speichern.

  1. Platte löschen (optional)

Wenn die Festplatte wie in meinem Fall neu ist, kann man direkt die Befehle zur Verschlüsselung eingeben, anderenfalls sollte man die alten Daten erst mit 0en oder Zufallsdaten überschreiben, da diese sonst so lange zu lesen wären, bis man einmal neue Daten drübergeschrieben hat (was bei einer 2TB Platte schon ne Weile dauern kann). Allerdings geht das Schreiben von 2TB zufallsdaten auch nicht gerade schnell sodass 0en meiner Meinung nach ein guter Kompromiss sind.

Nullen (akzeptable Sicherheit):

# dd if=/dev/zero of=/dev/sdb1

Zufallsdaten mit weniger Entropie (hohe Sicherheit):

# dd if=/dev/urandom of=/dev/sdb1

echte Zufallsdaten (für Paranoiker, dauert ewig):

# dd if=/dev/random of=/dev/sdb1
  1. Verschlüsseln

Ein gmind 15 stelliges (besser sind mind 25) Passwort aus Buchstaben, Zahlen und Sonderzeichen sollte selbstverständlich sein, sonst ist am Ende die Mühe umsonst. Man kann beispielsweise auch einen kurzen Satz nehmen und einzelne Buchstaben tauschen oder mit anderen Zeichen ersetzen,.

# cryptsetup luksFormat --cipher aes --key-size 256 --verbose --verify-passphrase /dev/sdb1
# cryptsetup luksOpen /dev/sdXX bezeichner

also bei mir:

# cryptsetup luksOpen /dev/sdb1 2tb

Die geöffnete Platte ist ab sofort unter /dev/mapper zu finden.

  1. LVM

physical volume einrichten:

# pvcreate /dev/mapper/bezeichner

Volume group einrichten:

# vgcreate name_der_volumegroup /dev/mapper/bezeichner

Für das Einrichten der Volumes verweise ich auf 2.2.

  1. aushängen

Dies sollte im normalen Serverbetrieb eigentlich nicht nötig sein, da ich beide Platten permanent benötige aber der Vollständigkeit halber seien die Schritte erwähnt.

# umount /das/ziel/verzeichnis
# vgchange -an Volumegroupname
# crypsetup luksClose /dev/mapper/bezeichner

SSH absichern

Zur Installtion des SSH Servers siehe Punkt 1. Einige Einstellungen sollten allerdings in der SSH Konfiguration noch geändert werden, um den Server besser vor Angriffen zu schützen.

Die Einstellungen sind unter /etc/ssh/sshd_config zu finden, diese Datei mit einem beliebigen Texteditor öffnen. Ich habe der Einfachheit halber Nano verwendet.

# nano /etc/ssh/sshd_config
  1. Anmeldung als root verbieten:
PermitRootLogin no
  1. nur bestimmte User dürfen sich anmelden:
AllowUsers Username
  1. SSH Port ändern, z.B.:
port 29008

Den Port sollte man auf jeden Fall ändern und wenn man sich nicht mehr als “root” anmelden kann, so hat man noch eine zusätzliche Sicherheitsstufe eingebaut. Wenn der Port geändert wurde muss dies dann beim Aufbau der SSH Verbindung mit angegeben werden, also sieht der Befehl für den OpenSSH Client unter Windows XP folgendermaßen aus:

ssh.exe -p Portnummer user@IP-Adresse

Schluss

Jetzt sollte der Debian Server erstmal fertig eingerichtet sein. In den nächsten Beiträgen werde ich dann die Konfiguration einiger Programme beschreiben, die ich installiert habe.

Eine Anmerkung noch zur Verschlüsselung: Ich habe bemerkt, dass die Performance erheblich einbricht, wenn man die Festplatten verschlüsselt. Das ist so gesehen nichts neues, aber bei meinem Atom Prozessor bekomme ich, wenn ich eine Datei in eine temporär angelegte RAMDisk kopiere, nur noch 20 MB/s, bei einer unverschlüsselten HDD sind dies etwa 60 MB/s. Dabei ist zu beachten, dass der Dualcore nicht gleichmäßig genutzt wird, wahrscheinlich ist ein Bug im DM-Crypt Modul dafür verantwortlich. Diesbezüglich wurden schon ein paar Patches veröffentlicht, diese habe ich aber noch nicht getestet, da sie momentan bestenfalls als Beta Version angesehen werden können. Mal sehen, ob sich da in Zukunft noch etwas tut.