PDF-Version - Fakultät für Mathematik

Transcription

PDF-Version - Fakultät für Mathematik
ICT-Infrastruktur für Bildungsaufgaben
7. Datenverwaltung, Kernel, Sicherheit und Logging
Thomas Leitner <[email protected]>
Fakultät für Mathematik, Universität Wien
Sommersemester 2013
Letzte Änderung: 2013-09-20 20:46:17 +0200
Inhalt
Datenverwaltung (Dateisysteme verwalten, Loop Devices, Verschlüsselung, LVM, RAID, mdadm)
Kernel (Module, Befehle, System-Dateisysteme)
Sicherheit und Logging
Dateisysteme verwalten
Das Ein- und Aushängen von Dateisystemen mit Hilfe der Befehle mount und umount haben wir bereits im ersten Teil der Vorlesung
besprochen.
Dateisysteme, die automatisch beim Start eingehängt werden sollen, kann man in der Datei /etc/fstab (siehe man
fstab) definieren.
Jede nicht kommentierte Zeile besteht aus sechs Feldern und beschreibt, wie und wo ein Dateisystem mit welchen Optionen eingehängt werden
soll:
<Dateisystem>
<Mount-Point>
<Typ>
<Optionen>
/dev/mapper/data
/home
ext4
defaults,discard
/home
/srv/nfs/home
none
bind
<Dump>
0
<fsck-Durchgangsnummer>
1
Dateisystem erstellen - mkfs.*
Um ein neues Dateisystem zu erstellen, verwendet man die Familie der mkfs.* Befehle. Zum Beispiel kann man ein ext4-Dateisystem mit dem
Befehl mkfs.ext4 erstellen.
Die möglichen Optionen hängen von dem jeweiligen Dateisystem ab. Üblicherweise kann man zumindest eine UUID bzw. einen Namen
vergeben.
Dateisysteme erstellt man normalerweise auf einer Blockgerätedatei (z.B. einer Partition /dev/sda1 oder einem USB-Stick
da der Kernel nur solche speziellen Dateien für das Mounten verwenden kann.
/dev/sdd),
Dateien als Blockgeräte benutzen - losetup
Mit Hilfe eines sogenannten loop device ist es möglich, eine normale Datei als Blockgerätedatei zu betrachten. Damit kann man Dateisysteme,
die als Dateien vorliegen, mit Hilfe des Befehls mount einhängen (z.B. ISO-Dateien).
Der Befehl mount kann direkt normale Dateien einhängen, wenn man die Option -o
loop verwendet:
$ mount -o loop ubuntu-12.04.iso /mnt/cdrom
Zur generellen Verwaltung von loop devices wird der Befehle losetup benutzt, der diese speziellen Gerätedateien anlegen und löschen sowie
Informationen zu ihnen anzeigen kann.
Dateisysteme verschlüsseln
Um vor allem bei mobilen Geräten, wie Laptops oder Android-basierten Mobiltelefonen und Tablets, Daten zu schützen, ist es möglich,
verschlüsselte Dateisysteme zu erstellen. Ubuntu bietet diese Funktionalität direkt bei der Installation an.
Für die Verschlüsselung von Dateisystemen wird das Kernel-Modul dm-crypt und das Programm cryptsetup verwendet. Das Programm erlaubt
auch die Verwendung von LUKS (Linux Unified Key Setup, ein Standard für Festplattenverschlüsselung).
Das Kernel-Modul dm-crypt ist Teil der Device Mapper Infrastruktur des Kernels, die es erlaubt, ein Blockgerät auf ein anderes Blockgerät
abzubilden. Diese Infrastruktur wird nicht nur für die Verschlüsselung, sondern auch zum Beispiel für LVM (Logical Volume Manager) genutzt.
In der Datei /etc/crypttab kann man die Daten der verschlüsselten Dateisysteme eintragen, damit die entschlüsselten Dateisysteme
beim Starten des Systems zur Verfügung gestellt werden können. Dazu wird, falls nötig, das Passwort auf der (graphischen) Konsole abgefragt.
Dateisysteme verschlüsseln - Beispiel
Beispiel für die Erstellung eines verschlüsselten ext4-Dateisystems:
$ dd if=/dev/zero of=filesystem count=10000 2>/dev/null
$ cryptsetup luksFormat filesystem
WARNING!
========
This will overwrite data on filesystem irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
$ sudo cryptsetup luksOpen filesystem encfs
Enter passphrase for /tmp/filesystem:
$ mkfs.ext4 /dev/mapper/encfs &> /dev/null
Logical Volume Manager
Der Logical Volume Manager (LVM) erlaubt das Zusammenfassen von mehreren physischen Festplatten oder Partitionen (physical volumes, PV)
zu einem logischen Gesamten (volume group, VG), welches dann beliebig in logische Partitionen (logical volumes, LV) unterteilt werden kann.
Das hat mehrere Vorteile:
LVs können größer als ein PV sein.
Hinzufügen und Entfernen von PVs zu/von einer VG ist möglich.
LVs können im Nachhinein leicht vergrößert werden.
Es können Snapshots von LVs angelegt werden.
Ubuntu erlaubt bei der Installation die Benutzung von LVM, damit man sich z.B. nicht von Anfang an für bestimmte Partitionsgrößen entscheiden
muss.
LVM benutzt im Hintergrund die Device Mapper Infrastruktur des Kernels. Sobald man das Paket lvm2 installiert hat, kann man LVM verwenden.
Links: LVM2 Ressource Page, LVM HOWTO, A Beginner‘s Guide to LVM, LVM auf Wikipedia
Logical Volume Manager - PV
Physical Volumes (PV) bieten den eigentlichen Speicherplatz für LVM. PVs können Blockgeräte wie ganze Festplatten und einzelne Partitionen
sein oder aber auch Geräte, die wie Blockgeräte agieren (z.B. ein loop device).
Damit ein Blockgerät für LVM verwendet werden kann, muss es initialisiert werden. Dazu wird der Befehl pvcreate verwendet.
Der Befehl pvscan durchsucht alle Blockgeräte nach bereits initialisierten PVs und mit pvdisplay kann man sich Informationen über ein PV
anzeigen lassen.
Beispiel (erstellt 5 „Festplatten“ mit 10000KiB, initialisiert sie als PVs und zeigt die Informationen darüber an):
$
>
>
$
for I in loop{1..5}; do
dd if=/dev/zero of=$I count=20000; losetup /dev/$I $I; pvcreate /dev/$I
done &>/dev/null
pvdisplay # Ausgabe nicht dargestellt!
Logical Volume Manager - VG
Eine Volume Group (VG) fasst mehrere PVs zu einer großen Einheit zusammen, die als eine Festplatte betrachtet werden kann.
Beim Erstellen einer VG mittels des Befehls vgcreate kann auch die Größe eines pyhsical extent (PE) über die Option -s angeben. PEs sind
die kleinsten Einheiten einer PV, die von einer VG verwaltet werden.
VGs können im Nachhinein verändert werden, d.h. man kann später PVs hinzufügen (vgextend) oder entfernen (vgreduce; natürlich nur, wenn
sie nicht benutzt werden; dazu kann der Befehl pvmove benutzt werden, der PEs eines PVs auf andere PVs verschiebt).
Beispiel (erstellt die VG „bigdisk“ und zeigt Informationen für sie an; beachte, dass nur 40MiB benutzbar sind, obwohl alle PVs zusammen circa
48,8MiB zur Verfügung stellen):
$ vgcreate bigdisk /dev/loop{1..5}
Volume group "bigdisk" successfully created
$ vgdisplay bigdisk
# Ausgabe nicht dargestellt!
Logical Volume Manager - LV
Ein Logical Volume (LV) ist ein Teil einer VG und entspricht einer Partition, d.h. auf einem LV kann ein Dateisystem angelegt werden.
LVs werden mit dem Befehl lvcreate erstellt und beim Erstellen sollte man mittels der Option -n
Option -L Größe erlaubt das Festlegen der Größe der LV.
Name einen sinnvollen Namen angeben. Die
LVs können auch im Nachhinein verändert werden, d.h. man kann sie vergrößern (lvextend), aber auch verkleinern (lvreduce). Wichtig: Das zu
Grunde liegende Dateisystem muss auch dementsprechend vergrößert oder verkleinert werden!
Der Befehl lvresize kann beides (vergrößern und verkleinern) und auch gleichzeitig das zu Grunde liegende Dateisystem verändern.
Beispiel (erstellt zwei LVs und erzeugt ext4-Dateisysteme darauf):
$ lvcreate -n root -L 10M bigdisk
Rounding up size to full physical extent 12,00 MiB
Logical volume "root" created
$ lvcreate -n data -L 16M bigdisk
Logical volume "data" created
$ mkfs.ext4 /dev/bigdisk/root; mkfs.ext4 /dev/bigdisk/data
RAID
Bei einem RAID (Redundant Array of Independent Disks) werden zwei oder mehr Festplatten zu einem Verbund zusammengefasst, um den
Datendurchsatz und/oder die Ausfallssicherheit zu erhöhen.
Es gibt verschiedene RAID-Level, die wichtigsten sind:
RAID 0 (Striping): Die Daten werden auf zwei oder mehr Festplatten aufgeteilt.
RAID 1 (Mirroring): Die Daten werden gespiegelt auf zwei oder mehr Festplatten gespeichert (d.h. jede Festplatte im RAID 1-Verbund
enthält die gleichen Daten). Solange eine Festplatte funktioniert, sind die Daten sicher.
RAID 5: Die Daten und Prüfsummen werden auf drei oder mehr Festplatten aufgeteilt; der Ausfall einer Festplatte wird verkraftet.
Multiple Device Administration
Das Programm mdadm (Multiple Device Administration) ist ein Programm zum Verwalten von Software RAIDs.
Es erlaubt das Erstellen von RAID-Geräten in mehreren Konfigurationen (z.B. RAID 0, RAID 1 oder RAID 5) und das Verwalten dieser Geräte
(z.B. das Entfernen fehlerhafter Festplatten oder das Hinzufügen von (Reserve)Festplatten).
Beispiel (erstellt ein RAID 5 mit 3 Festplatten, fügt dann 2 Reserveplatten hinzu):
$ for I in loop{1..5}; do dd if=/dev/zero of=$I count=20000; losetup /dev/$I $I; done &>/dev/null
$ mdadm --create /dev/md0 --level raid5 --raid-devices=3 /dev/loop{1..3}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
$ mdadm /dev/md0 --add /dev/loop{4..5}
mdadm: added /dev/loop4
mdadm: added /dev/loop5
$ mdadm /dev/md0
/dev/md0: 19.00MiB raid5 3 devices, 2 spares. Use mdadm --detail for more detail.
Links: Linux RAID Wiki
Kombinieren von RAID und LVM
Es ist natürlich möglich, die Funktionalitäten von RAID via mdadm und LVM zu kombinieren:
1.
2.
3.
4.
Zusammenfassen mehrerer Festplatten zu einem RAID mittels mdadm
Das erstellte MD-Gerät /dev/mdX als PV initialisieren.
Eine VG auf dem PV anlegen.
In der VG ein oder mehrere LVs anlegen.
Kernel und Kernel-Module verwalten 1
Früher hat man oft den Linux-Kernel selbst kompiliert, um ihn auf die benutzte Hardware abzustimmen. Das richtige Konfigurieren und
Kompilieren eines Linux-Kernels ist aber nicht so einfach und es können leicht Fehler unterlaufen.
Heutzutage wird üblicherweise der Kernel verwendet, den die Distribution liefert. Dieser ist getestet, beinhaltet die wichtigsten Komponenten und
stellt alle sonstigen Komponenten als Kernel-Module zur Verfügung. Das ist dann ein sogenannter generischer Kernel, der nicht speziell auf die
persönliche Hardware zugeschnitten wurde und daher üblicherweise auch mehr Speicher belegt.
Kernel-Module erlauben es dem Kernel, im Nachhinein zusätzliche Funktionalitäten wie z.B. neue Treiber oder neue Dateisysteme zu
verwenden. Üblicherweise werden z.B. die Treiber für die Soundkarte oder die Netzwerkkarte als Kernel-Module zur Verfügung gestellt.
Kann der Kernel mit einem Gerät nicht umgehen/kommunizieren, so wird automatisch versucht, den richtigen Treiber (i.e. das richtige KernelModul) für das Gerät zu laden. Das funktioniert mittlerweile sehr gut, d.h. nur in Ausnahmefällen muss man das richtige Kernel-Modul händisch
laden.
Kernel und Kernel-Module verwalten 2
Wichtig: Alle Treiber, die der Kernel beim Booten benötigt, müssen entweder fix in den Kernel eingebunden oder in einer sogenannten Initial
Ramdisk (wird als Root-Dateisystem benutzt bis das echte Root-Dateisystem geladen werden kann) vorhanden sein.
Unter Ubuntu findet man den Standardkernel im Paket linux-image-generic und die zugehörigen Header-Dateien im Paket linux-headers-generic.
Der Kernel selbst und die zusätzlich benötigten Dateien (wie z.B. eine Initial Ramdisk) liegen im Verzeichnis /boot. Üblicherweise heißt die
Datei für den Kernel vmlinuz-RELEASE (wobei RELEASE die Kernel-Release ist). Die Module eines Kernels liegen im Verzeichnis
/lib/modules/RELEASE.
Befehle für Kernel und Kernel-Module - uname, dmesg
uname - Zeigt Systeminformationen an.
» Nützliche Optionen: -a → alle Informationen anzeigen, -r → Kernel-Release anzeigen.
» $ uname -a
Linux noweto 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ ls -l /lib/modules/`uname -r` | head -4
total 3348
lrwxrwxrwx 1 root root
39 Apr 17 20:49 build -> /usr/src/linux-headers-3.8.0-19-generic
drwxr-xr-x 2 root root
4096 Apr 26 13:36 initrd
drwxr-xr-x 11 root root
4096 Apr 26 15:33 kernel
dmesg - Zeigt den Kernel-Buffer an.
» Ist zum Beispiel nützlich um zu sehen, ob beim Laden oder Entfernen eines Kernel-Moduls ein Problem aufgetreten ist.
» $ dmesg | tail
[22573.871904]
[22574.380346]
[22574.853562]
[22574.853568]
-n 4
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
thinkpad_ec: thinkpad_ec_request_row: arg0 rejected: (0x01:0x00)->0x00
thinkpad_ec: initial ec test failed
Befehle für Kernel und Kernel-Module - lsmod, insmod
lsmod - Zeigt die Liste der geladenen Kernel-Module an.
» $ lsmod | head -5
Module
uvcvideo
Size
80847
Used by
0
videobuf2_vmalloc
videobuf2_memops
videobuf2_core
13056
13202
40513
1 uvcvideo
1 videobuf2_vmalloc
1 uvcvideo
insmod - Lädt ein Kernel-Modul.
» Beachtet keine Abhängigkeiten, sondern versucht einfach, das gegebene Kernel-Modul zu in den Kernel zu laden. Besser ist modprobe.
» Syntax: insmod Modulpfad [Optionen]
Befehle für Kernel und Kernel-Module - rmmod, modinfo
rmmod - Entfernt ein Kernel-Modul aus dem Kernel.
» Sehr einfaches Programm; besser ist modprobe.
» Syntax: rmmod Modulname
modinfo - Zeigt Informationen zu einem Kernel-Modul an.
» Syntax: modinfo Modulname
» $ modinfo snd
filename:
alias:
license:
description:
author:
license:
description:
author:
srcversion:
depends:
intree:
vermagic:
parm:
parm:
parm:
/lib/modules/3.8.0-19-generic/kernel/sound/core/snd.ko
char-major-116-*
GPL
Advanced Linux Sound Architecture driver for soundcards.
Jaroslav Kysela
GPL
Jack detection support for ALSA
Mark Brown
9F509706996CF7D19C73482
soundcore
Y
3.8.0-19-generic SMP mod_unload modversions
slots:Module names assigned to the slots. (array of charp)
major:Major # for sound driver. (int)
cards_limit:Count of auto-loadable soundcards. (int)
Befehle für Kernel und Kernel-Module - modprobe
modprobe - Lädt oder entfernt ein Kernel-Modul.
» Löst automatisch die Abhängigkeiten zwischen Kernel-Modulen auf (dazu wird eine von depmod generierte Datei verwendet), d.h. benötigte
Kernel-Module werden automatisch geladen bzw. nicht mehr gebrauchte automatisch entfernt.
» Es muss nicht der Pfad zu einem Modul angegeben werden, sondern nur der Modulname.
» Modul-Parameter können als Argumente übergeben werden. Es werden dabei aber auch die Konfigurationsdateien mit der Endung .conf im
Verzeichnis /etc/modprobe.d/ beachtet (siehe man modprobe.d)
» Optionen: -r → Entfernen eines Kernel-Moduls.
» Syntax: modprobe [-r] Modulname [Optionen]
» $ modprobe iwlwifi 11n_disable=2
Dynamic Kernel Module Support
Früher hat es immer das Problem gegeben, dass man Kernel-Module, die nicht mit dem Kernel selbst mitinstalliert wurden, selbst neu kompilieren
musste, sobald man einen neuen Kernel installierte.
Das Dynamic Kernel Module Support-System (DKMS) wurde aus diesem Grund 2003 bei Dell entwickelt. Es erlaubt unter anderem das
automatische Kompilieren von Kernel-Modulen nach Installation eines neuen Kernels bzw. bei Installation eines Kernel-Moduls.
Damit das DKMS funktionieren kann, braucht man natürlich die Header-Dateien des verwendeten Kernels sowie die benötigten Programme zur
Kompilation der Kernel-Module.
Unter Ubuntu wird das DKMS mit Hilfe des Pakets dkms installiert. Pakete, die Kernel-Module enthalten, die über DKMS verwaltet werden, haben
üblicherweise das Suffix ‚-dkms‘ im Paketnamen.
procfs
Das procfs (process filesystem) ist ein virtuelle Dateisystem, das auf vielen unixartigen Betriebssystemen eingesetzt wird und üblicherweise im
Verzeichnis /proc eingehängt ist.
Es dient zur Anzeige und zur Änderung von Prozess- und Systeminformationen. Da die Informationen im Dateisystem dargestellt werden,
können die Dateien darin mit den üblichen Befehlen bearbeitet werden (z.B. cat für das Anzeigen und echo zusammen mit der
Ausgabeumleitung für das Ändern).
In der Kernel-Dokumentation des procfs findet sich eine genaue Auflistung der vom Kernel zur Verfügung gestellten Dateien und Verzeichnissen.
Wir betrachten ein paar nützliche Teile davon.
procfs - Allgemeine Informationen
/proc/cpuinfo → Informationen zu den vorhandenen CPUs
/proc/devices, /proc/bus/input/devices, /proc/bus/pci/devices → Informationen zu vorhandenen Geräten
/proc/filesystems → Vom Kernel unterstützte Dateisysteme
/proc/loadavg → Informationen zur Systemauslastung
/proc/meminfo → Detailierte Speicherinformationen
/proc/mounts → Liste der aktuell eingehängten Dateisysteme
/proc/net/ → Verzeichnis mit Netzwerkinformationen
/proc/stat → Allgemeine Statistiken
/proc/uptime → Betriebszeit des Systems
/proc/version → Kernelversion
procfs - Prozessinformationen
Jedem Prozess ist über seine PID ein Verzeichnis unterhalb von /proc zugeordnet. Ein Prozess kann sich seine Informationen über den
symbolischen Link /proc/self holen.
Einige nützlichen Dateien und Verzeichnisse in einem Prozessinformationsverzeichnis:
cmdline → Kommandozeilenargumente
cwd → Symbolischer Link zum aktuellen Arbeitsverzeichnis
environ → Umgebungsvariablen
status → Prozessstatus
fd → Verzeichnis mit Informationen zu Dateideskriptoren
procfs - Systemparameter
Im Verzeichnis
/proc/sys werden alle Systemparameter aufgelistet. Sie können nicht nur angezeigt, sondern auch verändert werden.
Die Einstellungen können temporär durch direktes Schreiben in die Dateien geändert werden oder mittels des Programms sysctl.
In der Konfigurationsdatei /etc/sysctl.conf bzw. in *.conf-Dateien im Verzeichnis
Einstellungen permanent hinterlegen.
/etc/sysctl.d kann man die
Einige interessante Parameter:
vm/swappiness → Beeinflusst die Benutzung des Swap-Speichers (auf 0 gesetzt, wird er nicht mehr benutzt)
kernel/sysrq → (De)aktivieren des magic SysRq key (erlaubt Tastenkombinationen, die der Kernel direkt verarbeitet, z.B. Neustart
des Systems)
net/ipv4/tcp_syncookies → (De)aktivieren des SYN-Flood-Schutzes
Eine Dokumentation aller Parameter findet sich in der Kernel sysctl-Dokumentation.
sysfs
Das sysfs ist ein virtuelles Dateisystem von Linux, welches Kernel-interne Informationen zu Geräten und Treibern darstellt bzw. sie auch
verändern lässt. Es existiert seit der Kernelversion 2.5 und ist üblicherweise im Verzeichnis /sys eingehängt.
Durch die Einführung von sysfs wurden unter anderem Informationen, die früher verstreut im procfs zu finden waren, an einem Ort
zusammengefasst.
Einige interessante Verzeichnisse/Dateien:
devices/ → Informationen zu allen Geräten (z.B. devices/system/cpu/cpu0/ für Informationen zur ersten CPU)
modules/ → Informationen zu Kernel-Modulen (z.B. modules/MODUL_NAME/parameters/* für Informationen zu den
Parametern des Moduls MODUL_NAME)
power/ → Energiesteuerung
Sicherheit
Hardware physisch schützen (ev. Zutrittskontrolle, BIOS/UEFI mit Passwort sichern, etc.)
Benutzerauthentifikation über PAM zentral erledigen.
Passwort-Policy festlegen (z.B. mindestens acht Zeichen, davon eine Ziffer und ein Sonderzeichen; siehe auch z.B. Passwort-Policy des ZID).
Login von root über OpenSSH nur mit Schlüssel erlauben.
Die Dateien /etc/hosts.{allow,deny} für Host-basierte Zugriffskontrolle verwenden (siehe man hosts_access).
Eine Firewall mit iptables erstellen, die nur die benötigten Ports für Verbindungsanfragen von außen zulässt.
Für Netzwerkdienste wenn möglich SSL oder TLS verwenden.
Nur die unbedingt notwendigen Programme installieren (je mehr Programme, desto mehr Angriffsmöglichkeiten bietet man).
Dateien/Verzeichnisse mit den richtigen Zugriffsrechten versehen.
Auf mobilen Datenträgern verschlüsselte Dateisysteme verwenden oder einzelne Dateien verschlüsseln.
Gnu Privacy Guard
Der Gnu Privacy Guard (GnuPG or GPG) ist eine freie Implementierung des OpenPGP-Standard (RFC 4880). Er wird zum Verschlüsseln
und/oder Signieren von Daten verwendet.
GPG unterstützt sowohl symmetrische Verschlüsselungsverfahren (es wird ein Schlüssel sowohl zum Ver- als auch zum Entschlüsseln
verwendet) als auch asymmetrische Verfahren (sogenannte Public-Key-Verschlüsselungsverfahren).
Symmetrische Verfahren sind schneller beim Ver- und Entschlüsseln und eignen sich z.B. zum Verschlüsseln von persönlichen Daten, da man
nur selbst den Schlüssel (z.B. eine Passphrase) wissen muss (Beispiele: AES, Blowfish, DES).
Bei asymmetrischen Verfahren wird ein Schlüsselpaar bestehend aus einem privaten und einem öffentlichen Schlüssel erstellt (Beispiele: RSA,
ElGamal). Mit dem öffentlichen Schlüssel kann man Daten verschlüsseln, die nur durch den privaten Schlüssel wieder entschlüsselt werden
können.
Umgekehrt kann der private Schlüssel zum Signieren von Daten verwendet werden. Dabei wird ein Hashwert von den Daten erstellt, der mit
dem privaten Schlüssel verschlüsselt wird. Dann kann mit dem öffentlich Schlüssel der Hashwert zurückgewonnen und mit den Daten verglichen
werden.
Gnu Privacy Guard - öffentliche Schlüssel und Identität
Beim Erstellen eines Private/Public-Schlüsselpaares wird man nach mehreren Informationen wie z.B. Name und E-Mail-Adresse gefragt. Diese
Angaben dienen zur Identifikation der Person hinter dem Schlüssel und können auch später noch verändert werden.
Allerdings ist es so, dass man natürlich beliebige Daten eingeben kann und man sich für jemand anderen ausgeben könnte.
Lösungsmöglichkeiten:
Man überprüft den Hashwert des öffentlichen Schlüssels, den man z.B. aus dem Internet herunter geladen hat, mit dem Hashwert, den
man von der Person direkt (z.B. über ein Telefon) bekommen hat.
Man lässt seinen öffentlichen Schlüssel von einer vertrauenswürdigen Instanz signieren und wird Teil des sogenannten Web of Trust.
Erhält man einen öffentlichen Schlüssel, der von jemanden signiert worden ist, dem man vertraut, kann man davon ausgehen, dass der
Schlüssel in Ordnung ist.
Es gibt auch Schlüsselserver, auf die man öffentliche Schlüssel hochladen kann, damit sie dann von anderen Personen leichter gefunden werden
können.
Gnu Privacy Guard - Verwendung
Das Programm gpg ist das CLI-Programm für GPG. GPG ist auch in die meisten E-Mail-Programme integriert und es gibt eine Vielzahl an
graphischen Programmen.
Aufrufmöglichkeiten:
$
$
$
$
$
$
$
gpg
gpg
gpg
gpg
gpg
gpg
gpg
--gen-key
# Schlüsselpaar generieren
-a --export [email protected] > publickey
# exportieren eines öffentlichen Schlüssel
--import publickey # importieren eines öffentlichen Schlüssels
--search-keys Thomas Leitner
# Schlüsselserver nach öffentlichen Schlüssel durchsuchen
--send-keys Schlüssel-ID
# Öffentlichen Schlüssel auf Schlüsselserver hochladen
--list-keys
# Liste der Schlüssel anzeigen
--sign-key
# Schlüssel für Web of Trust signieren
Gnu Privacy Guard - Verwendung
Beispiel (ver- und entschlüsseln mit symmetrischen Schlüssel):
$ echo "test" | gpg -c > test.gpg # es wird nach einer Passphrase gefragt
$ gpg -d test.gpg
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
test
gpg: WARNING: message was not integrity protecte
Beispiel (ver- und entschlüsseln mit asymmetrischen Schlüssel):
$ echo "test" | gpg -e -r "Thomas Leitner" > test.gpg
$ gpg -d test.gpg
You need a passphrase to unlock the secret key for
user: "Thomas Leitner "
2048-bit ELG-E key, ID DDA18EFF, created 2008-03-22 (main key ID B2D0A854)
gpg: encrypted with 2048-bit ELG-E key, ID DDA18EFF, created 2008-03-22
"Thomas Leitner "
test
Logging
Unter Linux können alle Programme auf eine zentrale Logging-Infrastruktur zugreifen, die eine standardisierte Ausgabe an einer zentralen Stelle
(üblicherweise /var/log) erlaubt.
Dabei hat man (wie üblich) die Wahl zwischen mehreren Logging-Dämonen, z.B. rsyslogd (Standard in Ubuntu) und syslog-ng. Die LoggingDämonen unterscheiden sich geringfügig in der Funktionalität, sind aber standardmäßig so konfiguriert, dass die Log-Dateien unter den gleichen,
üblichen Pfaden abgelegt werden.
Wichtig Log-Dateien:
/var/log/syslog → Alle Informationen
/var/log/auth.log → Authentifizierungsnachrichten (z.B. erfolglose/-reiche Logins)
/var/log/kern.log → Kernel-Nachrichten
Daneben erstellen Programme auch selbst Log-Dateien in /var/log/, z.B. der Apache HTTP Server im Unterverzeichnis
Copyright und Lizenz
Copyright: Thomas Leitner [email protected]
Lizenz: Creative Commons CC BY-NC-SA
„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ http://creativecommons.org/licenses/by-nc-sa/3.0/at/
apache2.