Kapitel 9. Systemtipps

Inhaltsverzeichnis

9.1. Das screen-Programm
9.1.1. Das Anwendungsszenario für screen
9.1.2. Tastaturkürzel für den screen-Befehl
9.2. Datenaufzeichnung und -darstellung
9.2.1. Der log-Daemon
9.2.2. Analyseprogramme für Logdateien
9.2.3. Shell-Aktivitäten sauber aufzeichnen
9.2.4. Angepasste Anzeige von Textdaten
9.2.5. Angepasste Anzeige von Datum und Zeit
9.2.6. Farbige Shell-Ausgabe
9.2.7. Farbige Befehle
9.2.8. Aufzeichnen von Editor-Aktivitäten für komplexe Wiederholungen
9.2.9. Die Bildschirmanzeige einer X-Anwendung aufzeichnen
9.2.10. Aufzeichnen von Änderungen in Konfigurationsdateien
9.3. Überwachen, Steuern und Starten von Programmaktivitäten
9.3.1. Zeitmessung für einen Prozess
9.3.2. Die Ablaufpriorität
9.3.3. Der Befehl ps
9.3.4. Der Befehl top
9.3.5. Dateien auflisten, die von einem Prozess geöffnet wurden
9.3.6. Programmaktivitäten verfolgen
9.3.7. Identifikation von Prozessen, die Dateien oder Sockets verwenden
9.3.8. Einen Befehl mit festem Intervall wiederholt ausführen
9.3.9. Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen
9.3.10. Ein Programm von der grafischen Oberfläche starten
9.3.11. Anpassen des zu startenden Programms
9.3.12. Einen Prozess beenden (kill)
9.3.13. Einmalige Aufgaben planen
9.3.14. Regelmäßige Aufgaben planen
9.3.15. Alt-SysRq-Tastenkombination
9.4. Tipps zur Systempflege
9.4.1. Wer ist/war im System aktiv?
9.4.2. Allen eine Warnung schicken
9.4.3. Hardware-Identifikation
9.4.4. Hardware-Konfiguration
9.4.5. System- und Hardware-Zeit
9.4.6. Die Terminal-Konfiguration
9.4.7. Die Audio-Infrastruktur
9.4.8. Deaktivieren des Bildschirmschoners
9.4.9. Ausschalten von Pieptönen
9.4.10. Arbeitsspeichernutzung
9.4.11. Systemsicherheits- und integritätsüberprüfung
9.5. Tipps zur Speicherung von Daten
9.5.1. Verwendung des Plattenplatzes
9.5.2. Konfiguration der Plattenpartitionen
9.5.3. Zugriff auf Partitionen über die UUID
9.5.4. LVM2
9.5.5. Konfiguration von Dateisystemen
9.5.6. Dateisystemerzeugung und Integritätsüberprüfung
9.5.7. Optimierung von Dateisystemen über mount-Optionen
9.5.8. Optimierung von Dateisystemen über den Superblock
9.5.9. Optimierung der Festplatte
9.5.10. Optimierung von Solid State Disks
9.5.11. SMART verwenden, um Festplattenausfälle vorherzusehen
9.5.12. Angeben eines Verzeichnisses für temporäre Dateien über $TMPDIR
9.5.13. Vergrößerung des nutzbaren Speicherplatzes mittels LVM
9.5.14. Vergrößerung des nutzbaren Speicherplatzes über das Einbinden anderer Partitionen
9.5.15. Vergrößerung des nutzbaren Speicherplatzes, indem ein anderes Verzeichnis mit "mount --bind" eingebunden wird
9.5.16. Vergrößerung des nutzbaren Speicherplatzes über einen symbolischen Link
9.5.17. Vergrößerung des nutzbaren Speicherplatzes mittels aufs
9.6. Das Festplatten-Abbild
9.6.1. Erzeugung der Festplatten-Abbild-Datei
9.6.2. Direkt auf eine Festplatte schreiben
9.6.3. Einbinden der Festplatten-Abbild-Datei
9.6.4. Eine Festplatten-Abbild-Datei bereinigen
9.6.5. Eine leere Abbild-Datei erstellen
9.6.6. Erstellen einer ISO9660-Abbild-Datei
9.6.7. Direkt auf die CD/DVD-R/RW schreiben
9.6.8. Einbinden einer ISO9660-Abbild-Datei
9.7. Die Binärdaten
9.7.1. Betrachten und Bearbeiten von Binärdaten
9.7.2. Manipulieren von Dateien ohne Einbinden der Festplatte
9.7.3. Datenredundanz
9.7.4. Datenwiederherstellung und forensische Analyse
9.7.5. Aufsplitten einer großen in mehrere kleine Dateien
9.7.6. Leeren von Dateiinhalten
9.7.7. Dummy-Dateien
9.7.8. Eine vollständige Festplatte löschen
9.7.9. Einen ungenutzten Bereich einer Festplatte löschen
9.7.10. Wiederherstellen von gelöschten, aber noch geöffneten Dateien
9.7.11. Alle harten Links suchen
9.7.12. Unsichtbarer Verbrauch von Festplattenplatz
9.8. Tipps zur Datenverschlüsselung
9.8.1. Verschlüsselung von Wechseldatenträgern mit dm-crypt/LUKS
9.8.2. Verschlüsselte Swap-Partition mit dm-crypt
9.8.3. Einbinden verschlüsselter Laufwerke mit dm-crypt/LUKS
9.8.4. Automatische Verschlüsselung von Dateien mit eCryptfs
9.8.5. Automatisches Einbinden von eCryptfs
9.9. Der Kernel
9.9.1. Linux-Kernel 2.6/3.x
9.9.2. Kernel-Parameter
9.9.3. Kernel-Header
9.9.4. Kompilieren des Kernels und dazugehöriger Module
9.9.5. Kompilieren des Kernel-Quellcodes: Empfehlung des Debian-Kernel-Teams
9.9.6. Hardware-Treiber und Firmware
9.10. Virtualisierte Systeme
9.10.1. Virtualisierungswerkzeuge
9.10.2. Arbeitsablauf bei Virtualisierung
9.10.3. Einbinden des virtuellen Festplatten-Images
9.10.4. Chroot-System
9.10.5. System mit mehrfachen Arbeitsplatzumgebungen

Hier beschreibe ich einige grundlegende Tipps zur Konfiguration und Verwaltung des Systems, überwiegend für die Konsole.

screen(1) ist ein sehr nützliches Werkzeug für Leute, die via Fernzugriff über unzuverlässige oder instabile Verbindungen auf entfernte Rechner zugreifen möchten, da es für sporadische Unterbrechungen der Netzwerkverbindung gerüstet ist.


screen(1) bietet nicht nur die Möglichkeit, in einem Terminal-Fenster mehrere Prozesse laufen zu lassen, sondern erlaubt auch einem Remote-Shell-Prozess, Verbindungsunterbrechungen zu überstehen. Hier ein typisches Anwendungsszenario für screen(1):

  1. Sie melden sich auf einer fernen Maschine an.

  2. Sie starten screen auf einer einfachen Konsole.

  3. Sie führen mehrere Programme in screen-Fenstern aus, die Sie über ^A c ("Strg-A" gefolgt von "c") erzeugen.

  4. Sie können mittels ^A n ("Strg-A" gefolgt von "n") zwischen den verschiedenen screen-Fenstern hin- und herschalten.

  5. Plötzlich müssen Sie Ihr Terminal verlassen, aber Sie möchten Ihre aktuelle Arbeit nicht verlieren und deshalb die Verbindung erhalten.

  6. Sie können die Verbindung zur screen-Sitzung durch eine der folgenden Methoden lösen:

    • Ganz brutal: die Netzwerkverbindung trennen;

    • Tippen Sie ^A d ("Strg-A" gefolgt von "d") und melden Sie sich händisch von der Fernverbindung ab;

    • Tippen Sie ^A DD ("Strg-A" gefolgt von "DD"), damit screen die Verbindung löst und Sie abmeldet.

  7. Sie melden Sich am gleichen fernen Rechner erneut an (funktioniert sogar bei Anmeldung über ein anderes Terminal).

  8. Sie starten screen über "screen -r".

  9. screen verbindet ganz von selbst alle vorherigen screen-Fenster mit allen aktuell laufenden Programmen.

[Tipp] Tipp

Sie können mit screen bei Verbindungen, die über Zeit oder Paketvolumen abgerechnet werden, Kosten sparen, indem Sie einen Prozess aktiv laufen lassen, während die Verbindung aber unterbrochen ist, und die Sitzung später erneut verbinden, wenn Sie sich wieder einwählt haben.

Hier eine Liste erwähnenswerter Analyseprogramme für Logdateien ("~Gsecurity::log-analyzer" in aptitude(8)):


[Anmerkung] Anmerkung

CRM114 bietet eine Sprachinfrastruktur, um Unschärfe-Filter (fuzzy filters) mittels der TRE-regex-Bibliothek zu erstellen. Ein populärer Anwendungsfall ist der Spam-Mail-Filter, aber es kann auch als Log-Analysator verwendet werden.

Die einfache Verwendung von script(1) (Näheres in Abschnitt 1.4.9, „Aufzeichnen der Shell-Aktivitäten“) zur Aufzeichnung der Shell-Aktivitäten erzeugt eine Datei mit Steuerzeichen. Dies kann durch Nutzung von col(1) (wie folgt) vermieden werden:

$ script
Script started, file is typescript (zu deutsch: Script gestartet, die Datei heißt typescript)

Machen Sie irgendetwas … und drücken Sie Strg-D, um script zu beenden.

$ col -bx <typescript >cleanedfile
$ vim cleanedfile

Falls Sie kein script haben (zum Beispiel während des Boot-Vorgangs in der initramfs), können Sie stattdessen auch Folgendes verwenden:

$ sh -i 2>&1 | tee typescript
[Tipp] Tipp

Einige x-terminal-emulator-Programme wie z.B. gnome-terminal können auch aufzeichnen. Sie sollten vielleicht den Zeilenpuffer erweitern, um zurückscrollen zu können.

[Tipp] Tipp

Sie können ebenso screen(1) über "^A H" (lesen Sie auch Abschnitt 9.1.2, „Tastaturkürzel für den screen-Befehl“) nutzen, um die Konsolensitzung aufzuzeichnen.

[Tipp] Tipp

Sie können außerdem emacs(1) über "M-x shell", "M-x eshell" oder "M-x term" nutzen, um die Konsolensitzung aufzuzeichnen. Um den Puffer später in eine Datei zu schreiben, verwenden Sie "C-x C-w".

Obwohl Pager wie more(1) und less(1) (lesen Sie dazu Abschnitt 1.4.5, „Der Pager“) sowie spezielle Werkzeuge für Hervorhebung und Formatierung (Näheres dazu in Abschnitt 11.1.8, „Hervorheben und Formatieren von reinen Textdaten“) Text gut anzeigen können, sind normale Texteditoren (Details in Abschnitt 1.4.6, „Der Texteditor“) vielseitiger und besser anzupassen.

[Tipp] Tipp

Bei vim(1) und seinem Pager-Modus alias view(1) wird über ":set hls" die Suche mit Hervorhebung aktiviert.

Das Standard-Anzeigeformat von Datum und Zeit bei dem Befehl "ls -l" hängt vom Gebietsschema (locale) ab (lesen Sie dazu Abschnitt 1.2.6, „Zeitstempel“). Die Variable "$LANG" wird als erstes abgefragt, der Wert kann aber noch mittels der "$LC_TIME"-Variablen überschrieben werden.

Das letztlich verwendete Anzeigeformat für das jeweilige Gebietsschema hängt von der verwendeten Standard-C-Bibliothek (aus dem libc6-Paket) ab. Aufgrunddessen hatten verschiedene Debian-Veröffentlichungen unterschiedliche Standardwerte.

Wenn Sie wirklich das Anzeigeformat von Datum und Zeit über die locale-Einstellung hinaus anpassen möchten, sollten Sie die Einstellung time style value entweder über das "--time-style"-Argument oder über den Wert der Variable "$TIME_STYLE" setzen (Näheres unter ls(1), date(1) und "info coreutils 'ls invocation'").


[Tipp] Tipp

Sie können vermeiden, lange Optionsparameter auf der Befehlszeile eingeben zu müssen, indem sie einen Befehls-Alias verwenden, z.B. "alias ls='ls --time-style=+%d.%m.%y\ %H:%M'" (lesen Sie dazu Abschnitt 1.5.9, „Befehls-Alias“).

[Tipp] Tipp

Obige iso-Formate sind konform mit ISO 8601.

Die Shell-Ausgabe der meisten modernen Terminals kann über ANSI-Escape-Codes farbig gestaltet werden (lesen Sie dazu auch "/usr/share/doc/xterm/ctlseqs.txt.gz").

Probieren Sie zum Beispiel folgendes:

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

Sie können Editor-Aktivitäten für komplexe Wiederholungen aufzeichnen.

Für Vim wie folgt:

  • "qa": Aufnahme der eingegebenen Zeichen in das Register "a" starten;

  • … Editor-Aktivitäten;

  • "q": Aufnahme der eingegebenen Zeichen beenden;

  • "@a": Ausführen des Inhalts von Register "a".

Für Emacs wie folgt:

  • "C-x (": Definition eines Tastaturmakros starten;

  • … Editor-Aktivitäten;

  • "C-x )": Definition des Tastaturmakros beenden;

  • "C-x e": Ausführen des Tastaturmakros.

Programmaktivitäten können mittels spezieller Werkzeuge überwacht und kontrolliert werden:

Tabelle 9.7. Liste von Werkzeugen zur Überwachung und Steuerung von Programmaktivitäten

Paket Popcon Größe Beschreibung
coreutils V:866, I:999 13844 nice(1): ein Programm mit veränderter Ablaufpriorität ausführen
bsdutils V:815, I:999 180 renice(1): die Ablaufpriorität eines laufenden Prozess verändern
procps V:811, I:999 670 Werkzeuge für das "/proc"-Dateisystem: ps(1), top(1), kill(1), watch(1), …
psmisc V:639, I:966 764 Werkzeuge für das "/proc"-Dateisystem: killall(1), fuser(1), peekfd(1), pstree(1)
time V:51, I:885 108 time(1): ein Programm ausführen und die Zeit ausgeben, während der Ressourcen verbraucht wurden
sysstat V:76, I:94 983 sar(1), iostat(1), mpstat(1), …: Werkzeuge zur Messung der System-Performance unter Linux
isag V:0, I:6 131 Interaktive grafische Darstellung der Systemaktivität, basierend auf sysstat
lsof V:401, I:931 420 lsof(8): mit der Option "-p" Dateien auflisten, die von einem gerade laufenden Prozess geöffnet wurden
strace V:28, I:191 990 strace(1): Systemaufrufe und -signale verfolgen
ltrace V:2, I:25 333 ltrace(1): Bibliotheksaufrufe verfolgen
xtrace V:0, I:1 336 xtrace(1): Kommunikation zwischen X11-Client und -Server verfolgen
powertop V:6, I:227 529 powertop(1): Informationen über verbrauchte Systemleistung
cron V:863, I:998 193 Prozesse laut dem Ablaufplan des cron(8)-Daemons im Hintergrund ausführen
anacron V:450, I:547 60 cron-ähnlicher Programmablauf-Planer für Systeme, die nicht 24 Stunden am Tag laufen
at V:503, I:887 103 at(1) oder batch(1): einen Prozess zu einer bestimmten Zeit oder unterhalb einer bestimmten Systembelastung ausführen

[Tipp] Tipp

Das procps-Paket enthält sehr grundlegende Werkzeuge für das Überwachen, Steuern und Starten von Programmaktivitäten. Sie sollten sich mit diesen allen vertraut machen.

Es gibt verschiedene Wege, um einen Befehl zu wiederholen und jedes Mal eine andere Datei aus einer bestimmten Menge von Dateien (hier z.B. ausgewählt über ein glob-Suchmuster auf "*.ext") als Argument zu verwenden.

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • Kombination aus find(1) und xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) mit "-exec"-Option und einem Befehl:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) mit "-exec"-Option und einem kurzen Shell-Skript:

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

Die obigen Beispiele wurden dafür geschrieben, auch eine korrekte Behandlung von komischen Dateinamen, wie z.B. solche mit Leerzeichen, sicherzustellen. Lesen Sie dazu auch Abschnitt 10.1.5, „Aufrufe für die Auswahl von Dateien“; dort finden Sie außerdem weitergehende Verwendungen des Befehls find(1).

Auf der Befehlszeile (command-line interface, CLI) wird das erste Programm des passenden Namens ausgeführt, das in den durch die Umgebungsvariable $PATH definierten Verzeichnissen gefunden wird. Lesen Sie dazu auch Abschnitt 1.5.3, „Die "$PATH"-Variable“.

Bei einer zum freedesktop.org-Standard konformen grafischen Oberfläche (graphical user interface, GUI) enthalten die *.desktop-Dateien in dem Verzeichnis /usr/share/applications/ alle nötigen Attribute für die Anzeige der Programmeinträge im grafischen Menü. Näheres finden Sie in Abschnitt 7.2.2, „Freedesktop.org-Menü“.

Wie in folgendem Beispiel definiert die Datei chromium.desktop die Attribute für den "Chromium-Webbrowser", z.B. "Name" für den Programmnamen, "Exec" für den Pfad zum auszuführenden Programm mit zugehörigen Argumenten, "Icon" für das verwendete Icon-Symbol usw. (Details finden Sie unter Desktop Entry Specification):

[Desktop Entry]
Version=1.0
Name=Chromium Web Browser
Name[de]=Chromium-Webbrowser
GenericName=Web Browser
Comment=Access the Internet
Comment[de]=Internetzugriff
Exec=/usr/bin/chromium %U
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=chromium
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=Chromium
StartupNotify=true

Dies ist eine vereinfachte Beschreibung. Die *.desktop-Dateien werden wie folgt eingelesen:

Die Desktop-Umgebung setzt die Umgebungsvariablen $XDG_DATA_HOME und $XDG_DATA_DIR. Unter GNOME3 z.B.:

  • $XDG_DATA_HOME wird nicht genutzt (der Standardwert aus $HOME/.local/share wird verwendet).

  • $XDG_DATA_DIRS wird auf /usr/share/gnome:/usr/local/share/:/usr/share/ gesetzt.

Daher werden die Basisverzeichnisse (lesen Sie XDG Base Directory Specification) und applications-Verzeichnisse wie folgt gesetzt:

  • $HOME/.local/share/$HOME/.local/share/applications/

  • /usr/share/gnome//usr/share/gnome/applications/

  • /usr/local/share//usr/local/share/applications/

  • /usr/share//usr/share/applications/

Die *.desktop-Dateien werden in diesen applications-Verzeichnissen in dieser Reihenfolge eingelesen.

[Tipp] Tipp

Ein benutzerdefinierter Menüeintrag für die grafische Oberfläche kann erstellt werden, indem eine *.desktop-Datei zum Verzeichnis $HOME/.local/share/applications/ hinzugefügt wird.

[Tipp] Tipp

Ähnlich dazu verhält es sich, wenn eine *.desktop-Datei zum autostart-Verzeichnis in diesen Basisverzeichnissen hinzugefügt wird: das in der *.desktop-Datei definierte Programm wird automatisch ausgeführt, wenn die grafische Benutzeroberfläche gestartet wird (z.B. nach dem Anmelden). Lesen Sie dazu Desktop Application Autostart Specification.

[Tipp] Tipp

Ähnlich ist es auch, wenn eine *.desktop-Datei im $HOME/Desktop-Verzeichnis erstellt wird und die grafische Umgebung die Funktionalität der Programmstarter-Icons (desktop icon launcher) unterstützt: das definierte Programm wird ausgeführt, wenn das Icon angeklickt wird. Bitte beachten Sie, dass der letztliche Name des $HOME/Desktop-Verzeichnisses vom Gebietsschema (Locale) abhängig ist. Näheres dazu finden Sie in xdg-user-dirs-update(1).

Einige Programme starten automatisch ein weiteres Programm. Hier einige Punkte bezüglich der Anpassung dieses Prozesses.

[Tipp] Tipp

update-mime(8) aktualisiert die "/etc/mailcap"-Datei unter Verwendung von "/etc/mailcap.order" (Näheres in mailcap.order(5)).

[Tipp] Tipp

Das debianutils-Paket stellt sensible-browser(1), sensible-editor(1) und sensible-pager(1) bereit; diese treffen eine sinnvolle Auswahl, welcher Editor, Pager bzw. Webbrowser aufgerufen wird. Ich empfehle, dass Sie diese Shellskripte lesen.

[Tipp] Tipp

Um eine Konsolen-Applikation wie mutt unter X als bevorzugte Anwendung aufzurufen, sollten Sie wie folgt eine X-Anwendung erzeugen und "/usr/local/bin/mutt-term" als bevorzugte, zu startende Anwendung setzen.

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

Verwenden Sie cron(8), um regelmäßig wiederkehrende Aufgaben zu planen. Lesen Sie dazu crontab(1) and crontab(5).

Sie können Prozesse zur Ausführung durch einen normalen Benutzer, z.B. den Benutzer foo, einplanen, indem Sie mit dem Befehl "crontab -e" eine crontab(5)-Datei namens "/var/spool/cron/crontabs/foo" erstellen.

Hier ein Beispiel einer crontab(5)-Datei:

# /bin/sh verwenden, um Befehle auszuführen, egal was in /etc/passwd steht:
SHELL=/bin/sh
# Jegliche Ausgabe an Paul senden, egal wessen crontab dies ist:
MAILTO=paul
# Minute Stunde Tag-des-Monats Monat Tag-der-Woche befehl (Tag-...-Optionen sind oder-verknüpft).
# Jeden Tag um 00:05 ausführen:
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# Am Ersten jedes Monats um 14:15 ausführen -- Ausgabe per Mail an Paul:
15 14 1  * *   $HOME/bin/monthly
# An allen Werktagen (1-5) um 22:00 Joe nerven. % für eine neue Zeile, das letzte % für CC:
0 22 *   * 1-5 mail -s "Es ist 22 Uhr." joe%Joe,%%Wo sind deine Kinder?%.%%
23 */2 1 2 *   echo "Am 01. Febr. um 23 Minuten nach 0 Uhr, 2 Uhr, 4 Uhr ... ausführen"
5  4 *   * sun echo "Jeden Sonntag um 04:05 ausführen"
# An jedem ersten Montag des Monats um 03:40 ausführen:
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[Tipp] Tipp

Auf Systemen, die nicht ständig laufen, installieren Sie das anacron-Paket, um regelmäßige Aufgaben auszuführen, sobald nach entsprechender Maschinen-Einschaltdauer ein festgelegter Intervall abgelaufen ist. Näheres unter anacron(8) und anacrontab(5).

[Tipp] Tipp

Geplante Skripte zur Systemwartung können Sie vom root-Konto aus wiederholt ausführen, indem Sie solche Skripte in "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/" oder "/etc/cron.monthly/" einfügen. Der Ausführungszeitpunkt dieser Skripte kann über "/etc/crontab" und "/etc/anacrontab" angepasst werden.

Die Kernel-Option "Magic SysRq key" (SAK key) bietet Ihnen eine Absicherung gegen Systemfehlfunktionen und ist im Debian-Kernel jetzt standardmäßig aktiviert. Durch Drücken von Alt-SysRq gefolgt von einer der folgenden Tasten können Sie wie durch Zauberei die Kontrolle über das System zurückerlangen:


[Tipp] Tipp

Zum Verständnis obiger Beschreibungen lesen Sie die Handbuchseiten von signal(7), kill(1) und sync(1).

Die Kombination von "Alt-SysRq s", "Alt-SysRq u" und "Alt-SysRq b" funktioniert gut, um aus wirklich bösen Situationen herauszukommen und wieder Zugriff auf eine nutzbare Tastatur zu erlangen, ohne das System stoppen zu müssen.

Details finden Sie in "/usr/share/doc/linux-doc-3.*/Documentation/sysrq.txt.gz".

[Achtung] Achtung

Die Alt-SysRq-Funktionalität könnte als Sicherheitsrisiko angesehen werden, da sie normalen Benutzern Zugriff auf Funktionen erlaubt, die eigentlich root-Privilegien verlangen. Durch das Einfügen von "echo 0 >/proc/sys/kernel/sysrq" in "/etc/rc.local" oder "kernel.sysrq = 0" in "/etc/sysctl.conf" wird die Alt-SysRq-Funktionalität deaktiviert.

[Tipp] Tipp

Von einem SSH-Terminal u.ä. können Sie die Alt-SysRq-Funktionalität nutzen, indem Sie nach "/proc/sysrq-trigger" schreiben. Zum Beispiel werden durch "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" alle eingebundenen Dateisysteme synchronisiert und mittels umount aus der Einbindung gelöst.

Obwohl der größte Teil der Hardware-Konfiguration auf modernen GUI-Arbeitsplatz-Systemen wie GNOME und KDE über entsprechende GUI-Werkzeuge verwaltet werden kann, ist es eine gute Idee, zumindest einige grundlegende Methoden für deren Konfiguration zu kennen.


Hierbei ist ACPI ein neueres Gerüst zum Power Management als Nachfolger für das ältere APM.

[Tipp] Tipp

Die Skalierung der CPU-Frequenz wird auf modernen Systemen von Kernel-Modulen wie acpi_cpufreq abgewickelt.

Über folgende Befehle wird die System- und Hardware-Zeit auf DD.MM.CCYY hh:mm (Tag.Monat.Jahr Stunde:Minute) gesetzt.

# date DDMMCCYYhhmm
# hwclock --utc --systohc
# hwclock --show

Zeiten werden auf einem Debian-System normalerweise in der Lokalzeit angezeigt, aber die Hardware- und Systemzeit verwenden üblicherweise UTC (GMT).

Wenn die Hardware-Zeit (auch als BIOS- oder CMOS-Uhr bezeichnet) auf UTC eingestellt ist, ändern Sie die Einstellung in "/etc/default/rcS" auf "UTC=yes".

Mit folgendem Befehl konfigurieren Sie die vom Debian-System verwendete Zeitzone neu:

# dpkg-reconfigure tzdata

Falls Sie die Systemzeit über das Netzwerk aktualisieren möchten, sollten Sie die Verwendung des NTP-Dienstes in Erwägung ziehen; dazugehörige Pakete sind ntp, ntpdate und chrony.

Hier finden Sie weitere Informationen:

[Tipp] Tipp

ntptrace(8) aus dem ntp-Paket kann eine Hintereinanderschaltung mehrerer NTP-Server zu deren primärer Quelle zurückverfolgen.

Gerätetreiber für Soundkarten werden in aktuellen Linux-Systemen von Advanced Linux Sound Architecture (ALSA) bereitgestellt. ALSA enthält zwecks Kompatibilität einen Emulationsmodus für das ältere Open Sound System (OSS).

[Tipp] Tipp

Verwenden Sie "cat /dev/urandom > /dev/audio" oder speaker-test(1), um die Lautsprecher zu testen (^C zum stoppen).

[Tipp] Tipp

Falls Sie keinen Ton hören, sind Ihre Lautsprecher möglicherweise an einem stummgeschalteten Ausgang angeschlossen. Moderne Sound-Systeme haben oft mehrere Ausgänge. alsamixer(1) aus dem alsa-utils-Paket ist nützlich für die Einstellung von Lautstärke und Stummschaltung.

Anwendungssoftware kann konfiguriert sein, nicht die Soundkaren direkt anzusprechen, sondern über standardisierte Sound-Server-Systeme zu arbeiten.


Es gibt normalerweise für jede populäre Arbeitsplatz-Umgebung eine Sound-Engine. Für jede Sound-Engine, die von einer Anwendung verwendet wird, kann ausgewählt werden, mit welchem der verschiedenen Sound-Server sie sich verbindet.

Schlechte Systemwartung könnte Ihr System für Angriffe von extern anfällig machen.

Um eine Systemsicherheits- und integritätsüberprüfung durchzuführen, sollten Sie mit folgendem beginnen:


Hier ein einfaches Skript, um nach Dateien mit typischerweise falschen Dateiberechtigungen (schreibbar durch alle) zu suchen:

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[Achtung] Achtung

Da das debsums-Paket MD5-Prüfsummen verwendet, die lokal gespeichert sind, kann ihm als Sicherheits-Audit-Werkzeug gegen bösartige Angriffe nicht vollständig vertraut werden.

Indem Sie Ihr System mit einer Linux Live-CD oder einer Debian-Installer-CD im Rettungsmodus starten, können Sie auf einfache Weise den Datenspeicher auf Ihrem Boot-Laufwerk neu konfigurieren.

Bei der Konfiguration von Laufwerkspartitionen verdient parted(8) etwas Aufmerksamkeit (obwohl fdisk(8) als Standard angesehen wurde). Die Begriffe "Disk partitioning data", "Partitionstabelle", "Partition map" und "Disk label" werden alle synonym verwendet.

Die meisten PCs verwenden das klassische Schema des Master Boot Record (MBR), um die Partitionstabelle im ersten Sektor abzulegen, also im LBA-Sektor 0 (512 Byte).

[Anmerkung] Anmerkung

Einige neue PCs mit Extensible Firmware Interface (EFI), inklusive Intel-basierten Macs, verwenden das GUID Partition Table (GPT)-Schema, bei dem die Partitionstabelle nicht im ersten Sektor liegt.

Obwohl fdisk(8) das Standardwerkzeug zur Laufwerkspartitionierung war, ist parted(8) dabei, es zu ersetzen.


[Achtung] Achtung

Obwohl parted(8) vorgibt, Dateisysteme erzeugen und auch nachträglich in der Größe verändern zu können, ist es sicherer, für solche Dinge gut betreute spezialisierte Werkzeuge wie mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) und resize2fs(8) zu verwenden.

[Anmerkung] Anmerkung

Um zwischen GPT und MBR zu wechseln, müssen Sie die ersten paar Blöcke der Platte direkt löschen (lesen Sie dazu Abschnitt 9.7.6, „Leeren von Dateiinhalten“) und "parted /dev/sdx mklabel gpt" oder "parted /dev/sdx mklabel msdos" nutzen, um sie wieder zu setzen. Bitte beachten Sie, dass hier "msdos" für MBR verwendet wird.

Obwohl aufgrund der Neukonfiguration einer Partition oder der Aktivierungsreihenfolge von Wechseldatenträgern Laufwerke von einem zum anderen Mal unterschiedliche Laufwerksnamen haben können, gibt es auch eine Möglichkeit, über konsistente Bezeichnungen darauf zuzugreifen. Dies ist auch hilfreich, wenn Sie mehrere Festplatten haben und Ihr BIOS die Gerätenamen nicht jedes Mal identisch zuweist.

[Tipp] Tipp

Sie können die UUID eines blockorientierten Gerätes mit blkid(8) abfragen.

[Tipp] Tipp

Geräteknoten von bestimmten Geräten wie Wechseldatenträgern können, falls nötig, auch über udev-Regeln statisch festgelegt werden, so dass sie sich nicht mehr ändern. Lesen Sie dazu Abschnitt 3.3, „Das udev-System“.

LVM2 ist ein Logical Volume Manager für den Linux-Kernel. Mit LVM2 können Partitionen auf logischen Volumes erzeugt werden statt auf physikalischen Festplatten.

LVM erfordert folgendes:

  • device-mapper-Unterstützung im Linux-Kernel (Standardeinstellung für Debian-Kernel);

  • die Userspace-Bibliothek zur Unterstützung von device-mapper (libdevmapper*-Paket);

  • die Userspace-LVM2-Werkzeuge (lvm2-Paket).

Beginnen Sie mit dem Erlernen von LVM2 mittels folgender Handbuchseiten:

  • lvm(8): Grundlagen des LVM2-Mechanismus' (Liste aller LVM2-Befehle);

  • lvm.conf(5): Konfigurationsdatei für LVM2;

  • lvs(8): Informationen über logische Volumes ausgeben;

  • vgs(8): Informationen über Volume-Gruppen ausgeben;

  • pvs(8): Informationen über physikalische Volumes ausgeben.

Für das ext4-Dateisystem enthält das e2fsprogs-Paket folgendes:

  • mkfs.ext4(8) zur Erzeugung neuer ext4-Dateisysteme;

  • fsck.ext4(8) zur Überprüfung und Reparatur vorhandener ext4-Dateisysteme;

  • tune2fs(8) zur Konfiguration des Superblocks von ext4-Dateisystemen;

  • debugfs(8) für interaktive Fehlersuche in ext4-Dateisystemen. (Es enthält den undel-Befehl, um gelöschte Dateien wiederherzustellen.)

Die Befehle mkfs(8) und fsck(8) werden durch das e2fsprogs-Paket bereitgestellt und sind Frontends für Dateisystem-abhängige Programme (mkfs.fstype und fsck.fstype). Für ext4 sind das mkfs.ext4(8) und fsck.ext4(8) (dies sind harte Verknüpfungen auf mke2fs(8) und e2fsck(8)).

Ähnliche Befehle sind für jedes von Linux unterstützte Dateisystem verfügbar.


[Tipp] Tipp

Ext4 ist das Standard-Dateisystem für Linux-Systeme und wird dringend zur Verwendung empfohlen, außer Sie haben einen bestimmten Grund, dies nicht zu tun.

[Tipp] Tipp

Das Btrfs-Dateisystem ist im Linux-Kernel 3.2 (Debian Wheezy) verfügbar. Man geht davon aus, dass dies nach ext4 das nächste Standard-Dateisystem wird.

[Warnung] Warnung

Sie sollten das Btrfs-Dateisystem noch nicht für kritische Daten verwenden, solange es nicht Live-Kernelspace-fsck(8)-Funktionalität und Bootloader-Unterstützung erhalten hat.

[Tipp] Tipp

Einige Werkzeuge erlauben den Zugriff auf Dateisysteme ohne entsprechende Unterstützung im Linux-Kernel (lesen Sie dazu Abschnitt 9.7.2, „Manipulieren von Dateien ohne Einbinden der Festplatte“).

Die grundlegende statische Dateisystem-Konfiguration wird in "/etc/fstab" festgelegt. Zum Beispiel:

# <Dateisystem> <Einbindungspunkt> <Typ> <Optionen> <dump>  <pass>
proc            /proc              proc  defaults        0       0
UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 noatime,errors=remount-ro 0 1
UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw  0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto 0       0
[Tipp] Tipp

Die UUID (Näheres in Abschnitt 9.5.3, „Zugriff auf Partitionen über die UUID“) kann statt der normalen Namen für blockorientierte Geräte wie "/dev/sda1", "/dev/sda2" … verwendet werden, um das Gerät zu identifizieren.

Die Performance und Charakteristik eines Dateisystems kann über mount-Optionen optimiert werden (lesen Sie dazu fstab(5) und mount(8)). Erwähnenswert sind dabei die folgenden:

  • "defaults": impliziert die Standardoptionen "rw,suid,dev,exec,auto,nouser,async". (allgemein)

  • "noatime" oder "relatime": sehr effektiv, um den Lesezugriff zu beschleunigen. (allgemein)

  • "user": erlaubt einem unprivilegierten Benutzer, das Dateisystem einzubinden. Diese Option impliziert die Kombination "noexec,nosuid,nodev". (allgemein, verwendet für CDs oder USB-Speichermedien)

  • "noexec,nodev,nosuid": eine Kombination zur Erhöhung der Sicherheit. (allgemein)

  • "noauto": beschränkt das Einbinden auf explizit ausgeführte Operationen. (allgemein)

  • "data=journal": Option für ext3fs; kann die Datenintegrität bei Stromausfällen erhöhen, allerdings zum Preis einer leichten Verringerung der Schreibgeschwindigkeit.

[Tipp] Tipp

Sie müssen entsprechende Kernel-Bootparameter angeben (lesen Sie dazu Abschnitt 3.1.2, „Stufe 2: der Bootloader“), wie z.B. "rootflags=data=journal", um für das root-Dateisystem den dafür nicht standardmäßigen Journal-Modus zu aktivieren. Für Lenny ist der Standard-Journal-Modus "rootflags=data=ordered". Bei Squeeze ist es "rootflags=data=writeback".

Die Charakteristik eines Dateisystems kann über seinen Superblock optimiert werden, verwenden Sie dazu den Befehl tune2fs(8):

[Tipp] Tipp

Ungeachtet seines Namens funktioniert tune2fs(8) nicht nur für ext2-Dateisysteme, sondern auch für ext3 und ext4.

Die Performance und Lebensdauer einer Solid State Disk (SSD) kann wie folgt optimiert werden:

  • Verwenden Sie den aktuellsten Linux-Kernel (>= 3.2).

  • Reduzieren Sie Schreibvorgänge für Lesezugriffe.

    • Setzen Sie die mount-Optionen "noatime" oder "relatime" in /etc/fstab.

  • Aktivieren Sie den TRIM-Befehl.

    • Setzen Sie die mount-Option "discard" in /etc/fstab für ext4-Dateisysteme, Swap-Partitionen, Btrfs usw. Lesen Sie dazu fstab(5).

    • Setzen Sie die Option "discard" in /etc/lvm/lvm.conf für LVM. Lesen Sie dazu lvm.conf(5).

    • Setzen Sie die Option "discard" in /etc/crypttab für dm-crypt. Lesen Sie dazu crypttab(5).

  • Aktivieren Sie das für SSD optimierte Festplatten-Zuordnungsschema.

    • Setzen Sie bei Btrfs-Dateisystemen die mount-Option "ssd" in /etc/fstab.

  • Konfigurieren Sie Ihren Laptop so, dass die Daten nur alle 10 Minuten auf die Disk übertragen werden.

    • Setzen Sie die mount-Option "commit=600" in /etc/fstab. Lesen Sie dazu fstab(5).

    • Konfigurieren Sie pm-utils so, dass auch bei Betrieb mit Netzteil (an der Steckdose) der Laptop-Modus aktiviert wird. Näheres unter Debian-Fehlerbericht #659260.

[Warnung] Warnung

Das Ändern des Intervalls zur Übertragung der Daten auf die Disk vom normalen Standardwert 5 Sekunden auf 10 Minuten macht Ihre Daten anfälliger für Datenverluste im Falle eines Stromausfall.

Sie können Ihre Festplatte mit dem smartd(8)-Daemon überwachen und protokollieren, sofern diese mit dem SMART-Standard kompatibel ist:

  1. Aktivieren Sie die SMART-Funktionalität im BIOS.

  2. Installieren Sie das Paket smartmontools.

  3. Identifizieren Sie Ihre Festplatten, indem Sie sie mit df(1) auflisten.

    • Wir nehmen an, dass die zu überwachende Festplatte als "/dev/hda" auftaucht.

  4. Überprüfen Sie die Ausgabe von "smartctl -a /dev/hda", um festzustellen, ob die SMART-Funktionalität derzeit wirklich aktiv ist.

    • Falls nicht, aktivieren Sie sie mit "smartctl -s on -a /dev/hda".

  5. Aktivieren Sie den smartd(8)-Daemon wie folgt:

    • Entfernen Sie das Kommentarzeichen vor "start_smartd=yes" in der Datei "/etc/default/smartmontools".

    • Führen Sie einen Neustart des smartd(8)-Daemons über "sudo /etc/init.d/smartmontools restart" durch.

[Tipp] Tipp

Der smartd(8)-Daemon kann über die /etc/smartd.conf-Datei angepasst werden; dazu gehört auch die Einstellung, auf welchem Wege Sie über Warnungen informiert werden möchten.

Partitionen, die bei der Installation über den Logical Volume Manager (LVM) (Linux-Funktionalität) erzeugt wurden, können einfach und ohne größere System-Neukonfiguration in der Größe verändert werden, indem Speicherplatz hinzugefügt oder entfernt wird, und zwar über die Grenzen einzelner Speichermedien hinweg.

Wenn Sie freien Platz auf einer anderen Partition haben (z.B. "/pfad/zu/"), können Sie dort ein Verzeichnis erstellen und dies mittels aufs auf ein Verzeichnis, in dem Sie mehr Speicherplatz brauchen, aufstapeln (zwei Dateisysteme werden übereinandergelegt):

$ sudo mv arbeits-verz alt-verz
$ sudo mkdir arbeits-verz
$ sudo mkdir -p /pfad/zu/leerem-verz
$ sudo mount -t aufs -o br:/pfad/zu/leerem-verz:alt-verz none arbeits-verz
[Achtung] Achtung

Die Verwendung von aufs für langfristige Datenspeicherung ist keine gute Idee, da es noch in der Entwicklung ist und Design-Änderungen zu Problemen führen könnten.

[Tipp] Tipp

Um aufs nutzen zu können, müssen die entsprechenden Hilfsprogramme aus dem aufs-tools-Paket sowie ein Kernel-Modul-Paket für aufs (wie z.B. aufs-modules-2.6-amd64) installiert sein.

[Tipp] Tipp

aufs wird bei vielen modernen Live-CD-Projekten verwendet, um ein beschreibbares root-Dateisystem bereitzustellen.

Hier wird die Veränderung des Festplatten-Abbilds behandelt.

Die Festplatten-Abbild-Datei ("disk.img") eines nicht eingebundenen Gerätes, z.B. der zweiten SCSI- oder Serial-ATA-Festplatte "/dev/sdb", kann mit cp(1) oder dd(1) wie folgt erzeugt werden:

# cp /dev/sdb disk.img
# dd if=/dev/sdb of=disk.img

Ein Abbild des Master Boot Record (MBR), wie er in traditionellen PCs verwendet wird (lesen Sie auch Abschnitt 9.5.2, „Konfiguration der Plattenpartitionen“) und der im ersten Sektor der primären IDE-Festplatte abgelegt ist, kann wie folgt durch die Verwendung von dd(1) erstellt werden:

# dd if=/dev/hda of=mbr.img bs=512 count=1
# dd if=/dev/hda of=mbr-nopart.img bs=446 count=1
# dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
  • "mbr.img": der MBR mit der Partitionstabelle

  • "mbr-nopart.img": der MBR ohne Partitionstabelle

  • "mbr-part.img": die Partitionstabelle nur vom MBR

Falls Sie eine SCSI- oder Serial-ATA-Festplatte als Boot-Festplatte haben, ersetzen Sie "/dev/hda" durch "/dev/sda".

Falls Sie ein Abbild einer Festplattenpartition der Originalplatte erstellen möchten, ersetzen Sie "/dev/hda" durch "/dev/hda1" usw.

Das Festplatten-Abbild "partition.img", welches ein einfaches Partitions-Abbild enthält, kann mittels einem loop device wie folgt eingebunden und anschließend die Einbindung wieder getrennt werden:

# losetup -v -f partition.img
Loop device is /dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0

Das kann noch weiter vereinfacht werden:

# mkdir -p /mnt/loop0
# mount -t auto -o loop partition.img /mnt/loop0
...hack...hack...hack
# umount partition.img

Jede Partition des Festplatten-Abbilds "disk.img", das mehrere Partitionen enthält, kann mittels dem loop device eingebunden werden. Da das loop device standardmäßig keine Partitionen verwaltet, muss es wie folgt zurückgesetzt werden:

# modinfo -p loop # Funktionalität des Kernels verifizieren
max_part:Maximum number of partitions per loop device
(auf deutsch: max. Anzahl von Partitionen pro loop device)
max_loop:Maximum number of loop devices
(auf deutsch: max. Anzahl von loop devices)
# losetup -a # Verifizieren, dass das loop device nicht verwendet wird
# rmmod loop
# modprobe loop max_part=16

Jetzt kann das loop device bis zu 16 Partitionen verwalten.

# losetup -v -f disk.img
Loop device is /dev/loop0
# fdisk -l /dev/loop0

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x452b6464

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1               1         600     4819468+  83  Linux
/dev/loop0p2             601         652      417690   83  Linux
# mkdir -p /mnt/loop0p1
# mount -t ext4 /dev/loop0p1 /mnt/loop0p1
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/loop0p2 /mnt/loop0p2
...hack...hack...hack
# umount /dev/loop0p1
# umount /dev/loop0p2
# losetup -d /dev/loop0

Alternativ können Sie ähnliche Funktionalitäten auch erreichen, indem Sie wie hier die device-mapper-Geräte nutzen, die von kpartx(8) aus dem kpartx-Paket erzeugt werden:

# kpartx -a -v disk.img
...
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2
...
...hack...hack...hack
# umount /dev/mapper/loop0p2
...
# kpartx -d /mnt/loop0
[Anmerkung] Anmerkung

Sie können auch eine einzelne Partition eines solchen Festplatten-Abbilds mit einem loop device einbinden, indem Sie ein Offset verwenden, um den MBR usw. zu überspringen. Dies ist allerdings fehleranfälliger.

Ein leeres Festplatten-Abbild "disk.img", das bis zu einer Größe von 5 GiB anwachsen kann, erzeugen Sie mit dd(1) wie folgt:

$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

Mittels dem loop device erstellen Sie auf diesem Festplatten-Abbild "disk.img" wie folgt ein ext4-Dateisystem:

# losetup -f -v disk.img
Loop device is /dev/loop1
# mkfs.ext4 /dev/loop1
...hack...hack...hack
# losetup -d /dev/loop1
$ du  --apparent-size -h disk.img
5.0G  disk.img
$ du -h disk.img
83M disk.img

Die Dateigröße von "disk.img" ist 5.0 GiB, aber der aktuell von ihm verwendete Speicherplatz ist lediglich 83 MiB. Diese Diskrepanz ist möglich, da ext4 die Verwendung von Sparse-Dateien unterstützt.

[Tipp] Tipp

Der wirklich genutzte Speicherplatz von Sparse-Dateien wächst mit den Daten, die in diese hineingeschrieben werden.

Die Nutzung von Befehlen ähnlich denen aus Abschnitt 9.6.3, „Einbinden der Festplatten-Abbild-Datei“ auf Geräten, die von loop device oder device-mapper-Geräten erzeugt wurden, erlaubt Ihnen ebenfalls, das Abbild "disk.img" über parted(8) oder fdisk(8) zu erzeugen, sowie Dateisysteme mit mkfs.ext4(8), mkswap(8) usw. zu erstellen.

Eine ISO9660-Abbild-Datei "cd.iso" aus einem Quellverzeichnisbaum (hier in "quell_verzeichnis") kann mit genisoimage(1) aus dem cdrkit-Paket erstellt werden:

#  genisoimage -r -J -T -V volume_id -o cd.iso quell_verzeichnis

Ähnlich dazu kann ein boot-fähiges ISO9660-Abbild "cdboot.iso" aus einem Verzeichnisbaum ("quell_verzeichnis") erstellt werden, der dem des debian-installer ähnelt:

#  genisoimage -r -o cdboot.iso -V volume_id \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table quell_verzeichnis

Hier wird der Isolinux-Bootloader zum Booten verwendet (Näheres in Abschnitt 3.1.2, „Stufe 2: der Bootloader“).

Sie können die Berechnung der md5sum-Prüfsumme und die Erstellung eines ISO9660-Abbilds direkt von der CD-ROM durchführen, wie hier gezeigt:

$ isoinfo -d -i /dev/cdrom
CD-ROM is in ISO 9660 format
...
Logical block size is: 2048
Volume size is: 23150592
...
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
[Warnung] Warnung

Sie müssen wie oben gezeigt dafür sorgen, dass Sie nicht von einem Fehler im Linux-Kernel ("ISO9660 filesystem read ahead bug") betroffen werden; nur so können Sie korrekte Ergebnisse erhalten.

Hier behandeln wir das Bearbeiten von Binärdaten auf einem Speichermedium.

Hier einige Programme für Datenwiederherstellung und forensische Analysen:


[Tipp] Tipp

Sie können gelöschte Dateien auf einem ext2-Dateisystem wiederherstellen, indem Sie list_deleted_inodes und den undel-Befehl von debugfs(8) (aus dem e2fsprogs-Paket) verwenden.

Mit physikalischem Zugriff auf den Rechner kann jeder ganz einfach uneingeschränkte Rechte und Zugriffe auf alle Dateien auf Ihrem PC erlangen (lesen Sie dazu Abschnitt 4.7.4, „Sichern des root-Passworts“). Das bedeutet, dass das passwortgeschützte Anmeldesystem Ihre Privatsphäre und sensiblen Daten nicht vor dem möglichen Diebstahl Ihres PCs schützen kann. Um dies zu erreichen, müssen Sie eine Technologie zur Datenverschlüsselung verwenden. Obwohl GNU Privacy Guard (Näheres in Abschnitt 10.3, „Daten-Sicherheitsinfrastruktur“) Dateien verschlüsseln kann, bedeutet es für den Benutzer einigen Aufwand.

dm-crypt und eCryptfs ermöglichen eine automatische Datenverschlüsselung direkt über Linux-Kernel-Module bei minimalem Aufwand für den Benutzer.


Dm-crypt ist ein kryptografisches Dateisystem, welches device-mapper verwendet. Device-mapper bildet ein Blockgerät auf einem anderen ab.

eCryptfs ist ein anderes kryptografisches System, das ein "stacked filesystem" (ein Dateisystem, das einem anderen überlagert ist) nutzt. Das "stacked" Dateisystem überlagert ein vorhandenes Verzeichnis eines eingebundenen Dateisystems.

[Achtung] Achtung

Datenverschlüsselung kostet CPU-Zeit usw. Bitte wägen Sie Nutzen und Kosten gegeneinander ab.

[Anmerkung] Anmerkung

Mit dem debian-installer (Lenny und später) kann ein vollständiges Debian-System auf einer verschlüsselten Festplatte installiert werden; dabei werden dm-crypt/LUKS und initramfs verwendet.

[Tipp] Tipp

In Abschnitt 10.3, „Daten-Sicherheitsinfrastruktur“ finden Sie Infos über eine Verschlüsselungslösung, die komplett auf Benutzerebene abläuft: GNU Privacy Guard.

Sie können die Inhalte eines Wechseldatenträgers, wie z.B. eines USB-Sticks auf "/dev/sdx", mit dm-crypt/LUKS verschlüsseln. Formatieren Sie ihn einfach wie folgt:

# badblocks -c 1024 -s -w -t random -v /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open --type luks /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

Dann kann er in einer modernen Arbeitsplatzumgebung wie ein normaler USB-Stick unter "/media/<datenträger-name>" eingebunden werden (Näheres hierzu in Abschnitt 10.1.7, „Wechseldatenträger“), außer dass dabei nach einem Passwort gefragt wird; in GNOME nutzen Sie dazu gnome-mount(1). Der Unterschied ist, dass jegliche Daten, die auf den Stick geschrieben werden, verschlüsselt sind. Sie können den Stick alternativ auch mit einem anderen Dateisystem formatieren, z.B. als ext4 mit "mkfs.ext4 /dev/mapper/sdx1".

[Anmerkung] Anmerkung

Wenn Sie wirklich paranoid sind, was die Sicherheit Ihrer Daten anbelangt, sollten Sie unter Umständen die Daten auf dem Stick mehrfach überschreiben (mit dem "badblocks"-Befehl aus dem obigen Beispiel). Diese Operation ist allerdings sehr zeitaufwendig.

Wir gehen davon aus, dass Ihre originale "/etc/fstab" folgendes enthält:

/dev/sda7 swap sw 0 0

Eine verschlüsselte Swap-Partition aktivieren Sie mit dm-crypt wie folgt:

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

Dateien, die unterhalb von "~/Private/" abgelegt werden, können mit eCryptfs und dem ecryptfs-utils-Paket automatisch verschlüsselt werden.

  • Starten Sie ecryptfs-setup-private(1) und geben Sie in den folgenden Dialogen "~/Private/" als zu verschlüsselndes Verzeichnis an.

  • Aktivieren Sie "~/Private/", indem Sie ecryptfs-mount-private(1) ausführen.

  • Verschieben Sie sensible Dateien nach "~/Private/" und erstellen Sie symbolische Links, falls erforderlich.

    • Mögliche Kandidaten: "~/.fetchmailrc", "~/.ssh/identity", "~/.ssh/id_rsa", "~/.ssh/id_dsa" sowie andere Dateien mit den Berechtigungen "go-rwx".

  • Verschieben Sie Verzeichnisse mit sensiblem Inhalt nach "~/Private/" und erstellen Sie symbolische Links, falls erforderlich.

    • Mögliche Kandidaten: "~/.gnupg" sowie andere Verzeichnisse mit den Berechtigungen "go-rwx".

  • Erzeugen Sie einen symbolischen Link von "~/Desktop/Private/" auf "~/Private/", um Operationen auf der Arbeitsfläche zu erleichtern.

  • Deaktivieren Sie "~/Private/", indem Sie ecryptfs-umount-private(1) ausführen.

  • Immer wenn Sie Zugriff auf die verschlüsselten Daten benötigen, aktivieren Sie "~/Private/" mittels "ecryptfs-mount-private".

[Tipp] Tipp

Da eCryptfs selektiv nur bestimmte, sensible Dateien verschlüsselt, ist die Systembelastung hier viel kleiner als bei der Verwendung von dm-crypt für das ganze root- oder "/home"-Dateisystem. Es erfordert keine besonderen Anstrengungen zwecks Einrichtung des Speichers auf dem Laufwerk, allerdings können mit eCryptfs nicht alle Dateisystem-Metadaten geheim gehalten werden.

Wenn Sie Ihr Login-Passwort verwenden, um darüber Schlüssel für die Verschlüsselung gesichert abzulegen, können Sie eCryptfs automatisch mittels PAM (Pluggable Authentication Modules) einbinden.

Fügen Sie folgende Zeile vor "pam_permit.so" in "/etc/pam.d/common-auth" ein:

auth required pam_ecryptfs.so unwrap

Fügen Sie folgende Zeile als letzte Zeile in "/etc/pam.d/common-session" ein:

session optional pam_ecryptfs.so unwrap

Fügen Sie folgende Zeile als erste aktive Zeile in "/etc/pam.d/common-password" ein:

password required pam_ecryptfs.so

Dies ist ziemlich bequem.

[Warnung] Warnung

Konfigurationsfehler in PAM könnten Sie aus Ihrem eigenen System aussperren. Weiteres hierzu in Kapitel 4, Authentifizierung.

[Achtung] Achtung

Wenn Sie Ihr Login-Passwort verwenden, um darüber Schlüssel für die Verschlüsselung gesichert abzulegen, sind Ihre verschlüsselten Daten nur so sicher wie Ihr Login-Passwort. Ihre Daten unterliegen so dem Risiko, dass jemand nach dem Diebstahl Ihres Laptops Software zum Knacken von Passwörtern darauf los läßt, außer Sie sind sehr sorgfältig bei der Wahl eines starken Passworts (lesen Sie dazu Abschnitt 4.7.4, „Sichern des root-Passworts“).

Debian stellt für unterstützte Architekturen modulare Linux-Kernel als Pakete bereit.

Es gibt einige erwähnenswerte Funktionalitäten im Linux-Kernel 2.6/3.x verglichen mit Version 2.4:

Der Versionssprung von Linux 2.6.39 auf Linux 3.0 ist nicht durch gravierende technologische Änderungen begründet, sondern durch den 20. Geburtstag von Linux.

Viele Linux-Funktionalitäten sind wie folgt über Kernel-Parameter konfigurierbar:

Lesen Sie "kernel-parameters.txt(.gz)" und andere zugehörige Dokumente in der Linux-Kernel-Dokumentation ("/usr/share/doc/linux-doc-3.*/Documentation/filesystems/*"), bereitgestellt in dem linux-doc-3.*-Paket.

Debian hat seine eigene Methode zur Kompilierung des Kernels und zugehöriger Module.


Wenn Sie eine initrd in Abschnitt 3.1.2, „Stufe 2: der Bootloader“ verwenden, lesen Sie unbedingt die entsprechenden Informationen in initramfs-tools(8), update-initramfs(8), mkinitramfs(8) und initramfs.conf(5).

[Warnung] Warnung

Setzen Sie in den Verzeichnissen Ihres Quellcode-Baums (z.B. "/usr/src/linux*") keine symbolischen Links auf "/usr/include/linux" and "/usr/include/asm" (einige veraltete Dokumentationen empfehlen dies).

[Anmerkung] Anmerkung

Um den aktuellsten Linux-Kernel auf einem Debian-Stable-System zu kompilieren, könnte die Verwendung von rückportierten aktuellen Werkzeugen aus Debian Unstable nötig sein.

[Anmerkung] Anmerkung

Dynamic Kernel Module Support (DKMS) ist ein neues distributions-unabhängiges Rahmenwerk, das entwickelt wurde, um die Aktualisierung einzelner Kernel-Module ohne Austausch des kompletten Kernels zu ermöglichen. Dies wird verwendet für die Betreuung von Modulen außerhalb des Linux-Quellcode-Baums. Auch ist es damit sehr einfach, im Zuge der Hochrüstung des Kernels Module neu zu bauen.

Der Hardware-Treiber ist Code, der auf dem Zielsystem läuft. Die meisten Hardware-Treiber sind heutzutage als freie Software verfügbar und in den normalen Debian-Kernel-Paketen im main-Bereich des Debian-Archivs enthalten.

  • GPU-Treiber

    • Intel GPU-Treiber (main)

    • AMD/ATI GPU-Treiber (main)

    • NVIDIA GPU-Treiber (main für den nouveau-Treiber, non-free für Treiber, die vom Hersteller als Nur-Binär-Variante bereitgestellt werden)

  • Softmodem-Treiber

    • martian-modem- und sl-modem-dkms-Pakete (non-free)

Die Firmware ist Code, der auf das Gerät geladen wird (z.B. CPU-Mikrocode, Rendering-Code, der auf der GPU läuft, oder FPGA-/CPLD-Daten …). Einige Firmware-Pakete gibt es als freie Software, aber viele davon werden nicht als freie Software bereitgestellt, da sie Binärdaten ohne den zugehörigen Quelltext enthalten.

  • firmware-linux-free (main)

  • firmware-linux-nonfree (non-free)

  • firmware-linux-* (non-free)

  • *-firmware (non-free)

  • intel-microcode (non-free)

  • amd64-microcode (non-free)

Bitte beachten Sie, dass Pakete aus non-free und contrib nicht Teil des Debian-Systems sind. Die Konfiguration, um den Zugriff auf die Bereiche non-free und contrib zu aktivieren oder zu deaktivieren, ist in Abschnitt 2.1.4, „Grundlagen über das Debian-Archiv“ beschrieben. Sie sollten sich etwaiger negativer Auswirkungen bei der Verwendung von Paketen aus non-free und contrib bewußt sein; lesen Sie hierzu auch Abschnitt 2.1.5, „Debian ist zu 100% freie Software“.

Die Verwendung eines virtualisierten Systems ermöglicht es uns, mehrere Instanzen eines Systems gleichzeitig auf einer einzigen Hardware laufen zu lassen.

Neben dem einfachen chroot gibt es in Debian eine Vielzahl von Paketen in Debian betreffend System-Virtualisierung und Emulation.

Tabelle 9.26. Liste von Virtualisierungswerkzeugen

Paket Popcon Größe Beschreibung
schroot V:8, I:12 2576 spezialisiertes Werkzeug, um Debian-Binärpakete in chroot-Umgebungen auszuführen
sbuild V:0, I:2 471 Werkzeug, um Debian-Binärpakete aus Debian-Quellen zu bauen
pbuilder V:3, I:21 998 persönlicher Paketersteller für Debian-Pakete
debootstrap V:9, I:76 229 Programm zum Bootstrap eines grundlegenden Debian-Systems (geschrieben in sh)
cdebootstrap V:0, I:6 87 Programm zum Bootstrap eines Debian-Systems (geschrieben in C)
rootstrap V:0, I:1 97 Werkzeug zur Erstellung von vollständigen Linux-Dateisystem-Images
virt-manager V:6, I:26 7236 Virtual Machine Manager: Arbeitsplatz-Anwendung zur Verwaltung von virtuellen Maschinen
libvirt-bin V:22, I:48 73 Programme für die libvirt-Bibliothek
user-mode-linux V:0, I:1 31164 User-mode Linux (Kernel)
bochs V:0, I:1 3953 Bochs: IA-32 PC-Emulator
qemu I:54 398 QEMU: schneller generischer Prozessor-Emulator
qemu-system V:16, I:56 53 QEMU: Binärdateien zur Emulation eines vollständigen Systems
qemu-user V:3, I:55 47919 QEMU: Binärdateien für User-Mode-Emulation
qemu-utils V:7, I:90 2641 QEMU: Hilfsprogramme
qemu-kvm V:26, I:64 57 KVM: vollständige Virtualisierungslösung auf x86-Hardware mit hardware-unterstützter Virtualisierung
virtualbox V:57, I:70 58732 VirtualBox: x86-Virtualisierungslösung auf i386 und amd64
xen-tools V:0, I:9 620 Werkzeuge zur Verwaltung von virtuellen Debian-XEN-Servern
wine V:14, I:118 101 Wine: Windows-API-Implementierung (Standard-Programm-Suite)
dosbox V:3, I:21 2745 DOSBox: x86-Emulator mit Tandy-/Herc-/CGA-/EGA-/VGA-/SVGA-Grafik, Audioausgabe und DOS
dosemu V:1, I:6 4820 DOSEMU: der Linux-DOS-Emulator
vzctl V:4, I:7 1072 OpenVZ Server-Virtualisierungslösung - Steuerungs-Werkzeuge
vzquota V:4, I:7 210 OpenVZ Server-Virtualisierungslösung - Quota-Werkzeuge
lxc V:4, I:11 2597 Linux-Container verwenden Werkzeuge im User-Space-Bereich

Der Wikipedia-Artikel Comparison of platform virtual machines enthält detaillierte Gegenüberstellungen der verschiedenen Plattform-Virtualisierungslösungen.

[Anmerkung] Anmerkung

Einige der hier beschriebenen Funktionalitäten sind nur in Squeeze oder späteren Veröffentlichungen verfügbar.

[Anmerkung] Anmerkung

Standard-Debian-Kernel unterstützen KVM seit Lenny.

Ein typischer Arbeitsablauf für eine Virtualisierung enthält folgende Schritte:

Wenn Sie eine rohe Image-Datei verwenden, finden Sie die nötigen Informationen in Abschnitt 9.6, „Das Festplatten-Abbild“.

Bei anderen Dateiformaten für virtuelle Festplatten-Images können Sie qemu-nbd(8) verwenden, um diese über das Network Block Device-Protokoll zu exportieren; dann können sie mittels dem nbd-Kernelmodul in das Dateisystem eingebunden werden (mount).

qemu-nbd(8) unterstützt Festplattenformate, die auch von QEMU unterstützt werden. QEMU wiederum unterstützt folgende Formate: roh (raw), qcow2, qcow, vmdk, vdi, bochs, cow (User-Mode-Linux Copy-on-Write), parallels, dmg, cloop, vpc, vvfat (virtuelles VFAT) und host_device.

Das Network Block Device unterstützt Partitionen auf die gleiche Art wie das loop device (Näheres hierzu in Abschnitt 9.6.3, „Einbinden der Festplatten-Abbild-Datei“). Sie können die erste Partition von "disk.img" wie folgt einbinden:

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Tipp] Tipp

Eventuell möchten Sie lediglich die erste Partition von "disk.img" exportieren; geben Sie dazu für qemu-nbd(8) die Option "-P 1" an.

chroot(8) bietet die grundlegendsten Möglichkeiten, um verschiedene Instanzen einer GNU/Linux-Umgebung simultan und ohne Neustart auf dem gleichen System laufen zu lassen.

[Achtung] Achtung

Die hier angegebenen Beispiele gehen davon aus, dass sowohl das Elternsystem wie auch das chroot-System die gleiche CPU-Architektur haben.

Sie können lernen, wie man chroot(8) einrichtet und verwendet, indem Sie das pbuilder(8)-Programm wie folgt in einer script(1)-Sitzung laufen lassen:

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

Sie sehen jetzt, wie debootstrap(8) oder cdebootstrap(1) Systemdaten für eine sid-Umgebung in "/sid-root" ablegt.

[Tipp] Tipp

Diese debootstrap(8)- oder cdebootstrap(1)-Befehle werden verwendet, um Debian mit dem Debian-Installer zu installieren. Sie können ebenfalls genutzt werden, um Debian auf einem System zu installieren, ohne dabei eine Debian-Installations-CD zu verwenden, sondern stattdessen den Installationsvorgang von einer anderen, bereits auf dem System laufenden GNU/Linux-Distribution zu starten.

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

Hier sehen Sie nun, wie eine System-Shell in einer sid-Umgebung erstellt wird:

  1. Lokale Konfiguration kopieren ("/etc/hosts", "/etc/hostname", "/etc/resolv.conf");

  2. "/proc"-Dateisystem einbinden;

  3. "/dev/pts"-Dateisystem einbinden;

  4. "/usr/sbin/policy-rc.d" erzeugen, was immer mit einem Rückgabewert von 101 beendet wird;

  5. Ausführen von "chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'".

[Anmerkung] Anmerkung

Einige Programme könnten unter chroot Zugriff auf mehr Dateien des Elternsystems erfordern, als pbuilder bereitstellt. Zum Beispiel könnte es nötig sein, "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp" usw. über bind-mount einzubinden oder zu kopieren.

[Anmerkung] Anmerkung

Die Datei "/usr/sbin/policy-rc.d" verhindert, dass Daemon-Programme automatisch auf dem Debian-System gestartet werden. Lesen Sie hierzu "/usr/share/doc/sysv-rc/README.policy-rc.d.gz".

[Tipp] Tipp

Der ursprüngliche Ansatz des spezialisierten chroot-Pakets pbuilder ist, ein chroot-System anzulegen und ein Paket innerhalb des chroot zu bauen. Es ist ein ideales System, um zu überprüfen, ob die Bauabhängigkeiten eines Pakets korrekt sind und sicherzustellen, dass in dem so erstellten Paket keine unnötigen oder falschen Bauabhängigkeiten existieren.

[Tipp] Tipp

Ähnlich dazu gibt Ihnen das schroot-Paket eine Idee davon, ein i386-chroot-System auf einem amd64-Elternsystem laufen zu lassen.

Ich empfehle Ihnen, QEMU oder VirtualBox auf einem Debian-Stable-System zu verwenden, um mittels Virtualisierung mehrere Arbeitsplatzumgebungen (Desktops) sicher auf einem System zu betreiben. So ist es möglich, Desktop-Anwendungen aus Debian Unstable und Testing ohne die üblichen damit verbundenen Risiken laufen zu lassen.

Da reines QEMU sehr langsam ist, wird empfohlen, es mit KVM zu beschleunigen, falls das Host-System dies unterstützt.

Ein Image einer virtuellen Festplatte "virtdisk.qcow2", das ein Debian-System für QEMU enthält, kann mittels debian-installer: Kleine CDs wie folgt erzeugt werden:

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

Weitere Tipps finden Sie unter Debian Wiki: QEMU.

VirtualBox enthält grafische, Qt-basierte Werkzeuge und ist ziemlich intuitiv. Seine Benutzeroberfläche und die Befehlszeilenwerkzeuge sind im VirtualBox User Manual (html) bzw. VirtualBox User Manual (PDF) beschrieben.

[Tipp] Tipp

Andere GNU/Linux-Distributionen wie Ubuntu und Fedora mittels Virtualisierung laufen zu lassen ist eine tolle Möglichkeit, Tipps zur Konfiguration zu bekommen. Auch andere proprietäre Betriebssysteme können über diese GNU/Linux-Virtualisierung bequem zum Laufen gebracht werden.