24.02.2014 Aufrufe

ADMIN Magazin Gestapelt - Schneller und sicherer mit RAID (Vorschau)

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

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

NEU!<br />

Jetzt <strong>mit</strong><br />

Whenjobs: Die moderne<br />

Alternative zu Cronjobs<br />

<strong>ADMIN</strong><br />

Netzwerk & Security<br />

Oracle: Datenbank auf<br />

Unicode migrieren<br />

06 2012<br />

Nov. – Dez.<br />

Auf Heft-CD:<br />

PartedMagic<br />

Infos auf Seite 6<br />

GESTAPELT<br />

<strong>Schneller</strong> <strong>und</strong> <strong>sicherer</strong> <strong>mit</strong> <strong>RAID</strong><br />

Storage in <strong>RAID</strong> konvertieren<br />

NAS-Systeme im Vergleich<br />

<strong>RAID</strong>-Level erklärt<br />

Open Stack<br />

Offene API zum<br />

Management<br />

von Clouds<br />

Hyper-V<br />

Live-Migration <strong>und</strong><br />

Hochverfügbarkeit<br />

Fail2ban<br />

Angreifer aussperren<br />

Remote Desktop<br />

Mit HTML5 im Browser<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 06


CityCloud<br />

Die Cloud in Ihrer Stadt<br />

Hamburg<br />

Berlin<br />

Frankfurt<br />

Stuttgart<br />

München<br />

Willkommen in der CityCloud<br />

Nutzen Sie sichere <strong>und</strong> flexible Cloudlösungen<br />

<strong>und</strong> Managed Hosting direkt in Ihrer Stadt.<br />

Sie wissen immer, wo Ihre Daten <strong>und</strong> Anwendungen<br />

betrieben werden. Selbstverständlich<br />

nach den Anforderungen des deutschen <strong>und</strong><br />

europäischen Datenschutzes.<br />

Sprechen Sie uns an!<br />

Tel.: 0 30 / 420 200 24<br />

hostserver.de/citycloud<br />

Vorteile der CityCloud:<br />

Daten sicher in Ihrer Stadt<br />

ISO 9001 zertifiziertes<br />

Managed Hosting<br />

Umfassender Datenschutz<br />

24/7 Service <strong>und</strong> Support<br />

Managed Hosting<br />

zertifiziert nach<br />

ISO 9001 : 2008


Verstärkung<br />

Editorial<br />

Verstärkung<br />

Liebe Leserinnen <strong>und</strong> Leser,<br />

es ist mir eine besondere Freude, dieses Mal auch die Abonnenten des FreeX-<br />

<strong>Magazin</strong>s als neue <strong>ADMIN</strong>-Leser begrüßen zu dürfen. Viele alte Unix-Hasen dürften<br />

überrascht sein, schließlich war die FreeX beinahe 15 Jahre lang eine feste Größe<br />

auf dem deutschen Zeitschriftenmarkt, die sich f<strong>und</strong>iert <strong>mit</strong> Linux- <strong>und</strong> Unix-<br />

Systemen auseinandergesetzt hat.<br />

Informationen zu versorgen.<br />

Vor Kurzem haben sich die Herausgeber entschlossen, die Publikation des<br />

Heftes einzustellen <strong>und</strong> sind <strong>mit</strong> dem Angebot an den Verlag des <strong>ADMIN</strong>-<br />

<strong>Magazin</strong>s herangetreten, die FreeX-Leser weiter <strong>mit</strong> interessanten <strong>und</strong> nützlichen<br />

Das Ergebnis halten Sie in Händen: ein <strong>ADMIN</strong>-Heft, das um einen regelmäßigen<br />

FreeX-Teil erweitert wurde. Dort werden FreeX-Fans auf vertraute Autorennamen<br />

stoßen <strong>und</strong> klassische Themen der FreeX wiederfinden, die sich naturgemäß<br />

gelegentlich <strong>mit</strong> den <strong>ADMIN</strong>-Themen überschneiden, aber auch mal einen Ausflug<br />

in benachbarte Gefilde unternehmen, etwa in die Unix-, die BSD- oder die<br />

Programmiererwelt.<br />

In Zukunft werden wir den reichen F<strong>und</strong>us an FreeX-Artikeln noch erweitern <strong>und</strong> in<br />

das <strong>ADMIN</strong>-Online-Archiv aufnehmen. Dem kommenden <strong>ADMIN</strong>-<strong>Magazin</strong>, der Ausgabe<br />

01/​2013, legen wir den kompletten FreeX-Jahrgang 2012 digital als CD bei.<br />

Wir hoffen, diese Veränderung macht den <strong>ADMIN</strong> etwas bunter <strong>und</strong> trifft den<br />

Geschmack der <strong>ADMIN</strong>- <strong>und</strong> der FreeX-Leser gleichermaßen. Für Fragen, Lob <strong>und</strong><br />

Kritik ist die Redaktion unter der Adresse redaktion@admin-magazin.de erreichbar.<br />

Viel Spaß beim Lesen<br />

@ leserbriefe@admin-magazin.de<br />

www.facebook.com/adminmagazin www.twitter.com/admagz<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

3


Service<br />

Inhalt<br />

<strong>ADMIN</strong><br />

Netzwerk & Security<br />

06/2012<br />

In diesem Heft-Schwerpunkt:<br />

Theorie <strong>und</strong> Praxis performanter <strong>und</strong><br />

<strong>sicherer</strong> <strong>RAID</strong>-Speicher (ab S. 46)<br />

Sechs NAS-Speicher für<br />

56NAS-<strong>RAID</strong>s<br />

kleine Unternehmen <strong>mit</strong><br />

5 bis 50 TByte im Vergleich.<br />

Login<br />

7 Vorgelesen<br />

DTrace <strong>und</strong> Sicherheit für SQL-Server.<br />

10 Branchen-News<br />

Neues von Firmen <strong>und</strong> Projekten.<br />

18 Im Dickicht<br />

Wegweiser duch Crypto-Bibliotheken<br />

<strong>und</strong> -Services.<br />

20 Löschen reicht nicht<br />

Datenträger weitergeben: Was sagt das<br />

Gesetz dazu?<br />

26 OSMC<br />

Aktuelles vom System-Monitoring.<br />

Netzwerk<br />

28 Ersatzspieler<br />

Mehr Apache-Performance <strong>mit</strong> dem<br />

PHP-FPM-Modul.<br />

36 Die Shell für unterwegs<br />

Unterbrechungsfrei: SSH durch Mosh<br />

ergänzen.<br />

40 Klick in die Zukunft<br />

HTML5-Technologie<br />

bringt<br />

den Remote<br />

Desktop in den<br />

Browser.<br />

Service<br />

3 Editorial<br />

4 Inhalt<br />

6 Heft-CD<br />

130 Impressum <strong>und</strong> <strong>Vorschau</strong><br />

Schwerpunkt: <strong>RAID</strong>-Systeme<br />

46 Abgesichert<br />

So funktioniert die Technologie der<br />

<strong>RAID</strong>-Systeme im Detail.<br />

52 Fallschirm<br />

Das kleine Tool <strong>mit</strong><br />

dem Namen Raider<br />

wandelt konventionalle<br />

Partitionen in<br />

<strong>RAID</strong>-Systeme um.<br />

56 NAS-<strong>RAID</strong>s<br />

<strong>RAID</strong> im NAS: Wie unterscheiden sich<br />

sechs Systeme der größten Hersteller?<br />

4 Ausgabe 06-2012 Admin www.admin-magazin.de


72<br />

Selbstbedienung<br />

Die Gr<strong>und</strong>lagen des<br />

Cloud-Frameworks<br />

Open Stack verständlich erklärt.<br />

Inhalt<br />

Service<br />

Skripte<br />

So baut man den<br />

118Motorisierte<br />

Interpreter in seine<br />

Skripte ein.<br />

nach Plan<br />

Was Datenbanken über<br />

88Alles<br />

ihre Hintergedanken<br />

ausplaudern.<br />

Know-how<br />

64 Ausweg aus Babylon<br />

Wie die Unicode-Migration einer Oracle-<br />

DB gelingt.<br />

68 Dschungelcamp<br />

Alles neu: Lizenzfragen zu Windows Server<br />

2012 geklärt.<br />

Security<br />

80 Sicher ist <strong>sicherer</strong><br />

Die erweiterte<br />

Windows Firewall<br />

schützt<br />

auf Basis von<br />

Ports <strong>und</strong> Programmen.<br />

Basics<br />

88 Alles nach Plan<br />

Datenbank-Ausführungspläne lesen <strong>und</strong><br />

verstehen.<br />

92 Neue Zeit-Rechnung<br />

Die einfachere Alternative zu Cron:<br />

Whenjobs.<br />

72 Selbstbedienung<br />

Open-Stack-Workshop, Teil 1: Einführung<br />

in Open Stack.<br />

86 Haus <strong>mit</strong> Hüter<br />

Fail2ban dreht <strong>mit</strong> der Firewall hartnäckigen<br />

Angreifern die Leitung ab.<br />

Virtualisierung<br />

94 Nachgewürzt<br />

Virtuelle KVM-Maschinen <strong>mit</strong>tels VNC<br />

<strong>und</strong> Spice bedienen.<br />

98 PHP-Virtualbox<br />

Virtualbox läuft auch auf dem Server.<br />

Zur Fernsteuerung gibt es zwei Pakete.<br />

102 Wandertag<br />

Livemigration <strong>und</strong> Hochverfügbarkeit<br />

<strong>mit</strong> Hyper-V 3.0.<br />

FreeX<br />

105 Aufmacherseite<br />

Artikel <strong>und</strong> Workshops der FreeX.<br />

106 Schichtweise<br />

Openlayers <strong>und</strong> Datenbanken.<br />

114 Zugangsschutz<br />

OpenVPN via Android-Smartphone<br />

nutzen.<br />

118 Motorisierte Skripte<br />

Interpreter in Skripte verpacken.<br />

Programmieren<br />

122 Julia<br />

Eine neue<br />

Sprache für<br />

Parallelverarbeitung<br />

<strong>und</strong> Technical<br />

Computing.<br />

128 Abhörsicher<br />

Das Python-Modul Paramiko versieht<br />

eigene Skripts <strong>mit</strong> SSH- <strong>und</strong> SFTP-<br />

Fähigkeiten.<br />

Mehr Infos auf Seite 6<br />

Parted Magic<br />

n Partitionen anlegen, verändern <strong>und</strong> sichern<br />

n Unterstützt Windows- <strong>und</strong> Linux-Partitionen sowie<br />

Logical Volumes <strong>mit</strong> LVM2<br />

www.admin-magazin.de Admin Ausgabe 06-2012 5


SErvice<br />

Heft-CD<br />

Heft-CD<br />

Auf dem beiliegenden Datenträger finden Sie die neueste<br />

Version 2012_10_10 von Parted Magic [1], einer Live-CD für<br />

den Umgang <strong>mit</strong> Festplatten-Partitionen.<br />

◗ Live-CD für 32 <strong>und</strong> 64 Bit.<br />

◗ Partitionen anlegen, vergrößern <strong>und</strong> verkleinern.<br />

◗ Support für Linux- <strong>und</strong> Windows-Dateisysteme inklusive<br />

NTFS.<br />

◗ Neueste Version beherrscht Logical Volumes <strong>mit</strong> LVM2.<br />

◗ Backup von Partitionen übers Netz <strong>mit</strong> eingebautem<br />

Clonezilla [2].<br />

Legen Sie einfach die CD in das Laufwerk ein, <strong>und</strong> starten<br />

Sie den Rechner. Möglicherweise müssen Sie noch im<br />

BIOS die richtige Boot-Reihenfolge einstellen, da<strong>mit</strong> 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] Parted Magic: [http://partedmagic.com]<br />

[2] Clonezilla: [http://clonezilla.org]<br />

6 Ausgabe 06-2012<br />

Admin www.admin-magazin.de


Bücher<br />

Login<br />

Bücher über DTrace <strong>und</strong> SQL-Server-Sicherheit<br />

Vorgelesen<br />

DTrace gibt es nur für Anwender von Solaris, Mac OS X oder FreeBSD.<br />

Microsoft-Administratoren hilft ein Ratgeber, SQL-Server abzusichern.<br />

Oliver Frommel, Jens-Christoph Brendel<br />

Im Streit zwischen Linux <strong>und</strong> Solaris<br />

führt die zweite Fraktion gerne als Alleinstellungsmerkmal<br />

das DTrace-Tool<br />

ins Feld, das die Performance-Analyse<br />

an Produktivsystemen erlaubt, ohne den<br />

Betrieb zu stören. Dazu gibt es ein umfassendes<br />

Werk von den Performance-<br />

Spezialisten Brendan Gregg (früher Sun,<br />

jetzt Joyent) <strong>und</strong> Jim Mauro, dem Autor<br />

der „Solaris Internals“.<br />

Nach etwa zehn Seiten Überblick über<br />

den Aufbau von DTrace <strong>und</strong> das Zusammenspiel<br />

<strong>mit</strong> Kernel <strong>und</strong> Bibliotheken<br />

folgt eine kurze Einführung in die D<br />

Language (nicht zu verwechseln <strong>mit</strong> der<br />

gleichnamigen Programmiersprache),<br />

<strong>mit</strong> der sich eigene Probes schreiben lassen.<br />

Die nächsten Kapitel nehmen eine<br />

ganzheitliche Perspektive auf das System<br />

ein <strong>und</strong> erklären, wo potenzielle Performance-Engpässe<br />

lauern.<br />

Den klassischen Bottlenecks Disk I/​O <strong>und</strong><br />

Dateisystemen sind jeweils eigene große<br />

Kapitel gewidmet. Ebenso der Netzwerkperformance,<br />

bei der sich ein eigenes<br />

Kapitel <strong>mit</strong> der Low-Level-Perspektive beschäftig<br />

<strong>und</strong> ein weiteres um die Awendungs-Protokolle<br />

wie NFS, HTTP, iSCSI<br />

<strong>und</strong> Fibre Channel kümmert.<br />

Hier macht das Buch jedoch nicht halt,<br />

sondern gibt noch einen Einblick in das<br />

DTrace-Profiling eigener Programme in<br />

zehn Sprachen von C bis Javascript. Für<br />

Administratoren interessanter dürfte der<br />

Teil sein, der sich <strong>mit</strong> Performance-Tracing<br />

von Datenbanken (MySQL, PostgreSQL<br />

<strong>und</strong> Oracle) beschäftigt. Lobenswert ist,<br />

dass sich ein eigenes Kapitel sogar noch<br />

um den Komplex „DTrace <strong>und</strong> Security“<br />

kümmert, wobei auch auf den potenziellen<br />

Missbrauch hingewiesen wird.<br />

Mit über 1100 Seiten ist das Buch die definitive<br />

Referenz für alle DTrace-Anwender<br />

<strong>und</strong> solche, die es werden wollen. Dabei<br />

gehen die Autoren nicht nur mechanisch<br />

alle DTrace-Funktionen durch, sondern<br />

versuchen beispielhaft, echten Problemen<br />

auf den Gr<strong>und</strong> zu gehen. Sinnvoll<br />

ist das Buch vor allem für ambitionierte<br />

Administratoren von (Open) Solaris.<br />

Auch FreeBSD- <strong>und</strong> Mac-OS-X-User können<br />

davon profitieren, aber im Detail sind<br />

viele Beispiele Solaris-spezifisch.<br />

SQL-Server sichern<br />

Wie sichert man einen MS-SQL-Datenbankserver?<br />

Denny Cherry, ausgewiesener<br />

MS-SQL-Experte <strong>und</strong> Autor von „Securing<br />

SQL Server“ fasst die Frage sehr<br />

umfassend auf <strong>und</strong> nähert sich ihr von<br />

außen nach innen, beginnend <strong>mit</strong> der<br />

Netzwerksicherheit (Firewalls, physische<br />

Sicherheit, Social Engineering). Die folgenden<br />

Kapitel verengen den Kreis Schritt<br />

um Schritt. Das zweite Kapitel wendet<br />

sich der Verschlüsselung von Datenbanken<br />

zu, es folgt ein Abschnitt über Passwortsicherheit<br />

(inklusive Rollenmodell<br />

<strong>und</strong> Maßnahmen, um bestimmte Policies<br />

in einer Domain durchzusetzen). Auch<br />

Kapitel vier bleibt noch bei Authentifizierung<br />

<strong>und</strong> Autorisierung, hier geht es aber<br />

auch um Endpunktsicherheit oder Stored<br />

Procedures als Sicherheitsmaßnahme.<br />

Kapitel 5 bezieht Applikationen ein, die<br />

den MS-SQL-Server nutzen.<br />

Die nächsten Kapitel untersuchen<br />

datenbank interne Services, die häufig<br />

auch Angriffsvektoren sind: Die Analysis<br />

Services als Datenbank-Engine für Online<br />

Analysis Processing (OLAP) werden in<br />

Kapitel 6 betrachtet, <strong>und</strong> Kapitel 7 nimmt<br />

sich der Reporting Services an.<br />

Das darauffolgende Kapitel beschreibt<br />

eingehend die SQL Injection Attacks.<br />

Ihnen lässt sich durch Validieren der Benutzereingaben<br />

<strong>und</strong> Parametrisieren der<br />

SQL-Queries relativ leicht vorbeugen.<br />

Das Kapitel demonstriert an zahlreichen<br />

Beispielen, wie er zu erreichen ist.<br />

Um sichere Datenbank-Backups geht es<br />

in Kapitel 9, die darauf folgenden Seiten<br />

behandeln die SAN-Security. Dieses<br />

Thema ist verwandt <strong>mit</strong> der Netzwerksicherheit<br />

aus Kapitel 1, die Reihenfolge,<br />

in der die einzelnen Aspekte aufgegriffen<br />

werden, folgt also nicht immer stringent<br />

dem Konzept der konzentrischen Ringe.<br />

An das Thema Sicherheits-Audits schließen<br />

sich schließlich zwei Kapitel über<br />

das Rechtekonzept der Datenbank an.<br />

Das Buch ver<strong>mit</strong>telt einen gründlichen<br />

<strong>und</strong> f<strong>und</strong>ierten Einblick in die Datenbanksicherheit<br />

für den MS SQL Server.<br />

Es ist in leicht verständlichem Englisch<br />

verfasst <strong>und</strong> bedient sich vieler anschaulicher<br />

Beispiele. (ofr)<br />

n<br />

DTrace<br />

Brendan Gregg, Jim Mauro<br />

DTrace – Dynamic Tracing in Oracle<br />

Solaris, Mac OS X and FreeBSD<br />

1115 Seiten<br />

Prentice Hall<br />

36,95 Euro<br />

ISBN: 978-0132091510<br />

SQL-Server<br />

Denny Cherry<br />

Securing SQL Server<br />

2. Auflage<br />

381 Seiten<br />

Syngress Verlag<br />

39 Euro<br />

ISBN: 978-1597496254<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

7


1&1 CLOUD SERVER<br />

DAS DEDICATED-GEFÜHL – MIT MAXIMALER FLEXIBILITÄT.<br />

Ihre Anforderungen ändern sich immer wieder, manchmal auch unvorhergesehen? Dann sollten<br />

Sie sich für einen Dynamic Cloud Server von 1&1 entscheiden. Denn bei 1&1 sind Sie immer<br />

auf der sicheren Seite: Mit über 11 Mio. K<strong>und</strong>enverträgen, 2 Milliarden € Jahresumsatz,<br />

5.000 Mitarbeitern <strong>und</strong> 5 Hochleistungs-Rechenzentren ist 1&1 einer der größten Webhoster<br />

weltweit. Und <strong>mit</strong> 20 Jahren Server-Erfahrung <strong>und</strong> 1.500 Developern sind wir auch in Zukunft<br />

Ihr zuverlässiger Partner. Darum nutzen Sie bei 1&1 viele Vorteile, die Ihnen so kein anderer<br />

Hoster bietet.<br />

VOLLER ROOT-ZUGRIFF<br />

Komfort <strong>und</strong> Funktionsumfang eines Root Servers, <strong>mit</strong> dedizierten Ressourcen.<br />

HÖCHSTE FLEXIBILITÄT<br />

■ CPU, RAM <strong>und</strong> Festplattenspeicher unabhängig voneinander zubuchbar.<br />

Aktion: Dauerhaft 50% günstiger – pro St<strong>und</strong>e <strong>und</strong> Einheit 0,005 € statt 0,01 €.<br />

■ Per Mausklick ausbaufähig bis hin zum eigenen Rechenzentrum <strong>mit</strong> maximal<br />

99 virtuellen Maschinen – ohne Migration!<br />

■ Absolute Kostentransparenz durch st<strong>und</strong>engenaue, leistungsbezogene Abrechnung.<br />

UNLIMITED TRAFFIC<br />

100 Mbit/s Bandbreite. Ohne Zusatzkosten, ohne Drosselung.<br />

PARALLELS ® PLESK PANEL 11<br />

■ neueste Version des besten Verwaltungstools für Ihren Server<br />

■ inklusive unli<strong>mit</strong>ed Domains<br />

AUSFALLSICHER<br />

Red<strong>und</strong>ant gespiegelte Speicher- <strong>und</strong> Recheneinheiten schützen<br />

Ihren Cloud-Server automatisch vor Ausfällen.<br />

DOMAINS | E-MAIL | WEBHOSTING | E-SHOPS | SERVER<br />

* 1&1 Dynamic Cloud Server dauerhaft 19,99 €/Monat statt bisher 39,99 €/Monat in der Basiskonfi guration. Performance Features dauerhaft für 0,005 €/St<strong>und</strong>e <strong>und</strong> Einheit statt bisher<br />

0,01€/St<strong>und</strong>e <strong>und</strong> Einheit zubuchbar. Einrichtungsgebühr von 39,– € entfällt. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.


DAUERHAFT<br />

50 % AUF IHRE<br />

GESAMTE KONFIGURATION<br />

1&1 DYNAMIC CLOUD SERVER<br />

Perfekt als Application-, Datenbank-, Hostingoder<br />

Game-Server – oder für alles zusammen.<br />

■ Basiskonfiguration: 1 CPU, 1 GB RAM,<br />

100 GB Festplatte<br />

■ Unli<strong>mit</strong>ed Traffic <strong>mit</strong> 100 Mbit/s Bandbreite<br />

■ Citrix Xen Server basierend auf AMD Multicore-<br />

Architektur (AMD Opteron 6272)<br />

■ Freie Wahl aus CentOS, Debian, Ubuntu,<br />

openSUSE oder Windows (optional)<br />

■ Nur bei 1&1: Optional SUSE<br />

Linux Enterprise Server<br />

■ Nur bei 1&1: Server-Management <strong>und</strong><br />

-Monitoring per Mobile App<br />

■ NEU! 1&1 Snapshot: Definieren Sie einfach<br />

einen Wiederherstellungszeitpunkt für Ihren Server.<br />

■ 24/7 Service <strong>und</strong> Support durch<br />

1&1 Server Expertenteam.<br />

■ Keine Einrichtungsgebühr<br />

nur 19,<br />

99 39,<br />

99<br />

€/Monat*<br />

0 26 02 / 96 91<br />

0800 / 100 668<br />

www.1<strong>und</strong>1.info


Login<br />

News<br />

+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />

Neue Software <strong>und</strong> Produkte<br />

Branchen-News<br />

Rechenzentren wachsen weiter<br />

Mit dem Datacenter Dynamics 2012 Global<br />

Census wurden jetzt erste Ergebnisse<br />

der weltweit größten quantitativen Erhebung<br />

der Daten-Center-Branche bekannt.<br />

Danach wuchsen die Investitionen in Rechenzentren<br />

weltweit um 22 Prozent seit<br />

2011, <strong>mit</strong> einem prognostizierten weiteren<br />

Anstieg von 14 Prozent im Jahr 2013.<br />

Den größten Anstieg (22,5 Prozent weltweit)<br />

verzeichneten Investitionen im<br />

Facility Management <strong>und</strong> in der Elektrotechnik,<br />

darunter in Bereiche wie<br />

Stromverteilung-<strong>und</strong> Schaltgeräte, unterbrechungsfreie<br />

Stromversorgungen,<br />

Generatoren, Kühlgeräte, Sicherheits-<br />

Ausrüstung, Brandbekämpfung <strong>und</strong><br />

Data Center Infrastructure Management<br />

(DCIM). Die eigentliche IT-Ausstattung<br />

(aktive Geräte wie Server, Storage, Switches<br />

<strong>und</strong> Router) zeigte ein langsameres<br />

Wachstum (16,7 Prozent), von 30 auf<br />

35 Milliarden Dollar. Der Aufstellraum<br />

für die Geräte in Rechenzentren (White<br />

Space) vergrößerte sich weltweit von 24<br />

auf 26 Millionen Quadratmeter, bis 2013<br />

wird ein Anstieg auf 31 Millionen Quadratmeter<br />

vorausgesagt.<br />

Trotz der schwierigen wirtschaftlichen<br />

Bedingungen in Europa hat der Rechenzentrums-Sektor<br />

hier weiterhin ein stetiges<br />

Wachstum der Investitionen verzeichnet.<br />

Die Ergebnisse des Datacenter Dynamics<br />

Census zeigen, dass europäische<br />

Investitionen von 2011 auf 2012 um 13,6<br />

Prozent gestiegen sind. Obwohl dieses<br />

Wachstum im Vergleich zu Regionen wie<br />

Asien-Pazifik <strong>und</strong> Lateinamerika bescheiden<br />

erscheint (jeweils 24,2 <strong>und</strong> 31,4 Prozent),<br />

ist es ähnlich groß wie auf dem<br />

anderen reifen Rechenzentrum-Markt in<br />

Nordamerika. Europa trägt so<strong>mit</strong> immer<br />

noch einen bedeutenden Anteil zu den<br />

weltweiten Gesamtinvestitionen in die<br />

Rechenzentrum-Industrie bei (105 Mrd.<br />

US-Dollar weltweit).<br />

Ärger bei Open Solaris<br />

Alasdair Lumsden hat in einer E-Mail an die Entwicklerliste<br />

von Open Indiana seinen Rücktritt als Projektleiter erklärt.<br />

Der Hauptgr<strong>und</strong> dafür sei Zeitmangel, jedoch nutzt er die<br />

Gelegenheit auch für eine Abrechnung <strong>mit</strong> Teilen der Open-<br />

Solaris-Community.<br />

Die <strong>mit</strong> dem Illumos-Kernel befassten Firmen wie Joyent, Nexenta<br />

<strong>und</strong> Delphix hätten sich nur um ihre eigenen spezialisierten<br />

Open-Solaris-Derivate gekümmert <strong>und</strong> dabei Community-<br />

Projekte vernachlässigt. Illumos entstand nach der Einstellung<br />

von Open Solaris durch Oracle als freies Projekt, das den<br />

Open-Solaris-Kernel unter einer freien Lizenz weiterentwicklt.<br />

Auf der Mailingliste hat sich aus der Ankündigung ein Thread<br />

entwickelt, in der die Protagonisten, darunter Illumos-Gründer<br />

Garrett D’Amore, den Nutzen einer allgemein verwendbaren<br />

Open-Solaris-Distribution diskutieren.<br />

Unter den Diskutanten ist auch Jörg Schilling, der bereits einige<br />

Tage zuvor angekündigt hatte, <strong>mit</strong> der neuesten Version 0.8<br />

des eigenen Open-Solaris-Derivats Schillix einen neuen Weg<br />

einzuschlagen. Dafür führt er ähnliche Gründe an wie Lumsden,<br />

nämlich die zunehmende Spezialisierung von Illumos als<br />

Storage-Kernel auf Open-Solaris-Basis.<br />

Unverzichtbar ist für Schilling <strong>und</strong> seine Mitstreiter auch die<br />

Unterstützung des SVr4-Paketsystems, wie er in einer Mail an<br />

die Open-Indiana-Liste noch einmal betonte. Schillix leidet<br />

allerdings derzeit noch, wie auch Open Indiana, an einem<br />

Mangel von Entwicklern. Unterstützung bei der Entwicklung<br />

eines „von Firmeninteressen freien“ Open-Solaris-Projekts sind<br />

deshalb willkommen.<br />

Vincent Untz sitzt Open Suse Board vor<br />

Das Linux-Unternehmen Suse hat den Open-Source-Entwickler<br />

Vincent Untz zum Vorsitzenden des Open Suse Board ernannt.<br />

Diese Entscheidung wurde auf dem Open Suse Sum<strong>mit</strong> in Orlando/USA<br />

verkündet.<br />

Der Suse-Angestellte ist durch seine Arbeit an der Desktop-<br />

Umgebung Gnome bekannt <strong>und</strong> hat als Vorsitzender der Gnome<br />

Fo<strong>und</strong>ation bereits Leitungserfahrung gesammelt. Nach seiner<br />

Arbeit am freien Desktop arbeitet er seit Juni 2012 für Suse an<br />

der Cloud-Computing-Architektur Open Stack.<br />

Ralf Flaxa, Suses VP Engineering, begründet die Entscheidung<br />

für Untz: „Wir haben jemanden gesucht, dem sowohl [das<br />

Unternehmen] Suse wie auch die Community Respekt <strong>und</strong> Vertrauen<br />

entgegenbringen.“ Vincent Untz folgt im Amt auf Alan<br />

Clark, der zurückgetreten<br />

war, um sich seinen anderen<br />

Aufgaben im Unternehmen zu<br />

widmen.<br />

Die Aufgabe des Open Suse<br />

Board ist es, als zentrale Kontaktstelle<br />

zum Projekt zu dienen,<br />

die Interessen der Community<br />

an den Sponsor Suse<br />

zu über<strong>mit</strong>teln, den Entscheidungsprozess<br />

zu unterstützen<br />

Vincent Untz, der neue Vorsitzende <strong>und</strong> bei Konflikten zu ver<strong>mit</strong>teln.<br />

Informationen über das<br />

des Open Suse Board, ist ein von<br />

vielen Open-Source-Konferenzen Gremium gibt es unter [http://​<br />

bekanntes Gesicht.<br />

​de.​opensuse.​org/​openSUSE:Rat].<br />

© Frédéric Crozat<br />

10 Ausgabe 06-2012 Admin www.admin-magazin.de


n immer auf http://www.admin-magazin.de ++++ neueste Nachrichten immer auf http://www.<br />

Neue kommerzielle Addons für MySQL<br />

Oracle hat im Rahmen seiner MySQL Connect-Konferenz während<br />

der Hausmesse Oracle OpenWorld in San Francisco zwei<br />

neue kommerzielle Erweiterungen angekündigt. Bei den Neuerungen<br />

handelt es sich zum einen um MySQL Enterprise<br />

Audit, eine sofort benutzbare Komponente für policy-basiertes<br />

Monitoring <strong>und</strong> Logging von ausgeführten Abfragen. Mit dieser<br />

Erweiterung soll MySQL auch in Anwendungsumgebungen <strong>mit</strong><br />

strengen Compliance-Regeln verwendbar sein. Der Anwender<br />

kann alle oder ausgewählte Aktivitäten, die auf Abfragen beruhen,<br />

beobachten <strong>und</strong> <strong>mit</strong>schreiben. Die Logs rotieren automatisch.<br />

Die zweite kostenpflichtige Neuerung ermöglicht ein automatisches<br />

Failover auf der Gr<strong>und</strong>lage einer synchronen Replikation,<br />

für die DRBD eingesetzt wird. Alternativ zu diesem HA-Feature<br />

kann MySQL nun außerdem unter Oracle Solaris Cluster betrieben<br />

werden. Der Cluster kann auch die Replikation überwachen<br />

<strong>und</strong> stellt einen internen Loadbalancer bereit.<br />

PostgreSQL 9.2 erschienen<br />

Mit nativem JSON-Support <strong>und</strong> vielen Verbesserungen, sei es<br />

bei der Replikation, Indizierung oder Performance ist jetzt das<br />

PostgreSQL-Release 9.2 erschienen, wie die PostgreSQL Global<br />

Development Group bekannt gibt.<br />

Die neue Version unterstützt jetzt bis zu 64 Cores <strong>und</strong> verbraucht<br />

dabei weniger CPU-Power. Die vertikale Skalierbarkeit<br />

verbessern Fortschritte im Lock Management, bei der Schreibeffizienz,<br />

dem Indexzugriff <strong>und</strong> bei Low-Level-Operationen im<br />

Umgang <strong>mit</strong> großen Workloads. Das bedeutet in Zahlen: bis<br />

zu 350 000 Read Queries pro Sek<strong>und</strong>e, zwei bis zwanzig Mal<br />

schnellere Index-Only-Scans für Data Warehouse-Abfragen, bis<br />

zu 14 000 Schreiboperationen pro Sek<strong>und</strong>e<br />

Eingeführt wurde die native Unterstützung für JSON, die es erlaubt,<br />

PostgreSQL ähnlich einer NoSQL-Datenbank zu verwenden.<br />

Neu kamen Datentypen für Bereiche (Range Types) hinzu,<br />

die sich für viele Anwendungen in der Datumsrechnung <strong>und</strong> bei<br />

wissenschaftlichen <strong>und</strong> finanziellen Berechnungen eignen.<br />

KDE gründet User Working Group<br />

Das KDE-Projekt hat eine User Working Group ins Leben gerufen,<br />

um die Kommunikation zwischen Anwendern <strong>und</strong> Entwicklern<br />

zu verbessern.<br />

Zu diesem Zweck halten die Organisatoren öffentlich Meetings<br />

per Internet ab, jüngst per Google Hangout. Die Mitschriften<br />

sind unter [http://​uwg.​kde.​org] nachzulesen. Daneben findet sich<br />

dort ein elektronischer Fragebogen, der sich ohne Registrierung<br />

in 5 Minuten ausfüllen lässt. Dort fragen die Macher nach der<br />

Akzeptanz von Mailinglisten, Bugtracker <strong>und</strong> Foren – den bisherigen<br />

Kommunikationsinstrumenten zwischen KDE-Entwicklern<br />

<strong>und</strong> ‐Anwendern.<br />

Außerdem plant die User Working Group, eine Anwendervertretung<br />

namens User Panel einzuführen. Interessierte könne ihre<br />

E-Mail-Adresse auf den Seiten der Arbeitsgruppe hinterlassen.<br />

NetBSD 6.0 erschienen<br />

Das NetBSD-Projekt hat die neue Version 6 freigegeben, die die<br />

Skalierbarkeit auf Multicore-Systemen verbessern soll, neue <strong>und</strong><br />

überarbeitete Treiber <strong>mit</strong>bringt <strong>und</strong> auch ganz neue Features<br />

wie einen neuen Paketfilter enthält.<br />

Zu den Higlights der neuen Version gehört eine bessere Unterstützung<br />

für symmetrisches Multiprozessing (SMP) auf<br />

PowerPC-Plattformen <strong>und</strong> für Xen domU-Kernel. Neu unterstützt<br />

werden die Freescale MPC85xx-Prozessoren <strong>und</strong> der ARM<br />

Cortex-A8-Prozessor. Zu den weiteren Neuerungen zählen ein<br />

BSD-lizenziertes NetPGP statt des GPL-lizenzierten GnuPG.<br />

Hinzugekommen ist auch ein Logical Volume Manager (LVM),<br />

der libdevmapper von Linux <strong>und</strong> die von Linux bekannten<br />

LVM-Werkzeuge verwendet. Neu geschrieben wurde der Kernel-<br />

Treiber. Ein neuer Paketfilter NPF soll nun schneller als sein<br />

Vorgänger sein. Die neue Version ist dem im März verstorbenen<br />

Entwickler Allen Briggs gewidmet.<br />

Freiburg: Rückkehr zu Microsoft Office?<br />

Die Stadt Freiburg wird seit Jahren zu den Kommunen gezählt,<br />

die Open Office anwenden. Ein offener Brief der Open Source<br />

Business Alliance [http://​www.​osb‐alliance.​com] vermutete im September<br />

Pläne, wieder Microsoft Office einzuführen.<br />

Gr<strong>und</strong>lage der neuen Ausrichtung sei laut OSB Alliance „ein<br />

extern angefertigtes, unter Verschluss gehaltenes Gutachten.“<br />

Daneben schreibt die Organisation, die sich für Open Source<br />

in Wirtschaft <strong>und</strong> Verwaltung einsetzt: „Die für die Umstellung<br />

benötigten Budgets sind – soweit uns bekannt – bereits genehmigt,<br />

<strong>und</strong> Mitarbeiter werden über die bevorstehende, erneute<br />

Umstellung informiert.“<br />

Das Schreiben kritisiert, dass die Verwaltung sich offenbar ohne<br />

Diskussion dem Gemeinderatsbeschluss von 2007 für das freie<br />

Office-Format ODF widersetzt. Der offene Brief endet <strong>mit</strong> zwei<br />

Fragen an die Kommune: warum das Gutachten nicht öffentlich<br />

gemacht werde, <strong>und</strong> wie eine Umstellung auf Microsoft Office<br />

zum Beschluss zugunsten des Open Document Formats passe.<br />

Neben Peter Ganten <strong>und</strong> Holger Dyroff aus dem Vorstand der<br />

Open Source Business Alliance haben den Brief zudem Matthias<br />

Kirschner von der Free Software Fo<strong>und</strong>ation Europe <strong>und</strong> Marco<br />

Schulze vom B<strong>und</strong>esverband Informations- <strong>und</strong> Kommunikationstechnologie<br />

unterzeichnet.<br />

Auf Anfrage des Linux-<strong>Magazin</strong>s erhlärte die Leiterin des Freiburger<br />

Pressereferats, das Gutachten „empfiehlt eine Rückkehr<br />

zu MS Office, allerdings nicht generell. Das Gutachten geht<br />

umfassend um die IT in der Stadtverwaltung, die Fragen nach<br />

Open Office ist dabei ein Aspekt von sehr vielen.“<br />

Wer das Gutachten erstellt hat, verrät die Stadt aber nicht.<br />

Es wurde intern im Mai präsentiert. Derzeit seien Ämter <strong>und</strong><br />

Dienststellen sowie die Personalvertretung zu Stellungnahmen<br />

aufgefordert. Im November entscheidet der Gemeinderat, dann<br />

sollen die Entschlussvorlagen zur Sache öffentlich im Online-<br />

Ratsinformationssystem unter [https://​freiburg.​more‐rubin1.​de] zu<br />

lesen sein.<br />

www.admin-magazin.de<br />

Ausgabe 06-2012<br />

11


Login<br />

News<br />

+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />

Webplatform.org dokumentiert Webtechnologien<br />

Zusammen <strong>mit</strong> Industriegrößen wie<br />

Adobe, Facebook, Google, Mozilla <strong>und</strong><br />

Microsoft hat das W3C die Alphaversion<br />

der Site [http://​www.​webplatform.​<br />

​org] veröffentlicht, die zur<br />

zentralen Informationsstelle<br />

für Webtechnologien werden<br />

soll.<br />

Die Seite ist derzeit <strong>mit</strong> einem<br />

Gr<strong>und</strong>stock an Informationen<br />

zu HTML 5, CSS, SVG, Canvas,<br />

Video <strong>und</strong> Audio im Web,<br />

Web GL <strong>und</strong> Indexed DB ausgestattet.<br />

Begleitet werden die<br />

Informationen von Blog, Forum,<br />

Tutorials <strong>und</strong> IRC-Chat.<br />

Nach den Vorstellungen der<br />

Initiatoren kann sich jedermann<br />

an der Informations-<br />

bündeln.<br />

sammlung beteiligen, weshalb die Website<br />

auch ein Wiki enthält. Die Inhalte<br />

stehen unter freien Lizenzen wie etwa<br />

Webplatform.org soll Dokumente über sämtliche Webtechnolgien an einem Ort<br />

Creative Commons (Attribution, Non<br />

Commercial, Share Alike 2.5). Die Seite<br />

ist derzeit in englischer Sprache, Lokalisierungen<br />

sind geplant.<br />

Das World Wide Web Consortium<br />

(W3C) betreut Webplatform.org<br />

im Auftrag der<br />

Mitglieder.<br />

Der WWW-Erfinder <strong>und</strong> W3C-<br />

Direktor Tim Berners-Lee sieht<br />

die Website als „ehrgeiziges<br />

Projekt, in dem alle, die sich<br />

für das Web engagieren, Wissen<br />

<strong>mit</strong>einander teilen <strong>und</strong> einander<br />

helfen können.“ Dazu<br />

hätten alle Beteiligten etwas<br />

beizutragen: Designer, Entwickler,<br />

Browser- <strong>und</strong> Tool-<br />

Hersteller.<br />

Solaris 11.1 ist da<br />

Oracle hat im Rahmen seiner Hausmesse OpenWorld in San<br />

Francisco eine neue Solaris-Version vorgestellt. Mehr als 300<br />

neue Features <strong>und</strong> Performanceverbesserungen sollen in das<br />

neue Release eingeflossen sein. Schwerpunkte waren dabei eine<br />

weiter verbesserte Unterstützung für Oracles Datenbank <strong>und</strong><br />

das Cloud Computing. Außerdem präsentiert sich Solaris als das<br />

Betriebssystem für Oracles SPARC-Server der T-Series: SPARC<br />

SuperCluster T4-4, Exadata Database Machine <strong>und</strong> Exalogic<br />

Elastic Cloud.<br />

Im Datenbankbereich hat sich nach Herstellerangaben die Latenz<br />

von Locks innerhalb des Real Application Clusters um<br />

17 Prozent verbessert, indem das Lock-Management in den<br />

Solaris-Kernel verlagert wurde. Die Göße der System Global<br />

Area (SGA) einer Oracle Datenbank soll sich nun ohne Reboot<br />

ändern lassen. Für Anwendungen im HPC-Bereich werden jetzt<br />

von der Datenbank bis zu 32 TByte RAM <strong>und</strong> Tausende CPUs<br />

unterstützt.<br />

Als Cloud-Betriebssystem lassen sich <strong>mit</strong> Solaris sowohl Infrastructure<br />

as a Service- (IaaS), Platform as a Service- (PaaS) als<br />

auch Software as a Service-Clouds (SaaS) auf vielen SPARC<strong>und</strong><br />

x86-Servern im Enterprise-Maßstab einrichten. Erstmals<br />

wird dabei das Federated File System (FedFS) supportet, das<br />

einen einheitlichen Namespace innerhalb einer großen Cloud<br />

erlaubt. Weiter verbessert wurden zudem die Features der Software<br />

Defined Networks (SDN), beispielsweise der New Data<br />

Center Bridging Support der Ethernet <strong>und</strong> Storage Networks<br />

kombiniert. Oracle Solaris Zone vervierfacht seine Performance<br />

im Vergleich <strong>mit</strong> der Vorgängerversion. Wie schon in der Vergangenheit<br />

garantiert auch Oracle 11.1 Binärkompatibilität <strong>mit</strong><br />

früheren Solaris-Versionen durch das Solaris Binary Application<br />

Guarantee Program. Ältere Solaris Applikationen lassen sich<br />

dabei in den Oracle Solaris Legacy Containern ausführen.<br />

Ceph: Finanzspritze von Shuttleworth<br />

Wie die Firma Inktank bekannt gibt, beteiligt sich der Ubuntu-<br />

Gründer Mark Shuttleworth <strong>mit</strong> einer Million US-Dollar am<br />

Unternehmen. Inktank wirkt maßgeblich an der Entwicklung<br />

des verteilten Dateisystems Ceph <strong>mit</strong> <strong>und</strong> bietet kommerziellen<br />

Support dafür an. Gegründet wurde Inktank von Sage Weil,<br />

der das Dateisystem im Rahmen seiner Doktorarbeit entwickelt<br />

hat.<br />

Ceph implementiert ein verteiltes Dateisystem <strong>mit</strong> Posix-Kompatibilität<br />

<strong>und</strong> steht in Konkurrenz zu dem etwa von Red Hat<br />

favorisierten GlusterFS. Auf Ceph lässt sich <strong>mit</strong> RADOS ein<br />

verteilter Blockspeicher realisieren, der zum Beispiel Striping,<br />

Snapshots <strong>und</strong> Replikation bietet. Das Ceph-Dateisystem bildet<br />

auch das Storage-Subsystem für das Cloud-Computing-Framework<br />

Open Stack in neueren Ubuntu-Versionen.<br />

Zentyal Business Server 3.0 ist fertig<br />

Wie die spanische Firma Zentyal <strong>mit</strong>teilt, ist ihr gleichnamiges<br />

Server-Produkt in Version 3.0 verfügbar. Neu ist beispielsweise<br />

Samba 4, wodurch der auf Linux basierende Server als vollwertiger<br />

Ersatz für Active Directory dienen kann. Die neueste<br />

Version bietet außerdem Single Sign-On <strong>mit</strong> Kerberos, sowie<br />

eine Reihe von Performance- <strong>und</strong> Usability-Verbesserungen.<br />

Module wie die eingebaute Firewall <strong>und</strong> der Support für die<br />

Zarafa-Groupware wurden überarbeitet. Zentyal 3.0 basiert auf<br />

Ubuntu Server 12.04 LTS. Zur Verwaltung des Servers bietet<br />

Zentyal eine webbasierte GUI. Zentyal gibt es als kostenlose<br />

Community-Version sowie in zwei Ausführungen als kostenpflichtiges<br />

Subskriptionsprodukt, für das der Hersteller Support<br />

leistet. Die Small Business Edition ist auf 25 Benutzer begrenzt,<br />

die Enterprise Edition funktioniert unbeschränkt.<br />

12 Ausgabe 06-2012 Admin www.admin-magazin.de


n immer auf http://www.admin-magazin.de<br />

Neuer ISO-Standard für Cybersecurity<br />

Das Joint Technical Com<strong>mit</strong>tee ISO/​IEC JTC 1, Information<br />

Technology, Subcom<strong>mit</strong>tee SC 27, IT Security Techniques der<br />

International Organization for Standardization (ISO) hat einen<br />

neuen Standard <strong>mit</strong> dem Titel „ Information technology – Security<br />

techniques – Guidelines for cybersecurity“ veröffentlicht.<br />

Der neue ISO-Standard beschreibt gr<strong>und</strong>legende Techniken<br />

der Cybersecurity, insbesondere zum Informationsaustausch<br />

<strong>und</strong> zur Zusammenarbeit bei der Bearbeitung von<br />

Vorfällen. Im Einzelnen geht es um: einen Überblick über<br />

Cybersecurity,Erläuterungen zu den Beziehungen zwischen<br />

Cybersecurity <strong>und</strong> anderen Feldern der IT-Sicherheit, Ausführungen<br />

zu den Beteiligten <strong>und</strong> ihren Rollen, einen Leitfaden zur<br />

Behandlung der wichtigsten Probleme auf diesem Gebiet, ein<br />

Framework für die Behandlung von Sicherheitsvorfällen.<br />

Johann Amsenga, Obmann der Standard-Arbeitsgruppe, meint:<br />

„Geräte <strong>und</strong> Netzwerke im Cyberspace haben verschiedene<br />

Eigentümer, jeder <strong>mit</strong> eigenen Geschäftsinteressen <strong>und</strong> Regelungen.<br />

Die verschiedenen Benutzer teilen sich nicht nur wenige<br />

oder keine Informationen, sie haben auch eine verschiedene<br />

Perspektive auf Sicherheitsfragen. Diese Zersplitterung birgt<br />

Sicherheitsrisiken im Cyberspace. ISO/​IEC 27032 bietet nun<br />

eine übergreifende, gemeinschaftliche <strong>und</strong> alle Interessenten<br />

einbeziehende Lösung zur Verminderung dieser Risiken.“<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 <strong>mit</strong> den Vorteilen von Voice over IP.<br />

Die Kommunikationslösung für Ihr<br />

Unternehmen<br />

Speicher für 100 Millionen Jahre<br />

Der Speicherspezialist Hitachi hat jetzt ein Medium aus Quarzglas<br />

vorgestellt, das Daten bis zu 100 Millionen Jahre sicher<br />

speichern können soll. Für eine gewöhnliche CD kann man eine<br />

Lebensdauer von höchstens einigen Jahrzehnten veranschlagen,<br />

<strong>und</strong> auch andere Medien – Festplatten, Magnetbänder <strong>und</strong><br />

so weiter – erreichen keine andere Größenordnung bei der Speicherdauer.<br />

Das jetzt von Hitachi vorgestellte millimeterdünne<br />

Quarzglas, in das unabhängig von elektromagnetischen Effekten<br />

mechanisch Punkte eines Binärcodes geschrieben werden,<br />

ist wasserfest, hitzebeständig <strong>und</strong> unempfindlich gegenüber<br />

vielen Chemikalien. Die Speicherdichte soll momentan der<br />

einer CD entsprechen, die Forscher glauben aber, dass sie sich<br />

<strong>mit</strong> zusätzlichen Lagen aus dem Glas deutlich erhöhen lässt. In<br />

Versuchen wurde das Material zwei St<strong>und</strong>en lang auf über 1000<br />

Grad erhitzt, ohne dass sich der Speicherinhalt änderte. Da<strong>mit</strong><br />

könnte es sich etwa als Alternative zu Mikrofilmen eignen.<br />

Am Massenmarkt werden sich die Quarz-Disketten allerdings<br />

aus Kostengründen kaum durchsetzen können. Ihr Nachteil ist<br />

zudem, dass sie nur einmal beschreibbar sind.<br />

Noch ist unklar, wann eine Serienfertigung aufgenommen wird<br />

– die Technologie soll aber bereits hinreichend ausgereift sein.<br />

„Die Menge an Daten, die täglich produziert wird, explodiert.<br />

Was die langfristige Aufbewahrung angeht, haben wir seit<br />

der Zeit der Steingravur nicht notwendigerweise dazugelernt.<br />

Die Gefahr von Datenverlust wächst sogar, durch wechselnde,<br />

manchmal inkompatible Technologien. Unsere Lösung garantiert<br />

lesbare Daten für eine sehr lange Zeit“, sagt Chef-Entwickler<br />

Kazuyoshi Torii.<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 />

Voicemailboxen<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 />

Admin<br />

Ausgabe 06-2012<br />

13


Login<br />

News<br />

+++ neueste Nachrichten immer auf http://www.admin-magazin.de +++++ neueste Nachrichte<br />

Open Office für Leipzig, Libre Office für München<br />

Münchens Limux-Projekt stellt erneut sein Office-Paket um,<br />

dieses Mal von Open auf Libre Office. Aus einem Erfahrungsaustausch<br />

<strong>mit</strong> Leipzig geht zudem hervor, dass dort eine Entscheidung<br />

zugunsten von Open Office gefallen sei. Innerhalb<br />

nur weniger Monate habe man dort mehr als 90 Prozent der<br />

Desktops auf Open Office migriert. Eine feste Größe im Jahr<br />

der Libre-Office-Anwender <strong>und</strong> ‐Entwickler soll das Libre-Of-<br />

Windows Server 2012 fertiggestellt<br />

Wie die Firma Microsoft bekannt gibt, ist der Windows Server<br />

2012 ab sofort vefügbar. Dem aktuellen Trend entsprechend<br />

positioniert Microsoft sein neues Produkt als Betriebssystem<br />

für die Cloud. Insbesondere Verwaltungs-Tools wie System<br />

Center wurden dazu mehr auf das Management virtualisierter<br />

Umgebungen zugeschnitten. Überarbeitet hat Microsoft auch<br />

die Virtualisierungsplattform Hyper-V, die nun in Version 3.0<br />

enthalten ist. Auch Active Directory wurde aktualisiert. Es lässt<br />

sich nun einfacher virtuell betreiben.<br />

Windows Server 2012 gibt es in vier Ausführungen: Essentials,<br />

Fo<strong>und</strong>ation, Standard <strong>und</strong> Datacenter. Essentials richtet sich<br />

an kleine <strong>und</strong> <strong>mit</strong>tlere Unternehmen <strong>mit</strong> maximal 25 Nutzern.<br />

Fo<strong>und</strong>ation enhält keine Virtualisierungsfunktionen <strong>und</strong> wird<br />

nur von OEMs (Original Equipment Manufacturer) vertrieben.<br />

Die Datacenter-Variante erlaubt im Gegensatz zu Windows Server<br />

2012 Standard nicht nur zwei, sondern beliebig viele virtuelle<br />

Instanzen von Windows Server 2012 auf einem Rechner <strong>mit</strong><br />

bis zu zwei Prozessoren. Eine Reihe von Videos auf der Website<br />

[http://​www.​windows‐server‐launch.​com/] geben eine Einführung in<br />

die neuen Features.<br />

Frankfurter Datenbanktage startklar<br />

Das Vortragsprogramm der Frankfurter Datenbanktage steht<br />

jetzt fest: R<strong>und</strong> 50 Datenbank-Experten referieren zu Themen<br />

wie Datenbankbetrieb, Monitoring, Troubleshooting, Migrationen<br />

oder Performance Tuning in Bezug auf Datenbanken wie<br />

Oracle, MS SQL Server, PostgreSQL, MySQL <strong>und</strong> NoSQL oder<br />

DB2.<br />

Die Frankfurter Datenbanktage finden im Frühjahr 2013 vom<br />

13. bis 15. März statt. Am ersten Tag gibt es einen optional<br />

auch einzeln buchbaren Trainingstag <strong>mit</strong> Hands on Workshops<br />

<strong>und</strong> Übungen. An den zwei folgenden Konferenztagen stellen<br />

namhafte Referenten Datenbankthemen aus der Welt von IBM,<br />

Oracle, Microsoft <strong>und</strong> Opensource-Datenbanken in fünf parallelen<br />

Vortragstracks <strong>und</strong> mehr als 50 intensiven Sessions zur<br />

Diskussion. Die auf 150 Personen begrenzte Teilnehmerzahl soll<br />

dafür sorgen, dass die Referenten auch nach den Sessions für<br />

Fragen greifbar sind. Eine weitere Gelegenheit für den Erfahrungsaustausch<br />

bietet eine Abendveranstaltung <strong>mit</strong> exklusivem<br />

Buffet, zu der alle Referenten <strong>und</strong> Teilnehmer herzlich eingeladen<br />

sind. Das Vortragsprogramm ist unter der Adresse [http://​<br />

​www.​frankfurter‐datenbanktage.​de] zu finden.<br />

fice-Hackfest werden, das die Document Fo<strong>und</strong>ation <strong>und</strong> das<br />

Libre-Office-Team Ende November in München veranstalten.<br />

Wie bereits im Vorfeld bekannt wurde, wird der Gastgeber<br />

Limux (Münchens Linux-Projekt) dabei <strong>mit</strong> gutem Beispiel<br />

vorangehen <strong>und</strong> dort offiziell den geplanten Umstieg auf Libre<br />

Office verkünden.<br />

Außerdem vermeldete das Limux-Blog, dass auch die Stadt<br />

Leipzig sich endgültig für den Umstieg auf Open Office entschieden<br />

<strong>und</strong> bereits <strong>mit</strong> der Migration begonnen habe. Seit den<br />

ersten Ankündigungen im Frühjahr 2012 habe die Stadtverwaltung<br />

der sächsischen 500 000-Einwohner-Stadt bereits auf 3900<br />

der 4200 PCs Open Office installiert <strong>und</strong> nutze es als Standard<br />

für Bürosoftware.<br />

Bei einem Besuch in der bayerischen Landeshauptstadt trafen<br />

sich im Oktober die Verantwortlichen der beiden Metropolen<br />

zum Erfahrungsaustausch. Kirsten Böge, Leiterin Kommunikation<br />

beim Projekt Limux, zitiert im Blog den IT-Koordinator<br />

der Stadt Leipzig, Hannes Kästner <strong>mit</strong> den Worten „Das ist das<br />

erste große Open-Source-Projekt in der Stadtverwaltung Leipzig.“<br />

Ziel sei es, die Abhängigkeit von proprietärer Software zu<br />

verringern.<br />

Univention Absolventenpreis 2013<br />

Das Bremer Linux-Unternehmen Univention eröffnet den Bewerbungszeitraum<br />

für seinen Absolventenpreis 2013, der Abschlussarbeiten<br />

zu Open-Source-Themen prämiert.<br />

Teilnehmen können Autoren von Diplom-, Master- <strong>und</strong> Bachelorarbeiten<br />

an Fachhochschulen oder Hochschulen, die innerhalb<br />

der Jahre 2011, 2012 oder Anfang 2013 beurteilt wurden.<br />

Der Preis ist interdisziplinär konzipiert, neben der Informatik<br />

können die Beiträge also auch aus anderen Fächern stammen,<br />

wenn sie praxisnah <strong>und</strong> innovativ Weise den Einsatz von<br />

Open-Source-Software untersuchen <strong>und</strong> verbessern. Die besten<br />

Arbeiten wählt eine unabhängige Expertenjury aus, der auch<br />

der Linux-<strong>Magazin</strong>-Chefredakteur Jan Kleinert angehört.<br />

Die drei Bestplatzierten erhalten 2000, 1000 <strong>und</strong> 500 Euro. Die<br />

Verleihung der Preise findet auf dem Linuxtag 2013 in Berlin<br />

statt. Interessenten können sich unter [http://​www.​absolventenpreis.​<br />

​de] informieren <strong>und</strong> ihre Bewerbung ab dem 15. Oktober 2012<br />

bis zum 17. Februar 2013 per E-Mail einreichen.<br />

Absolventenpreis: 2012 belegte Dominik Leibenger <strong>mit</strong> seiner Masterarbeit „Vertrauliche<br />

Versionsverwaltung <strong>mit</strong> Subversion“ den zweiten Platz.<br />

14 Ausgabe 06-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 />

Red Hats Umsatz gewachsen<br />

Das Linux-Unternehmen Red Hat hat Zahlen für das zweite<br />

Quartal des Geschäftsjahrs 2012/2013 vorgelegt, das für die USamerikanische<br />

Firma am 31. August 2012 endete.<br />

Mit einem Umsatz von 323 Millionen US-Dollar verzeichnet<br />

Red Hat ein Wachstum von 15 Prozent gegenüber dem Vorjahresquartal.<br />

Von dieser Summe entfallen 279 Millionen auf die<br />

Software-Subskriptionen, 17 Prozent mehr als im Vorjahr. Stärker<br />

noch stieg der operative Cashflow: Mit 104 Millionen waren<br />

es 35 Prozent mehr als im Vorjahresquartal. Der Nettogewinn<br />

betrug 35 Millionen US-Dollar <strong>und</strong> blieb da<strong>mit</strong> hinter den 56,5<br />

Millionen des Vorjahres zurück.<br />

CEO Jim Whitehurst sieht den Umsatzzuwachs durch die starke<br />

Nachfrage nach den Open-Source-Produkten seines Unternehmens<br />

bedingt. Sie böten den K<strong>und</strong>en Flexibilität, Innovation<br />

<strong>und</strong> Skalierbarkeit. Im September hatte das Wirtschaftsmagazin<br />

Forbes Red Hat in seiner Liste der innovativsten Unternehmen<br />

weltweit aufgeführt. Laut Red-Hat-Finanzchef Charlie Peters<br />

haben sich die Ausgaben des Unternehmens für die Entwicklung<br />

neuer Speicherprodukte <strong>und</strong> die Akquisition zweier Unternehmen<br />

erhöht.<br />

Landscape soll 40 000 Rechner verwalten<br />

Eine unabhängige Studie von Enterprise Management Associates<br />

stellt Canonicals Systemmanagement-Tool Landscape ein<br />

hervorragendes Zeugnis aus: Sie behautptet, die Software könne<br />

die Kosten einer IT-Abteilung unter bestimmten Umständen um<br />

zwei Drittel senken.<br />

Ein Return of Investment (ROI) von mehr als 1000 Prozent in<br />

fünf Jahren verspricht die Studie, wenn ein Unternehmen 1000<br />

Ubuntu-Clients einsetze <strong>und</strong> diese <strong>mit</strong>hilfe von Landscape verwalte.<br />

Das werde möglich, weil ein Admin <strong>mit</strong> Landscape problemlos<br />

große Zahlen von Rechner verwalten könne, schreibt<br />

Canonical in einer Presse<strong>mit</strong>teilung – konkret bis zu 40 000.<br />

Landscape automatisiere die üblichen Arbeitsschritte <strong>und</strong> reduziere<br />

die Komplexität beim Verwalten der Server.<br />

In der Meldung kündigt Canonical auch Updates für die Administrationsoberfläche<br />

an. Dank der neuen <strong>und</strong> verbesserten<br />

Funktionen erfülle man die Sicherheitsstandards von Kreditkarteninstituten<br />

<strong>und</strong> Regierungen (PCI DSS, HIPAA/​HITECH,<br />

SOX), die unter anderem Vorgaben für den Umgang <strong>mit</strong> Patches,<br />

Sicherheit <strong>und</strong> Benutzerzugriffe machen. Zentralisierte Werkzeuge<br />

würden dabei helfen, Updates für die Server einzuspielen<br />

<strong>und</strong> Compliance-Reports für alle Elemente der Infrastruktur zu<br />

erstellen.<br />

Zudem erlaube Landscape nun verbesserte rollenbasierte Zugriffe<br />

<strong>und</strong> biete ein vollständiges API an, was bedeutet, dass<br />

es sich in existierende Infrastrukturen integrieren lässt, etwa<br />

Puppet, Nagios oder Ticket-Systeme. Auch Admin-Skripte ließen<br />

sich über das API einfach anbinden. Zudem könne man <strong>mit</strong><br />

Landscape laut Canonical lokale Paketquellen aufsetzen <strong>und</strong><br />

verwalten sowie die für Ubuntu verfügbaren Systeme einbinden,<br />

etwa Metal-as-a-service (MaaS), das Rechner <strong>mit</strong> Betriebssystemen<br />

betankt. (jcb/​kki/​mfe/​ofr/​mhu)<br />

Neuer Security-Report von Microoft<br />

Im Rahmen der Sicherheitskonferenz RSA Conference Europe in<br />

London stellt Microsoft die dreizehnte Ausgabe des halbjährlichen<br />

Security Intelligence Report (SIRv13) vor.<br />

Aus den Analysen des aktuellen SIRv13 geht hervor, dass das<br />

Exploit Java/​Blacole <strong>mit</strong> einer Infektionsrate von 19,2 Prozent<br />

für Deutschland die größte Bedrohung sowohl für Unternehmen<br />

als auch für Endverbraucher darstellt. „Cyberkriminelle<br />

installieren den Blacole-Schadcode auf Webservern – besucht<br />

ein Internetnutzer dann die auf den Servern hinterlegten Internetseiten,<br />

besteht die Gefahr, sich während des Surfens unbemerkt<br />

zu infizieren, wenn keine geeigneten Sicherheitsupdates<br />

installiert sind“, erklärt Michael Kranawetter, Microsoft Chief<br />

Security Advisor, das heimtückische Vorgehen. Diese Methode<br />

der Malwareverbreitung ist allein im ersten Quartal 2012 bis Ende<br />

Juni 2012 von 26,5 Prozent auf 28,2 Prozent angestiegen.<br />

Microsoft erstellt den Security Intelligence Report zweimal im<br />

Jahr <strong>und</strong> informiert da<strong>mit</strong> über Veränderungen in der Sicherheitslandschaft.<br />

Zudem werden Benutzern Anleitungen zum<br />

Schutz ihrer Netzwerke zur Verfügung gestellt. Die vorliegende<br />

Ausgabe des Security Intelligence Report umfasst zwischen<br />

Januar <strong>und</strong> Juni 2012 generierte Daten <strong>und</strong> Analysen von mehr<br />

als 600 Millionen Systemen in über 100 Ländern weltweit.<br />

… alles nur eine Frage der Lastverteilung !<br />

BalanceNG ®<br />

●<br />

Der Software Load-Balancer für Linux <strong>und</strong> 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 06-2012<br />

15


Login<br />

Admin-Story<br />

© schiffner, Photocase<br />

Wegweiser duch Crypto-Bibliotheken <strong>und</strong> ‐Services<br />

Im Dickicht<br />

Der Einsatz von Crypto-Bibliotheken kann manchmal etwas umständlich<br />

sein. Dass hiervon gleich eine ganze Handvoll existieren, erleichert die<br />

Sache nicht unbedingt. Der folgende Artikel versucht, ein wenig Licht ins<br />

Dunkel zu bringen <strong>und</strong> erklärt den Einsatz der Network Security Services<br />

(NSS) <strong>und</strong> OpenSSL im Zusammenhang <strong>mit</strong> X.509-Zertifikaten. Thorsten Scherf<br />

Linux lässt einem bei nahezu allem die<br />

Wahl zwischen einer Vielzahl von Alternativen,<br />

warum sollte dies also bei<br />

Crypto-Frameworks anders sein? Auf<br />

proprietären Systemen hat man sich<br />

meistens auf ein bestimmtes Framework<br />

festgelegt (beispielsweise die CryptoAPI<br />

bei Microsoft Windows) <strong>und</strong> passt die<br />

Standard-Applikationen daraufhin an, bei<br />

Linux existieren neben den bekannten<br />

OpenSSL <strong>und</strong> den Network Security Services<br />

auch noch BeeCrypt, Cyrus SASL,<br />

libgcrypt, GnuTLS <strong>und</strong> diverse andere<br />

Implementierungen.<br />

Große Auswahl<br />

Dabei versuchen nahezu alle Frameworks<br />

das gleiche Problem zu lösen oder<br />

ähnliche Lösungen für bestimmte Anwendungsfälle<br />

anzubieten, also beispielsweise<br />

eine Implementierung für das TLS/​<br />

SSL-Protokoll, für S/​MIME, für Crypto-<br />

Algorithmen <strong>und</strong> Hash-Funktionen, Zufallszahlen-Generatoren<br />

<strong>und</strong> Ähnliches.<br />

Hier den Überblick zu behalten, ist nicht<br />

wirklich einfach. Zumal es dem Entwickler<br />

einer Anwendung natürlich freigestellt<br />

ist, welches Crypto-Framework<br />

er für seine Applikation verwendet. Ob<br />

die Auswahl des Frameworks auf dem<br />

System, auf dem die Anwendung einmal<br />

laufen wird, zu Problemen führt, ist nicht<br />

wirklich sichergestellt.<br />

Ein kleines Beispiel: Die Anwendung<br />

nutzt die Network Security Services <strong>und</strong><br />

erwartet Benutzerzertifikate in einem<br />

Berkley-DB basierten Zertifikatsspeicher.<br />

Der Benutzer hat sein X.509-Zertifikat<br />

aber als PEM-codierte Datei auf dem<br />

Dateisystem liegen <strong>und</strong> weiß nichts von<br />

einer Berkley-DB. Hier ist erst einmal etwas<br />

Handarbeit gefragt, bevor schließlich<br />

das Benutzerzertifikat als PKCS#12<br />

Datei in die Berkely-DB geschoben werden<br />

kann. Das Fedora-Projekt hat sich<br />

vor einiger Zeit zum Ziel gesetzt, diesen<br />

Wildwuchs etwas einzudämmen <strong>und</strong> ein<br />

Crypto-Framework gesucht, das einen<br />

breiten Funktionsumfang, hohe Portabilität<br />

<strong>und</strong> ein flexibles Lizenzierungsmodell<br />

bietet. Betrachtet man die Anforderungen,<br />

so kommen hierfür eigentlich<br />

nur OpenSSL <strong>und</strong> die Network Security<br />

Services (NSS) infrage.<br />

OpenSSL ist in der OpenSource-Community<br />

sehr gut bekannt <strong>und</strong> hat die erste<br />

OpenSource-Implementierung für SSL zur<br />

Verfügung gestellt, hat einen hohen Verbreitungsgrad<br />

auf Unix-artigen Systemen<br />

<strong>und</strong> verwendet ein duales Lizenzierungsmodell<br />

– es kommen die BSD-artigen Lizenzen<br />

SSLeay <strong>und</strong> OpenSSL zum Einsatz.<br />

NSS ist das ältere Framework <strong>und</strong> hat von<br />

Haus aus einen höheren Funktionsumfang<br />

als OpenSSL. Der Zertifikatsspeicher<br />

besteht aus einer Berkeley-Datenbank,<br />

anders als bei OpenSSL, wo Zertifikate<br />

in regulären Dateien abgelegt sind. NSS<br />

verwendet ein dreistufiges Lizenzierungsmodell,<br />

bestehend aus der Mozilla, der<br />

GNU General <strong>und</strong> der GNU Lesser General<br />

Public License.<br />

OpenSSL oder NSS<br />

Heute setzt der Großteil der Fedora-Applikationen<br />

NSS als Crypto-Framework<br />

ein, andere Anwendungen benutzen<br />

OpenSSL oder lassen dem Benutzer die<br />

Wahl zwischen dem einen oder dem<br />

anderen Framework. Ein gutes Beispiel<br />

hierfür ist der bekannte Webserver<br />

Apache. TLS/​SSL-Support stellt dieser<br />

seit jeher über das Modul »mod_ssl« zur<br />

Verfügung. Vor einiger Zeit bereits wurde<br />

daneben das Modul »mod_nss« für den<br />

Einsatz der Network Security Services<br />

entwickelt. Dem Admin steht es frei, das<br />

eine oder das andere Modul einzusetzen.<br />

Ähnlich ist es auch auf der Client-<br />

Seite. OpenLDAP kann beispielsweise <strong>mit</strong><br />

18 Ausgabe 06-2012 Admin www.admin-magazin.de


Admin-Story<br />

Login<br />

OpenSSL-basierten, aber auch <strong>mit</strong> NSS-<br />

Zertifikaten umgehen. Das Ziel ist dabei,<br />

immer mehr Applikationen auf NSS umzustellen.<br />

Bis es so weit ist, sollte man<br />

also <strong>mit</strong> beiden Frameworks umgehen<br />

können. Besonders interessant ist hierbei<br />

die Verwaltung von X.509-Zertifikaten.<br />

Die folgenden Beispiele geben eine kurze<br />

Einführung in die verfügbaren Tools der<br />

beiden Frameworks <strong>und</strong> wie sich <strong>mit</strong> deren<br />

Hilfe, Zertifikate sowohl von NSS als<br />

auch von OpenSSL nutzen lassen.<br />

Apache zertifiziert<br />

Als praktisches Beispiel soll hier der Apache-Webserver<br />

dienen. Die Konfiguration<br />

des Servers wurde entsprechend so geändert,<br />

dass statt »mod_ssl« nun mod_nss<br />

zum Einsatz kommt. Das entsprechende<br />

RPM bringt bereits eine NSS-Datenbank<br />

<strong>mit</strong>, die im Verzeichnids /»etc/httpd/<br />

alias/« liegt. Eine neue Datenbank richtet<br />

der folgende Befehl ein:<br />

certutil ‐N ‐d /etc/httpd/alias‐new/<br />

Ein selbst signiertes CA-Zertifikat erstellt<br />

der folgende Befehl:<br />

certutil ‐S ‐n "TUXGEEK CA CERT" ‐s "cn=U<br />

CAcert" ‐x ‐t "CT,," ‐m 1000 ‐v 120 ‐d /<br />

etc/U<br />

httpd/alias‐new/<br />

An dieser Stelle zeigt Certutil bereits an,<br />

dass das CA-Zertifikat in der NSS Datenbank<br />

gespeichert wurde:<br />

certutil ‐L ‐d /etc/httpd/alias‐new/<br />

Im Anschluss ist auf dem System, auf<br />

dem das Zertifikat verwendet werden<br />

soll, ein entsprechender Zertifikats-Request<br />

(CSR) zu erzeugen:<br />

certutil ‐d /etc/httpd/alias‐new/ ‐R ‐s U<br />

"CN=www.tuxgeek.de" ‐o tuxgeek.csr ‐g 2048U<br />

‐k rsa<br />

Der nächste Schritt besteht nun dann darin,<br />

den zuvor erzeugten Client-Request<br />

durch die CA zu signieren:<br />

certutil ‐C ‐m 2345 ‐i tuxgeek.csr U<br />

‐o tuxgeek.crt ‐c "TUXGEEK CA CERT" ‐d U<br />

/etc/httpd/alias‐new/<br />

Schließlich steht nun das angefragte X.509-<br />

Zertifikat zur Verfügung <strong>und</strong> kann auf dem<br />

Apache-System in die dort vorhandene<br />

NSS Datenbank importiert werden:<br />

certutil ‐d /etc/httpd/alias‐new/ U<br />

‐A ‐n tuxgeek‐cert ‐t ,, ‐i tuxgeek.crt<br />

Da das Zertifikat zuvor im Binary-Format<br />

erzeugt wurde, lässt es sich aktuell nur<br />

<strong>mit</strong> »certutil« anzeigen. Alternativ besteht<br />

die Möglichkeit, direkt ein ASCII-<br />

Zertifikat anzulegen (<strong>mit</strong>hilfe der Option<br />

»‐a« beim Erzeugen des CSR):<br />

certutil ‐d /etc/httpd/alias‐new/ ‐L ‐nU<br />

tuxgeek‐cert<br />

Sind alle Zertifikate erzeugt, bleibt noch,<br />

den Apache-Server zu konfigurieren<br />

<strong>und</strong> die korrekten Namen für Server<strong>und</strong><br />

CA-Zertifikat einzugeben. Auf den<br />

Client-Systemen muss ebenfalls noch das<br />

CA-Zertifikat importiert werden. Dieser<br />

Schritt entfällt natürlich, wenn der Request<br />

an eine externe CA ging, oder die<br />

eigene CA durch diese verifiziert wurde<br />

<strong>und</strong> das externe CA-Zertifikat bereits auf<br />

den Client-Systemen vorhanden ist. Im<br />

ersten Fall ist das CA-Zertifikat aus der<br />

Datenbank zu exportieren, bevor es auf<br />

den Clients importiert werden kann:<br />

certutil ‐d /etc/httpd/alias‐new/ ‐L U<br />

‐r ‐n "TUXGEEK CA CERT" > cacert.crt<br />

Wer möchte, kann natürlich sein Server-<br />

Zertifikat <strong>mit</strong> dem dazugehörigen privaten<br />

Schlüssel sichern <strong>und</strong> die PKCS#12-<br />

Datei <strong>mit</strong> einer Passphrase sichern:<br />

pk12util ‐d /etc/httpd/alias‐new/ ‐o U<br />

apache.p12 ‐n tuxgeek‐cert<br />

Wer an dieser Stelle gedacht hat, die<br />

Tipp arbeit ist endlich vorbei, der irrt.<br />

Wie zu Anfang bereits erwähnt, mag natürlich<br />

noch der Fall auftreten, dass bereits<br />

ein PEM codiertes Zertifikat vorliegt,<br />

das in der Vergangenheit einmal <strong>mit</strong>tels<br />

OpenSSL erzeugt wurde, <strong>und</strong> das nun<br />

in eine NSS Datenbank importiert werden<br />

muss. Dies ist nicht weiter schwer,<br />

OpenSSL erledigt dies <strong>mit</strong> einem einzelnen<br />

Befehl. Das Beispiel geht davon aus,<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 <strong>und</strong> Familie noch<br />

Zeit bleibt, nimmt er gerne<br />

an Marathonläufen teil.<br />

dass das Zertifikat <strong>und</strong> der private Schlüssel<br />

im aktuellen Verzeichnis liegen:<br />

openssl pkcs12 ‐in httpd.crt ‐inkey httpd.U<br />

pem ‐export ‐out httpd.p12<br />

Um die so erzeugte PKCS#12-Datei in die<br />

NSS-Datenbank zu schieben, kommt nun<br />

wieder »pk12util« zum Einsatz:<br />

pk12util ‐d /etc/httpd/alias‐new/ httpd.p12<br />

Das PKCS#12-Format eignet sich auch<br />

prima dafür, das Zertifikat <strong>mit</strong> dazugehörigen<br />

privaten Schlüssel zwischen<br />

verschiedenen Systemen auszutauschen.<br />

Beispielsweise auch dann, wenn <strong>mit</strong>tels<br />

eines Benutzer-Zertifikates eine Anmeldung<br />

auf einem Webserver stattfinden<br />

soll. Ein Import der Datei in den eigenen<br />

Webbrowser sorgt dafür, dass er das Zertifikat<br />

kennt <strong>und</strong> die Anmeldung klappt.<br />

Mit Python skripten<br />

Wer nach der ganzen Arbeit nun noch<br />

Lust hat, sich ein wenig weiter <strong>mit</strong> den<br />

Network Security Services auseinanderzusetzen<br />

<strong>und</strong> vielleicht das Framework in<br />

die eigene Anwendung interieren möchte,<br />

für den sei an dieser Stelle darauf hingewiesen,<br />

dass diverse Sprach-Bindings für<br />

den Zugriff auf die NSS-API existieren.<br />

Beispielsweise existiert für Python das<br />

Paket »python‐nss«, das einige nette Beispiele<br />

<strong>mit</strong>bringt, <strong>mit</strong> denen der Einstieg<br />

in die NSS-API sehr schnell gelingt. Viel<br />

Spaß. (ofr)<br />

n<br />

C13<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

19


Login<br />

Sicher löschen<br />

© Michael Biehler, 123RF<br />

Datenträger weitergeben: Was sagt das Gesetz dazu?<br />

Löschen<br />

reicht nicht<br />

Wer unbedacht einen alten Rechner oder eine Festplatte weiterverkauft,<br />

kann durchaus <strong>mit</strong> dem Gesetz in Konflikt geraten. Zum Beispiel, weil er<br />

einen Datenschutzskandal verursacht. Aber wie stellt man sicher, dass<br />

weitergegebene Datenträger nicht mehr lesbar sind? Wie entsorgt man<br />

Datenträger datenschutzkonform? Seit Oktober 2012 gibt es eine neue<br />

DIN-Norm zum Thema. Vilma Niclas<br />

Es ist kein Einzelfall, dass im Internet<br />

gebrauchte Festplatten versteigert werden<br />

<strong>und</strong> sich darauf noch vertrauliche Daten<br />

befinden. So fand ein Sicherheitsunternehmen<br />

sensible Patientendaten von<br />

Unfalleinsätzen einer österreichischen<br />

Rettungsorganisation auf versteigerten<br />

Festplatten bei eBay. Der Verkäufer hatte<br />

vergeblich versucht, die Platte durch<br />

Formatierung zu löschen. Das Sicherheitsunternehmen<br />

konnte Patientendaten,<br />

Kontaktadressen <strong>und</strong> Unfallfotos<br />

<strong>mit</strong>hilfe eines Wiederherstellungsprogrammes<br />

auslesen. Welche rechtlichen<br />

<strong>und</strong> technischen Vorgaben gelten für die<br />

Entsorgung von nicht mehr benötigten<br />

oder defekten Festplatten <strong>und</strong> den Weiterverkauf<br />

des alten iPhone 4? Wie geht<br />

man auf Nummer sicher, dass die Daten<br />

darauf gelöscht sind? Was verlangt das<br />

Datenschutzrecht?<br />

Sicherheitsstufe er<strong>mit</strong>teln<br />

Es kommt zunächst einmal darauf an,<br />

welche Daten sich auf dem Datenträger<br />

befinden. Sind es nur Daten, die den<br />

Inhaber selbst betreffen, kann er die Festplatte<br />

problemlos verkaufen oder weitergeben,<br />

an wen er möchte. Dies wird<br />

jedoch in den wenigsten Fällen so sein.<br />

In der Regel finden sich E-Mails, Briefe,<br />

Bankdokumente, Fotos von Fre<strong>und</strong>en,<br />

Konzepte, Zeichnungen, Firmeninterna<br />

oder andere vertrauliche Daten auf dem<br />

Rechner, <strong>und</strong> da<strong>mit</strong> ist auch das Geheimhaltungsinteresse<br />

des Korrespondenzpartners<br />

zu wahren.<br />

Die Dateien können personenbezogene<br />

Daten beinhalten – Daten, <strong>mit</strong> der eine<br />

Person identifiziert werden kann. Diese<br />

werden vom Datenschutzrecht, etwa dem<br />

BDSG geschützt. Es ist nur <strong>mit</strong> Einwilligung<br />

des Betroffenen oder aufgr<strong>und</strong> eines<br />

Gesetzes erlaubt, personenbezogene<br />

Daten weiterzugeben. Keine Anwendung<br />

findet das Datenschutzrecht für rein<br />

private oder familiäre Daten. Daneben<br />

schützen weitere Gesetze das Gr<strong>und</strong>recht<br />

auf informationelle Selbstbestimmung<br />

nach Artikel 1 in Verbindung <strong>mit</strong> Artikel<br />

2 des Gr<strong>und</strong>gesetzes. So gilt etwa für Fotos<br />

von Fre<strong>und</strong>en oder Geschäftspartnern<br />

auf der Festplatte zusätzlich das Recht<br />

am Bild dieser Personen aus dem Kunsturheberrechtsgesetz<br />

(KUG).<br />

Verstöße können teuer<br />

werden<br />

Der Datenschutz ist <strong>mit</strong>tlerweile kein<br />

Papiertiger mehr. Unternehmen erleiden<br />

große Imageverluste, wenn die falschen<br />

Daten an die Öffentlichkeit gelangen. Aufsichtsbehörden<br />

sind dazu übergegangen,<br />

Datenschutzverstöße <strong>mit</strong> empfindlichen<br />

Bußgeldern zu ahnden. Betriebe sind<br />

seit einiger Zeit nach § 42 a B<strong>und</strong>esdatenschutzgesetz<br />

sogar dazu verpflichtet,<br />

bestimmte Datenschutzpannen im Unternehmen<br />

zu melden. Verschweigt ein<br />

Unternehmen einen Zwischenfall, drohen<br />

nach § 43 BDSG bis zu 300.000 Euro<br />

Geldbuße.<br />

Dass dies nicht nur blanke Theorie ist<br />

zeigt etwa der 40. Tätigkeitsbericht des<br />

Hessischen Landesbeauftragten für Datenschutz<br />

von 2011: Es wurden seit dem<br />

1.9.2009 zahlreiche Fälle gemeldet, mehrheitlich<br />

Diebstähle von Datenträgern,<br />

etwa Laptops. Diese enthielten unter anderem<br />

Daten zu Bankverbindungen <strong>und</strong><br />

Kontonummern. Auch Verstöße gegen die<br />

sogenannte Auftragsdatenverarbeitung<br />

sanktionieren Datenschutzaufsichtsbehörden<br />

regelmäßig. Das wird relevant,<br />

wenn man einen externen Dienstleister<br />

20 Ausgabe 06-2012 Admin www.admin-magazin.de


Sicher löschen<br />

Login<br />

<strong>mit</strong> Tätigkeiten betraut, bei denen dieser<br />

Zugriff auf die personenbezogenen<br />

Daten des Unternehmens hat. Dafür gibt<br />

es konkrete Vorgaben, die man bei der<br />

Auftragsvergabe zu beachten hat. Mehr<br />

dazu weiter unten.<br />

Was bedeutet Löschen?<br />

Im Datenschutzrecht <strong>und</strong> spezialgesetzlichen<br />

Vorschriften ist je nach Branche<br />

festgelegt, wann gespeicherte Daten zu<br />

löschen sind. Bestimmte Daten unterliegen<br />

wegen des Anwalts- oder Sozialgeheimnisses<br />

einem größeren Schutz.<br />

Unter „Löschen“ versteht § 3 Absatz 4<br />

Nummer 5 BDSG, das Unkenntlichmachen<br />

gespeicherter personenbezogener<br />

Daten. Daten werden dann als unkenntlich<br />

angenommen, wenn man die Informationen<br />

nicht zurückgewinnen kann<br />

<strong>und</strong> eine weitere Verarbeitung nicht mehr<br />

möglich ist. Wie dies in der Praxis konkret<br />

umzusetzen ist, schreibt das Gesetz<br />

nicht vor. Anhaltspunkte ergeben sich<br />

aus § 9 BDSG, seiner Anlage <strong>und</strong> einigen<br />

DIN-Vorschriften zu den jeweiligen<br />

Löschtechniken.<br />

Die Anlage zu § 9 BDSG konkretisiert<br />

dann die erforderlichen Maßnahmen <strong>und</strong><br />

nennt etwa die Zugangs-, Zugriffs- <strong>und</strong><br />

Weitergabekontrolle sowie die Eingabekontrolle<br />

von personenbezogenen Daten.<br />

Das Gesetz weist zudem darauf hin, dass<br />

Verschlüsselung eine geeignete Maßnahme<br />

zur konkreten Umsetzung sei.<br />

Bei der Frage, welche Daten zu löschen<br />

sind <strong>und</strong> welchen Aufwand man dafür<br />

© Maksym Yemelyanov, 123RF<br />

Abbildung 1: Die Vernichtung von Akten aus Papier ist wesentlich einfacher als<br />

das sichere Löschen digitaler Datenträger, unter anderem, weil Letztere meist<br />

wiederverwertet werden sollen.<br />

betreiben muss, ist unter anderem die<br />

Sensibilität der Daten zu berücksichtigen<br />

sowie das Risiko der Wiederherstellung<br />

<strong>und</strong> der Aufwand, der für eine Rekonstruktion<br />

nötig wäre.<br />

Datenschützer empfehlen die Stärke der<br />

durchgeführten Löschmaßnahmen so zu<br />

wählen, dass eine Wiederherstellung der<br />

Daten für einen Angreifer <strong>mit</strong> dessen finanziellen<br />

oder materiellen Mitteln nicht<br />

nur erschwert oder unattraktiv, sondern<br />

auch praktisch nicht durchführbar wäre.<br />

IT-Sicherheit ist Chefsache<br />

Das Datenschutzrecht geht Hand in Hand<br />

<strong>mit</strong> der IT-Sicherheit. Im Aktiengesetz<br />

heißt es in § 91 Absatz 2: „Der Vorstand<br />

hat geeignete Maßnahmen zu treffen,<br />

insbesondere ein Überwachungssystem<br />

einzurichten, da<strong>mit</strong> die den Fortbestand<br />

der Gesellschaft gefährdenden Entwicklungen<br />

früh erkannt werden.“ Da man<br />

diese Vorschrift auch für andere Gesellschaftsformen<br />

anwendet, geht IT-Sicherheit<br />

jedes Unternehmen an, das personenbezogene<br />

Daten verarbeitet.<br />

Zur IT-Sicherheit gehört die Frage, was<br />

<strong>mit</strong> Datenträgern geschieht, die das<br />

Haus verlassen, sei es durch Verkauf,<br />

Entsorgung, im Gewährleistungsfall oder<br />

beim Ausscheiden eines Mitarbeiters. Der<br />

Geschäftsführer ist <strong>mit</strong> Blick auf die IT-<br />

Sicherheit <strong>mit</strong> der Sorgfalt eines ordentlichen<br />

<strong>und</strong> gewissenhaften Geschäftsleiters<br />

verpflichtet, sich zunächst erstmal selbst<br />

um die IT-Sicherheit im Hause zu kümmern.<br />

Die Einhaltung der Sorgfaltspflicht<br />

muss er im Streitfall<br />

beweisen. Er<br />

kann diese Pflicht<br />

aber delegieren,<br />

etwa an den IT-<br />

Sicherheitsbeauftragten.<br />

Zur IT-Sicherheit<br />

gehört es auch, das<br />

Unternehmens-<br />

Know-how, also<br />

betriebsinterne<br />

Daten zu schützen,<br />

wie geheime Pläne,<br />

Zeichnungen, Patentschriften<br />

vor<br />

der Anmeldung<br />

<strong>und</strong> so weiter.<br />

Man sollte regeln,<br />

was geschieht, wenn Mitarbeiter von zu<br />

Hause arbeiten, etwa vom privaten PC<br />

oder auf dem privaten Smartphone, Daten<br />

des Unternehmens hinterlassen.<br />

Sanktionen<br />

Im Unternehmensverkehr gibt es zahlreiche<br />

Geheimhaltungspflichten. Auf dem<br />

Unternehmenslaptop könnten Daten von<br />

Geschäftspartnern hinterlegt sein, wie<br />

Konzepte oder Pläne, über deren Geheimhaltung<br />

sich das Unternehmen in einer<br />

strafbewehrten Geheimhaltungsvereinbarung<br />

verpflichtet hat. Wird dagegen<br />

verstoßen, drohen meist Vertragsstrafen<br />

von 10 000 Euro aufwärts. Daran sollte<br />

man denken, bevor man einen Datenträger<br />

unbedacht entsorgt oder im Gewährleistungsfall<br />

ohne Sicherung an den<br />

Hersteller einsendet.<br />

Kümmert sich die Geschäftsführung<br />

nicht um die Frage der IT-Sicherheit <strong>und</strong><br />

entsteht der Gesellschaft dadurch ein<br />

Schaden, kann der für das Unternehmen<br />

Verantwortliche zum Schadensersatz<br />

herangezogen werden. Versicherungen<br />

könnten wegen der Verletzung von Sorgfaltspflichten<br />

nicht zahlen. Es empfiehlt<br />

sich, in einer Sicherheitsleitlinie (Security<br />

Policy) die Schutzziele <strong>und</strong> allgemeine<br />

Sicherheitsmaßnahmen als offizielle Vorgaben<br />

des Unternehmens zu formulieren.<br />

Details zur IT-Sicherheit finden Sie in den<br />

IT-Gr<strong>und</strong>schutz-Katalogen des BSI [1].<br />

Neben vertraglichen Sanktionen <strong>und</strong> der<br />

Schadensersatzpflicht eines Geschäftsführers,<br />

der sich um IT-Sicherheit keine<br />

Sorgen macht, droht § 43 Absatz 2 Nummer<br />

1 BDSG bis zu 300 000 Euro Bußgeld<br />

<strong>und</strong> die Gewinnabschöpfung an, wenn<br />

Daten entgegen dem Datenschutzrecht<br />

nicht gelöscht <strong>und</strong> da<strong>mit</strong> fortgesetzt verarbeitet<br />

werden.<br />

Welches Löschverfahren ist<br />

das Richtige?<br />

Will man nicht alle Daten entsprechend<br />

der höchsten Sicherheitsstufe entsorgen,<br />

muss man sich überlegen, um welche Daten<br />

es geht, <strong>und</strong> wie sie jeweils rechtlich<br />

geschützt sind. Anhand dieser Einstufung<br />

kann man festlegen wie man den<br />

konkreten Datenträger behandelt, sodass<br />

der Löschvorgang ausreichend sicher<br />

ist, aber auch gleichzeitig das Kosten/​<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

21


Login<br />

Sicher löschen<br />

Nutzen-Verhältnis im Blick<br />

bleibt.<br />

Um Daten zu entsorgen,<br />

gibt es einerseits physikalische<br />

Maßnahmen <strong>mit</strong> einer<br />

mechanischen, thermischen<br />

oder magnetischen Behandlung<br />

des gesamten Datenträgers,<br />

wie etwa das Shreddern<br />

oder das Entmagnetisieren<br />

von Festplatten (sogenanntes<br />

Degaussen). Diese Verfahren<br />

führen leider dazu, dass die<br />

Festplatte danach nicht mehr<br />

verwendbar ist. Diese Techniken<br />

empfehlen sich zum Beispiel<br />

bei defekten Festplatten<br />

<strong>mit</strong> sensiblen Daten, die ohnehin<br />

nicht mehr nutzbar wären <strong>und</strong> die<br />

sich nicht überschreiben lassen.<br />

Eine weitere Methode ist es, Datenträger<br />

ein- oder mehrmals gezielt zu überschreiben.<br />

Der Vorteil des Überschreibens<br />

ist: Man kann den Datenträger nach der<br />

Löschung erneut verwenden. Experten<br />

streiten heftig um die Frage, welche Maßnahme<br />

die sicherste ist.<br />

Heiko Weiß von der sidave GmbH, ein<br />

Unternehmen, das die Löschung von<br />

Datenträgern per Entmagnetisierung<br />

oder Überschreiben anbietet, meint:<br />

„Es gab Fälle, bei denen man Partikel<br />

von geshredderten Datenträgern wieder<br />

auslesen konnte. Zudem kann es beim<br />

Shreddern keinen Einzelnachweis als Erfolgsmeldung<br />

geben, dass gerade dieser<br />

Datenträger vernichtet worden ist. Die<br />

Festplatte ist ja zerstört. Es kam vor, dass<br />

zu shreddernde Festplatten im An- <strong>und</strong><br />

Verkauf gef<strong>und</strong>en worden sind. Hingegen<br />

verschafft das Degaussen dem K<strong>und</strong>en<br />

die Sicherheit, dass die Daten auf dem<br />

Datenträger endgültig <strong>und</strong> unwiderruflich<br />

vernichtet worden sind. Der K<strong>und</strong>e<br />

erhält ein Löschprotokoll <strong>mit</strong>samt eines<br />

Fotos der Festplatte. Bei der Technik<br />

des Überschreibens liest unsere Löschsoftware<br />

vom Datenträger eindeutige<br />

Kennziffern wie die Seriennummer aus,<br />

sodass der K<strong>und</strong>e sicher sein kann, dass<br />

wirklich seine Platte gelöscht worden ist.<br />

Der Löschbericht enthält neben einer einmaligen<br />

digitalen Signatur Angaben, wer<br />

wann welche <strong>und</strong> wessen Platte gelöscht<br />

hat. Es wird gegebenenfalls dokumentiert,<br />

dass Bereiche der Festplatte nicht<br />

erreicht werden konnten (zum Beispiel<br />

© Achim Prill, 123RF<br />

Abbildung 2: Die physische Vernichtung der Datenträger ist durchaus eine ernst<br />

zu nehmende Option, wenn es um hoch sensible Daten geht.<br />

defekte Sektoren). Im Zweifelsfall kann<br />

sich der K<strong>und</strong>e dann zusätzlich für ein<br />

weiteres Löschverfahren entscheiden.“<br />

Die Kosten für alle diese Verfahren liegen<br />

zwischen 15 <strong>und</strong> 20 Euro pro Platte.<br />

Marco Tessendorf, Geschäftsführer der<br />

procado consulting IT & Medienservice<br />

GmbH, meint dagegen: „Aufgr<strong>und</strong> der<br />

komplexen Struktur in Festplatten <strong>und</strong><br />

SSDs kann ein sicheres Löschen durch<br />

Überschreiben meiner Meinung nach<br />

nicht gewährleistet werden. Wir empfehlen<br />

daher die physikalische Zerstörung<br />

des Datenträgers entweder durch Shreddern<br />

oder Entmagnetisieren.“<br />

DIN-Vorschriften<br />

Relevant war bislang die DIN Norm<br />

32757. Die DIN Norm unterschied fünf<br />

Sicherheitsstufen je nach Schutzwürdigkeit<br />

der zu vernichtenden Informationen.<br />

Für personenbezogene Daten sah die DIN<br />

Norm mindestens Sicherheitsstufe 3 vor.<br />

Jedoch sind die Sicherheitsstufen für Papier<br />

nicht ohne Weiteres auf Datenträger<br />

übertragbar, denn auf einem Datenträger<br />

können auf der gleichen Partikelgröße<br />

weitaus mehr Informationen verdichtet<br />

sein, als auf einem Stück Papier.<br />

Seit 2009 gibt es zusätzlich die europäische<br />

Vorgabe: DIN EN 15713 „Sichere<br />

Vernichtung von vertraulichen Unterlagen<br />

– Verfahrensregeln“. Diese Norm<br />

enthält Empfehlungen für die Durchführung<br />

<strong>und</strong> Überwachung <strong>und</strong> Vernichtung<br />

von vertraulichen Unterlagen <strong>und</strong><br />

erfasst auch Festplatten, CDs, DVDs <strong>und</strong><br />

so weiter. Ganz aktuell ist die Normenreihe<br />

DIN 66399 „Büro- <strong>und</strong><br />

Datentechnik – Vernichtung<br />

von Datenträgern“, die am 1.<br />

Oktober 2012 veröffentlicht<br />

wurde. Bei der DIN geht es<br />

um die Vernichtung von Festplatten.<br />

Sie enthält zwei neue<br />

Sicherheitsstufen 6 <strong>und</strong> 7 <strong>und</strong><br />

drei Schutzklassen sowie eine<br />

Überarbeitung der Sicherheitsstufen<br />

1-5 [2]. Die Normen<br />

wurden im Arbeitsausschuss<br />

NA 043-01-51 AA „Vernichten<br />

von Datenträgern“ erstellt <strong>und</strong><br />

ersetzen die erwähnte Norm<br />

DIN 32757-1:1995-01 <strong>mit</strong> einer<br />

Übergangsfrist.<br />

Neben den beiden Teilen 1<br />

<strong>und</strong> 2 der Norm gibt es einen Teil 3 (DIN<br />

SPEC) [3], der nicht offiziell Bestandteil<br />

der DIN-Norm ist, aber erstmals den Prozess<br />

der Datenträgervernichtung abbildet.<br />

Es ist in einer Übergangszeit nach wie<br />

vor möglich, die alte DIN als Vertragsgr<strong>und</strong>lage<br />

zur Auftragsdatenverarbeitung<br />

zugr<strong>und</strong>e zu legen. Bestehende Verträge<br />

gelten weiter, man sollte die Norm <strong>und</strong><br />

die neuen Erkenntnisse des BSI aber<br />

zum Anlass nehmen, diese im Laufe der<br />

nächsten Zeit zu überarbeiten.<br />

Für das Entmagnetisieren von Datenträgern,<br />

das sogenannte Degaussen, verweisen<br />

Datenschützer auf die DIN 33858<br />

von 1993.<br />

Gelöscht ist nicht gelöscht<br />

Löscht man eine Datei manuell, markieren<br />

viele Betriebssysteme nur in den<br />

Verwaltungsstrukturen des Dateisystems<br />

diese Datei als gelöscht <strong>und</strong> die von ihr<br />

belegten Cluster als frei (logisches Löschen).<br />

Die eigentlichen Daten bleiben<br />

solange unangetastet, bis sie mehr oder<br />

weniger zufällig <strong>und</strong> meist unvollständig<br />

durch neue Dateien überschrieben werden.<br />

Eine Rekonstruktion der Daten ist<br />

dann relativ einfach möglich.<br />

Wer auf Nummer sicher gehen will, verlässt<br />

sich je nach Löschfunktion des Betriebssystems<br />

nicht darauf, sondern nutzt<br />

Zusatzverfahren, die eine Datei nach dem<br />

Löschen gezielt überschreiben, für Windows<br />

etwa das Zusatzprogramme „Secure<br />

Eraser“ oder zum Löschen ganzer Festplatten<br />

das betriebssystemunabhängige<br />

DBAN, welches das BSI für die niedrigste<br />

22 Ausgabe 06-2012 Admin www.admin-magazin.de


Sicher löschen<br />

Login<br />

besondere staatliche Geheimhaltungsstufe<br />

(VS-NfD: Verschlusssache – nur für<br />

den Dienstgebrauch) empfiehlt.<br />

Es kursieren viele Gerüchte über die<br />

Anzahl der erforderlichen Überschreibvorgänge<br />

bei einer Festplatte. Sieben ist<br />

nicht die richtige Antwort. Es kommt auf<br />

den Einzelfall an. Manchmal reicht ein<br />

Mal, manchmal reicht kein Mal könnte<br />

man die technische Komplexität auf den<br />

Punkt bringen.<br />

Sofern es um einen Privat-PC geht, <strong>und</strong><br />

man nicht hochsensible Daten auf dem<br />

Rechner hat, sollte es völlig ausreichen,<br />

die Festplatte mehrfach Sektor für Sektor<br />

zu überschreiben. Handelt es sich aber<br />

um sehr sensible Daten, wie geheime Unternehmensdaten,<br />

Personaldaten, Daten<br />

von Ärzten, Steuerberatern, Anwälten<br />

oder Sozialdaten sollte man die Platten<br />

besser nicht verkaufen <strong>und</strong> zusätzlich<br />

eine physikalische Methode anwenden,<br />

da<strong>mit</strong> die Daten nicht mehr rekonstruierbar<br />

sind.<br />

Das Überschreiben funktioniert aber leider<br />

nicht unter allen Bedingungen sicher.<br />

Das B<strong>und</strong>esamt für Sicherheit in der Informationstechnik<br />

(BSI) veröffentlichte<br />

dazu in einem Merkblatt vom Juli 2012<br />

aktuelle technische Hinweise <strong>und</strong> nahm<br />

zum 30.07.2012 die Zulassung von VS-<br />

Clean zurück <strong>und</strong> begründet dies: „…<br />

Wie bei vielen älteren Festplatten-Löschprogrammen<br />

üblich, erkennt <strong>und</strong> über-<br />

Datenschutz bei Gewährleistung<br />

schreibt das vom BSI seit 2002 ausgegebene<br />

VS-Clean (Version 2.1) DCO- beziehungsweise<br />

HPA-Bereiche nicht. Vor der<br />

Nutzung von VS-Clean zum VS-Löschen<br />

sind daher diese Bereiche <strong>mit</strong>tels eines<br />

HPA-fähigen Löschprogramms, etwa<br />

DBAN 2.2.6beta, aufzulösen. Festplatten<br />

ab ca. 2 Terabyte werden von VS-Clean<br />

weder richtig erkannt noch vollständig<br />

überschrieben….“ [4]<br />

Das BSI nennt als wesentliche Unterscheidungsmerkmale<br />

<strong>und</strong> Auswahlkriterien<br />

für Dienstleister <strong>und</strong> Löschverfahren<br />

beim Überschreiben:<br />

n Anzahl der Überschreibvorgänge<br />

n Überschreibmuster<br />

n Wechsel der Überschreibmuster pro<br />

Durchlauf<br />

n Berücksichtigung der Festplatteninternen<br />

Codierung<br />

n Verifikationsdurchläufe<br />

Fazit: Nicht für jeden Einsatzzweck ist das<br />

kostenfreie Programm aus dem Internet,<br />

welches angeblich die Platte überschreibt,<br />

das Richtige. Unternehmen, die sich <strong>mit</strong><br />

diesem hochkomplexen<br />

Thema befassen,<br />

werden in der Regel<br />

personenbezogene<br />

oder sensible Daten zu<br />

löschen haben <strong>und</strong> da<strong>mit</strong><br />

einen Anlass, auf<br />

sehr sichere Verfahren<br />

zu setzen. Aus diesem<br />

Laptop, Kopierer oder Smartphone sind defekt <strong>und</strong> müssen eingeschickt<br />

werden, oder die externe Festplatte oder der USB Stick sind weder lesbar<br />

noch zu löschen. Will man von der Gewährleistung oder von der Garantie<br />

des Herstellers Gebrauch machen, muss man das Gerät, samt der darauf<br />

befindlichen sensiblen Daten einschicken. Sicher, man hätte vorbeugen <strong>und</strong><br />

die Daten vorher verschlüsseln können. Aber leider lernt man aus Fehlern<br />

erst hinterher. Was tun?<br />

Man sollte das Problem offen gegenüber dem Hersteller/​Händler ansprechen<br />

<strong>und</strong> diesen über Datenschutzfragen aufklären. Man könnte sich versichern<br />

lassen, dass dieser ausschließlich Funktionen des Sticks überprüft <strong>und</strong> die<br />

Daten nicht einsieht oder kopiert. Zudem sollte er sich vorab schriftlich auf die<br />

Einhaltung des Datenschutzes verpflichten <strong>und</strong> versichern, dass die Mitarbeiter<br />

des Herstellers nach § 5 BDSG auf das Datengeheimnis verpflichtet sind.<br />

Bei hoch sensiblen Daten hat der K<strong>und</strong>e leider meist die Qual der Wahl zwischen<br />

dem Datenschutz <strong>und</strong> der IT-Sicherheit <strong>und</strong> auf der anderen Seite seinen<br />

Gewährleistungsansprüchen. Dieses Problem sollte man bereits beim Kauf der<br />

Geräte <strong>mit</strong> dem Händler besprechen <strong>und</strong> dafür eine Lösung suchen. Denn es<br />

dient auch nicht den Unternehmensinteressen, auf Gewährleistungsansprüche<br />

zu verzichten, um dem Datenschutz nachzukommen. Vergessen sollte<br />

man nicht, dass auch Kopierer zum Beispiel Daten speichern <strong>und</strong> <strong>mit</strong> kleinen<br />

Festplatten ausgestattet sind. Diese kann man ausbauen <strong>und</strong> dann an einem<br />

anderen Rechner angeschlossen, löschen.<br />

Gr<strong>und</strong> sollte man unter anderem auf von<br />

der BSI zertifizierte Software zurückgreifen,<br />

um seinen Sorgfaltspflichten an die<br />

IT-Sicherheit zu genügen oder physikalische<br />

Verfahren (zusätzlich) anwenden.<br />

Externe Dienstleister<br />

prüfen<br />

Was ist rechtlich zu beachten, wenn man<br />

Dienstleister einschaltet, um alte Festplatten<br />

vor dem Verkauf professionell löschen<br />

oder vernichten zu lassen? Es gibt<br />

für den Einsatz von Dienstleistern, die<br />

für K<strong>und</strong>en fremde personenbezogene<br />

Daten verarbeiten exakte Vorgaben in §<br />

11 BDSG, der die sogenannte Auftragsdatenverarbeitung<br />

regelt.<br />

Die Weitergabe der Daten an einen Dienstleister<br />

entbindet den Auftraggeber nicht<br />

von seinen Datenschutzverpflichtungen.<br />

Bevor man den Auftrag erteilt, muss man<br />

den Löschanbieter sorgfältig auswählen,<br />

indem man etwa auf eine Zertifizierung<br />

achtet, beispielsweise durch das BSI.<br />

Besuchen<br />

Sie uns auch<br />

auf der CEBIT<br />

2013<br />

Linux Schulungen 2013 – Nicht verpassen!<br />

• Erweiterungen programmieren für Check_MK<br />

19.11. 2012, 25.02.2013<br />

• Linux als Server im Inter- <strong>und</strong> Intranet 26.11.12<br />

• Storage - LVM, MD, Multipathing, iSCSI 03.12.12, 04.02.2013<br />

• Fortgeschrittenes Monitoring <strong>mit</strong> Nagios & Check_MK<br />

10.12.2012, 11.03.2013<br />

• Systemmonitoring <strong>mit</strong> Nagios <strong>und</strong> Check_MK 21.01.2013<br />

• Linux - Crashkurs für Administratoren 04.03.2013<br />

• Linux Administration für Fortgeschrittene 18.03.2013<br />

Gerne machen wir auch Inhouse-Schulungen direkt bei unseren K<strong>und</strong>en<br />

vor Ort. Fragen Sie uns nach einem Angebot zu Ihrem Wunschthema.<br />

Tel.: 089 / 18 90 42 10<br />

www.admin-magazin.de<br />

Admin<br />

mk@mathias-kettner.de<br />

Ausgabe 06-2012 www.mathias-kettner.de<br />

23


Login<br />

Sicher löschen<br />

Smartphone oder USB-Stick verloren<br />

Angenommen ein externer Datenträger, wie<br />

USB-Stick oder Smartphone oder Laptop <strong>mit</strong><br />

unverschlüsselten Daten geht verloren, weil<br />

man diesen etwa im Taxi oder der Bahn vergessen<br />

hat.<br />

n Anzeigepflicht bei Datenschutzpannen:.<br />

Das Unternehmen oder die Person, die ein<br />

Speichermedium <strong>mit</strong> personenbezogenen<br />

fremden Daten verloren hat, ist je nach den<br />

darauf befindlichen Daten verpflichtet, diese<br />

Datenpanne nach dem BDSG zu melden. Andernfalls<br />

drohen empfindliche Bußgelder.<br />

n Als Finder muss man dies nach § 965 BGB<br />

melden, es gilt die „Anzeigepflicht des Finders“:<br />

(1) Wer eine verlorene Sache findet<br />

<strong>und</strong> an sich nimmt, hat dem Verlierer oder<br />

dem Eigentümer oder einem sonstigen Empfangsberechtigten<br />

unverzüglich Anzeige zu<br />

machen.<br />

(2) Kennt der Finder die Empfangsberechtigten<br />

nicht, oder ist ihm ihr Aufenthalt unbekannt,<br />

so hat er den F<strong>und</strong> <strong>und</strong> die Umstände,<br />

welche für die Er<strong>mit</strong>telung der Empfangsberechtigten<br />

erheblich sein können, unverzüglich<br />

der zuständigen Behörde anzuzeigen. Ist<br />

die Sache nicht mehr als zehn Euro wert, so<br />

bedarf es der Anzeige nicht.<br />

Die weiteren Pflichten <strong>und</strong> Rechte ergeben<br />

sich aus den §§ 966 ff BGB, insbesondere<br />

nach welcher Frist man das Eigentum an<br />

F<strong>und</strong>sachen erwirbt.<br />

n Fernlöschung Es gibt spezielle Software, die<br />

per Fernzugriff die Daten auf einem gestohlenen<br />

Smartphone oder Laptop löschen kann,<br />

vorausgesetzt es besteht eine Internetverbindung.<br />

Oder man lässt sich ein Sicherheitskonzept<br />

vorlegen, aus dem sich ergibt, welche<br />

technischen <strong>und</strong> organisatorischen<br />

Maßnahmen der Anbieter getroffen hat,<br />

um den Schutz der personenbezogenen<br />

Daten zu gewährleisten.<br />

Ein Kriterium bei der Auswahl des Dienstleisters<br />

sollte auch sein, wie sehr das Unternehmen<br />

dagegen abgesichert ist, dass<br />

Fremde die Räume betreten können, in<br />

denen die externen Datenträger gelöscht<br />

werden. Eine weitere Frage könnte sein,<br />

ob der Dienstleister auch vor Ort im Unternehmen<br />

oder in einem mobilen Datenvernichter<br />

löschen kann oder aber<br />

wie der Transportweg der Datenträger<br />

abgesichert ist.<br />

Wichtig ist zudem, welche konkrete technische<br />

Methode der Anbieter verwendet,<br />

<strong>und</strong> ob diese die richtige für den eigenen<br />

Schutzbedarf ist. Man sollte technische<br />

Details bezüglich des Löschverfahrens<br />

erfragen. Der Auftrag ist schriftlich zu<br />

erteilen, <strong>und</strong> im Vertrag müssen eine<br />

ganze Reihe konkreter Fragen geregelt<br />

sein, die sich im Detail aus § 11 Absatz 2<br />

© Andrea Danti, 123RF<br />

BDSG ergeben. Eine Orientierung findet<br />

man hier [5].<br />

Wichtig ist außerdem, dass man auf ein<br />

vollständiges Löschprotokoll achtet, das<br />

je nach verwandter Technik genau bestätigt,<br />

welcher Datenträger <strong>mit</strong> identifizierender<br />

Seriennummer gelöscht oder vernichtet<br />

wurde <strong>und</strong> ausweist, ob es bei der<br />

Datenlöschung Fehler gab oder nicht.<br />

Wird ein Dienstleister eingesetzt, <strong>und</strong> erteilt<br />

man ihm einen Auftrag entgegen den<br />

Vorgaben der Auftragsdatenverarbeitung<br />

nicht richtig, nicht vollständig oder nicht<br />

in vorgeschriebener Weise oder versäumt<br />

man es, sich von den technischen <strong>und</strong><br />

organisatorischen Maßnahmen beim<br />

Dienstleister im Vorfeld zu informieren,<br />

kann dies <strong>mit</strong> einem Bußgeld bis zu<br />

50 000 Euro sanktioniert werden, § 43 I<br />

Nr. 2 b BDSG.<br />

Verschlüsseln statt<br />

shreddern<br />

Abbildung 3: Verschlüsseln ist eine Alternative zur Zerstörung des Datenträgers.<br />

Sicher gelöscht werden braucht jetzt nur noch der Schlüssel.<br />

Ein Mitarbeiter eines Landesbeauftragten<br />

für Datenschutz empfiehlt: „Idealerweise<br />

sollten Daten<br />

überhaupt nicht<br />

unverschlüsselt<br />

auf den Medien<br />

abgelegt werden.<br />

Mit einer Gr<strong>und</strong>verschlüsselung<br />

braucht man zum<br />

sicheren Löschen<br />

nur noch den (vergleichsweise<br />

sehr<br />

kurzen) Schlüssel<br />

sicher zu löschen.<br />

Wenn die Zerstörung<br />

des Mediums<br />

eine Option ist,<br />

sollte dennoch zuvor<br />

eine Löschung durch (mehrfaches)<br />

Überschreiben erfolgen.“<br />

Der Tipp Daten zu verschlüsseln schlägt<br />

gleich mehrere Fliegen <strong>mit</strong> einer Klappe:<br />

Er hilft bei der Frage der Gewährleistung<br />

weiter <strong>und</strong> ist nützlich für versehentlich<br />

liegengelassene Datenträger.<br />

n<br />

Infos<br />

[1] BSI-Gr<strong>und</strong>schutzkatalog: [https:// www.​<br />

bsi. b<strong>und</strong>. de/ ContentBSI/ gr<strong>und</strong>schutz/​<br />

kataloge/ kataloge. html]<br />

[2] DIN 66399: [http:// www. beuth. de/ de/​<br />

norm/ din‐66399‐1/ 155420083]<br />

[3] DIN-Spec zur Datenträgervernichtung:<br />

[http:// www. nia. din. de/ cmd?​<br />

artid=148899740& bcrumblevel=1&​<br />

contextid=nia& subcom<strong>mit</strong>teeid=54771182&​<br />

level=tpl‐art‐detailansicht&​<br />

com<strong>mit</strong>teeid=54738935& languageid=de]<br />

[4] BSI-Merkblatt: [https:// www. bsi. b<strong>und</strong>.​<br />

de/ ContentBSI/ Themen/ ProdukteTools/​<br />

VSclean/ VS_Clean. html]<br />

[5] Muster-Auftrag: [https:// www. gdd. de/​<br />

nachrichten/ news/ neues‐gdd‐muster‐zur‐au<br />

ftragsdatenverarbeitung‐gemas‐a7‐11‐bdsg]<br />

Die Autorin<br />

Die Autorin ist Rechtsanwältin & Fachjournalistin<br />

für IT-Recht in Berlin <strong>und</strong> veröffentlicht seit 1997<br />

in zahlreichen anderen Medien zu Fragen des IT-<br />

Rechtes. Darüber hinaus referiert sie regelmäßig<br />

zu aktuellen Fragen des Internetrechtes, der IT-<br />

Sicherheit <strong>und</strong> unterrichtet als Lehrbeauftragte<br />

für IT-Recht an der Beuth Hochschule für Technik<br />

in Berlin. Ihre Beratungsschwerpunkte sind: IT-<br />

& Internetrecht, Urheber-,<br />

Foto-, Softwarelizenz-,<br />

Vertrags- <strong>und</strong> Markenrecht,<br />

Werberecht, Datenschutzfragen<br />

sowie internationales<br />

Privat- <strong>und</strong> Europarecht.<br />

24 Ausgabe 06-2012 Admin www.admin-magazin.de


Wir meinen, dieser Low Energy Server<br />

sollte auch ernst genommen werden!<br />

Low Energy Server<br />

Stromverbrauch: ca. 6 - 9 Watt<br />

0 dB durch Passiv-Kühlung<br />

Neueste Atom CPU Technologie<br />

Applikationen: Mail-Server, Firewall, Router, etc.<br />

Verfügbare Betriebssysteme: z.B. Debian, € 499,–<br />

Ubuntu, CentOS <strong>und</strong> viele weitere Linux Derivate<br />

www.thomas-krenn.com/les-neu<br />

Nur bei Thomas Krenn ab:<br />

TRY<br />

&<br />

BUY<br />

Diesen <strong>und</strong> andere Thomas Krenn Server<br />

können Sie auch per Try & Buy testen<br />

DE: +49 (0) 8551 9150 - 0<br />

CH: +41 (0) 848207970<br />

AT: +43 (0)732 - 2363 - 0<br />

Verkauf erfolgt ausschließlich an Gewerbetreibende, Firmen, Freiberufler (Ärzte, Rechtsanwälte etc.), staatliche Institutionen <strong>und</strong> Behörden. Druckfehler, Irrtümer <strong>und</strong> Änderungen in Preis <strong>und</strong> Ausstattung<br />

vorbehalten. Unsere Versandkosten richten sich nach Gewicht <strong>und</strong> Versandart - mehr unter: www.thomas-krenn.com/versandkosten.Thomas-Krenn.AG, Speltenbach-Steinäcker 1, D-94078 Freyung


Login<br />

OSMC ’12<br />

Notizen von der siebenten Open Source Monitoring Konferenz<br />

Parallelentwicklung<br />

Die Open Source Monitoring Konferenz führte auch in diesem Jahr wieder<br />

Spezialisten für die Systemüberwachung nach Nürnberg. Jens-Christoph Brendel<br />

Abbildung 1: Nagios-Entwickler Andreas Ericsson während seines Vortrags über Nagios 4.0.<br />

Wenn Wale ähnliche Flossen haben wie<br />

Fische, obwohl sie bei ihnen auf ganz andere<br />

Weise, nämlich aus den Gliedmaßen<br />

ehemaliger Landsäugetiere entstanden,<br />

dann nennt man das in der Biologie eine<br />

Parallelevolution. Derselbe Selektionsdruck<br />

führt bei verschiedenen Spezies<br />

zur Ausbildung ähnlicher Merkmale.<br />

Verteilt voran<br />

Etwas Ähnliches lässt sich im Moment<br />

bei freier Monitoringsoftware beobachten.<br />

Den Selektionsdruck erzeugt hier die<br />

Sackgasse, in die das klassische Nagios<br />

speziell bei größeren Installationen geraten<br />

war: Bei einer hohen Anzahl Hosts<br />

skalierten die Checks nicht mehr <strong>und</strong><br />

verursachten horrende Verzögerungen.<br />

Der Ausweg, auf den verschiedene, entfernt<br />

verwandte Abkömmlinge gleichzeitig<br />

verfallen sind, heißt Modularisierung<br />

<strong>und</strong> Funktionsteilung. Das macht die Nagios-Neufassung<br />

Shinken so, das ist das<br />

Credo von »mod_gearman«, das versucht<br />

der Klassiker selbst <strong>mit</strong> der Einführung<br />

von Worker-Prozessen – um nur einige<br />

zu nennen. Und nun bricht auch der<br />

Nagios-Fork Icinga in diese Richtung auf<br />

– <strong>mit</strong> Icinga2 soll eine gr<strong>und</strong>legend neue,<br />

in C++ geschriebene Version vorerst parallel<br />

zur bestehenden entwickelt werden,<br />

die die klassischen Nagios-Prozesse<br />

wie Service-Checks oder Notifications<br />

in unterschiedlichen Kombinationen auf<br />

verschiedene Hosts verteilen kann.<br />

Neuigkeiten<br />

Diese Neuigkeit war eines der Highlights<br />

der nunmehr siebenten Open Source<br />

Monitoring Conference, wie immer hervorragend<br />

ausgerichtet vom Nürnberger<br />

IT-Dienstleister Netways GmbH. An selber<br />

Stelle gab es übrigens auch gleich<br />

Neuigkeiten zum bestehenden Icinga 1,<br />

dessen letzte Version 1.8 <strong>mit</strong> mehr als 75<br />

neuen Features <strong>und</strong> Bugfixes während<br />

der Konferenz erschien. Neu sind hier<br />

unter anderem ein weiter ausgebautes<br />

Reporting, vordefinierte Zeitperioden zur<br />

Erleichterung der Konfiguration oder eine<br />

neue Berechtigungsprüfung in der Web-<br />

GUI, die deutlich performanter ist.<br />

Neues war auf der Konferenz auch von<br />

anderen Projekten aus erster Hand zu<br />

erfahren. So stellte der Shinken-Chefentwickler<br />

Jean Gabes die Fortschritte<br />

seines Projekts vor, der Schöpfer des NS-<br />

Client++, Michael Medin, sprach über<br />

das bisher umfangreichste Update auf die<br />

Version 0.4.0 in diesem Jahr, <strong>und</strong> auch<br />

Konkurrenzprojekte wie Zabbix hatten<br />

Gelegenheit, jüngste Entwicklungen zu<br />

präsentieren.<br />

Nicht zu kurz kamen daneben zahlreiche<br />

Vorträge, die Best Practices diskutierten.<br />

So stellte etwa Martin Loschwitz die Monitoringfähigkeiten<br />

des Clustermanagers<br />

Pacemaker vor. Simon Meggle demonstrierte<br />

das End-to-End-Monitoring von<br />

Webapplikationen <strong>mit</strong>hilfe der Testautomatisierungssoftware<br />

SAHI. Christoph<br />

Mitasch erörterte verschiedene Möglichkeiten<br />

des MySQL-Datenbankmonitoring,<br />

<strong>und</strong> Mike Adolphs sprach über einen<br />

neuen Ansatz des Behavior Driven Monitoring<br />

<strong>mit</strong> Cucumber-Nagios, bei dem<br />

sich komplexe Tests in einer an natürliche<br />

Sprache angelehnten Syntax formulieren<br />

lassen.<br />

Eine dritte Gruppe von Referaten lieferte<br />

instruktive Case Studies. Darunter fanden<br />

sich so beeindruckende Vorträge wie der<br />

von Christophe Haen über das Monitoring<br />

beim Kernforschungszentrum CERN,<br />

wo in verschiedenen Projekten jeweils<br />

Tausende Server zu überwachen sind, die<br />

während der Experimente unglaubliche<br />

Datenmengen verarbeiten. So kann man<br />

die Menge, die alleine der CMS-Detektor<br />

des Large Hadron Collider erzeugt, <strong>mit</strong><br />

einer Digitalkamera vergleichen, die bei<br />

der enormen Auflösung von 70 Megapixeln<br />

pro Sek<strong>und</strong>e 40 Millionen Bilder<br />

schießt.<br />

Wie schon in den Vorjahren verdienen<br />

die Konferenzorganisation, die Unterbrinung<br />

der Teilnehmer, das Catering <strong>und</strong><br />

auch der Social Event am Abend des ersten<br />

Tages ein großes Lob für perfekte<br />

Organisation. (jcb)<br />

n<br />

26 Ausgabe 06-2012 Admin www.admin-magazin.de


www.kamp.de<br />

In der IT setzt man besser<br />

auf einen starken Partner!<br />

IT-Lösungen – stark <strong>und</strong> individuell. Mehr unter www.kamp.de


Netzwerk<br />

PHP-FPM<br />

© Matee Nuserm, 123RF<br />

Der PHP-Interpreter PHP-FPM<br />

Ersatzspieler<br />

Apache-Webserver führen PHP-Programme meist <strong>mit</strong> dem Modul Mod-php aus. Das offizielle PHP-Paket enthält<br />

aber auch noch eine wenig beachtete Alternative namens PHP-FPM. Dieser PHP-Interpreter nutzt die FastCGI-<br />

Schnittstelle <strong>und</strong> besitzt einige äußerst interessante Eigenschaften. Tim Schürmann<br />

Wer in der PHP-Dokumentation das Kapitel<br />

zur Installation aufschlägt, stolpert<br />

als Erstes über das Apache-Modul »mod_<br />

php«. Es implantiert einen PHP-Interpreter<br />

in den Webserver Apache, der so<strong>mit</strong><br />

die PHP-Anwendungen selbst ausführen<br />

kann. Für Lighttpd <strong>und</strong> IIS beschreibt<br />

die Dokumentation einen PHP-Interpreter,<br />

der die FastCGI-Schnittstelle nutzt<br />

(siehe Kasten „CGI-Beschleuniger“).<br />

Administratoren sollten hier jedoch nicht<br />

schon <strong>mit</strong> dem Lesen aufhören, sondern<br />

sich noch etwas weiter durch das Kapitel<br />

graben, bis sie auf den FastCGI Process<br />

Manager stoßen. Dahinter verbirgt sich<br />

ein alternativer PHP-Interpreter, der ein<br />

paar gravierende Nachteile von »mod_<br />

php« <strong>und</strong> des herkömmlichen FastCGI-<br />

Interpreters beseitigt.<br />

»mod_php« ist zwar schnell eingerichtet<br />

<strong>und</strong> aktiviert, dafür läuft der Interpreter<br />

aber auch <strong>mit</strong> den Rechten des Webservers.<br />

Eine Änderung der Konfiguration<br />

erzwingt zudem einen Neustart des kompletten<br />

Webservers <strong>und</strong> sorgt so für einen<br />

Ausfall des Internetauftritts. »mod_php«<br />

skaliert zudem recht schlecht. Das bekommt<br />

man besonders zu spüren, wenn<br />

im Laufe der Zeit die Zugriffszahlen<br />

langsam ansteigen. Alle diese Nachteile<br />

waren auch Andrei Nigmatulin ein Dorn<br />

im Auge. Er entwickelte kurzerhand für<br />

den FastCGI-Interpreter einen Patch, der<br />

auch gleich noch ein paar vermisste Sicherheitsfunktionen<br />

nachrüstete. Dem so<br />

aufgebohrten Interpreter gab er den Namen<br />

FastCGI Process Manager oder kurz<br />

PHP-FPM [2].<br />

Sein Name ist dabei Programm: PHP-FPM<br />

startet gleich mehrere PHP-Interpreter-<br />

Prozesse, die ständig im Hintergr<strong>und</strong> laufen<br />

<strong>und</strong> auf Arbeit warten. Eingehende<br />

Anfragen nimmt PHP-FPM vom Webserver<br />

entgegen <strong>und</strong> verteilt sie an die PHP-<br />

Interpreter (siehe Abbildung 1).<br />

Um Server-Ressourcen zu sparen, beendet<br />

PHP-FPM alle gerade nicht benötigten<br />

Interpreter-Prozesse <strong>und</strong> würgt zu lange<br />

vor sich hinwerkelnde PHP-Interpreter-<br />

Prozesse ab. Darüber hinaus kann man<br />

die Konfiguration im laufenden Betrieb<br />

ändern, ohne einen Interpreter-Prozess<br />

oder gleich den ganzen Webserver neustarten<br />

zu müssen. Darüber hinaus bietet<br />

PHP-FPM erweiterte Log-Funktionen. So<br />

kann es beispielsweise alle Skripte protokollieren,<br />

die eine bestimmte Rechen-<br />

28 Ausgabe 06-2012 Admin www.admin-magazin.de


PHP-FPM<br />

Netzwerk<br />

Client<br />

startet<br />

(PHP-)Interpreter<br />

führt aus<br />

Client<br />

Webserver<br />

Webserver<br />

TCP-Port 9000<br />

Socket<br />

PHP-FPM<br />

Interpreter-Prozess<br />

...<br />

Interpreter-Prozess<br />

Skript<br />

Abbildung 1: Beim CGI-Standard startet der Webserver den Interpreter wie ein<br />

ganz normales Kommandozeilenprogramm.<br />

Abbildung 2: Der Webserver reicht entweder über einen TCP-Port oder einen<br />

Unix Socket die Anfrage an PHP-FPM weiter, der sie von einem PHP-Interpreter-<br />

Prozess abarbeiten lässt.<br />

zeit überschritten haben – inklusive der<br />

verursachenden PHP-Funktion. Das hilft<br />

nicht nur bei der Fehlersuche während<br />

der Entwicklung, sondern deckt auch<br />

Angriffe auf.<br />

Richtig gepoolt<br />

Die PHP-Interpreter-Prozesse lassen sich<br />

zu sogenannten Pools zusammenfassen.<br />

Jeder Pool kann dabei eine eigene PHP-<br />

Konfiguration besitzen <strong>und</strong> seine Prozesse<br />

sogar in eine Chroot-Umgebung<br />

einsperren. Darüber hinaus darf der<br />

Administrator festlegen, unter welchem<br />

Benutzerkonto die Prozesse eines Pools<br />

vor sich hinwerkeln. Eingehende Anfragen<br />

lassen sich dann gezielt an einen der<br />

Pools weiterreichen. Da<strong>mit</strong> könnte man<br />

beispielsweise einen maßgeschneiderten<br />

Pool für das Blog, einen weiteren für das<br />

Forum <strong>und</strong> einen dritten für die offizielle<br />

Website abstellen.<br />

Da jeder Pool die Anfragen auf einer eigenen<br />

TCP-Adresse entgegennimmt, kann<br />

man bei steigender Last der Forums-<br />

Website den zugehörigen Pool auf einen<br />

eigenen, leistungsfähigeren Rechner auslagern<br />

– dazu sind nur ein paar einfache<br />

Änderungen in den Konfigurationsdateien<br />

notwendig.<br />

PHP-FPM kommt sogar <strong>mit</strong> Zusatzmodulen<br />

wie eAccelerator oder APC zurecht,<br />

die den vom PHP-Interpreter kompilierten<br />

Quelltext (Opcodes) puffern. Dies<br />

spart bei der nächsten Anfrage eine erneute<br />

Übersetzung, was wiederum den<br />

Seitenaufbau beschleunigt. Ein Interpreter-Prozess<br />

kann den Opcode-Cache jedoch<br />

(versehentlich) überschreiben oder<br />

zerstören. PHP-FPM überwacht deshalb<br />

den Cache <strong>und</strong> startet sich bei Amok<br />

laufenden Prozessen automatisch einmal<br />

neu.<br />

Startrampe<br />

Seit PHP 5.4.0 gehört PHP-FPM zum offiziellen<br />

PHP-Paket <strong>und</strong> liegt da<strong>mit</strong> auch<br />

den meisten aktuellen Linux-Distributionen<br />

bei. Ein entsprechendes Paket findet<br />

man leicht über den Paketmanager,<br />

meistens heißt es »php5‐fpm«. Eine der<br />

wenigen Ausnahmen ist noch Debian 6<br />

(Squeeze). Dort kann man jedoch PHP-<br />

FPM über das Dotdeb-Repository hinzuholen,<br />

indem man in »/etc/apt/sources.<br />

list« die Zeile:<br />

deb http://packages.dotdeb.org stable all<br />

ergänzt. Das benötigte Paket installiert<br />

dann:<br />

apt‐get update<br />

apt‐get install php5‐fpm<br />

Da man die von den Pools verwendeten<br />

TCP-Ports frei vergeben kann, lässt sich<br />

PHP-FPM übrigens auch parallel zu anderen<br />

FastCGI-Interpretern betreiben.<br />

PHP-FPM ist im Moment auf Linux zugeschnitten,<br />

weshalb es im Windows-<br />

Paket von PHP fehlt. Die dort enthaltene<br />

»php‐cgi.exe« ist nur der herkömmliche<br />

FastCGI-Interpreter. Windows-<br />

Administratoren müssen daher entweder<br />

PHP-FPM umständlich in einer Cygwin-<br />

Umgebung per Hand übersetzen <strong>und</strong> in<br />

Betrieb nehmen oder aber PHP-FPM getrennt<br />

vom Webserver auf einem eigenen<br />

Linux-Rechner laufen lassen. Die letztere<br />

Variante ist dabei die weitaus einfachere,<br />

zumal man das Linux-System <strong>mit</strong> PHP-<br />

FPM auch in eine virtuelle Maschine<br />

verbannen kann. Im Folgenden soll daher<br />

weiterhin die Inbetriebnahme unter<br />

Linux im Vordergr<strong>und</strong> stehen.<br />

Sämtliche Konfigurationsdateien für PHP-<br />

FPM <strong>und</strong> seine PHP-Interpreter-Prozesse<br />

sammelt das Verzeichnis »/etc/php5/<br />

fpm« (vorausgesetzt ,die eigene Distribution<br />

gibt nicht andere Verzeichnisse vor).<br />

Die Einrichtung von PHP-FPM geschieht<br />

in der Konfigurationsdatei »php‐fpm.<br />

CGI-Beschleuniger<br />

Webserver sind eigentlich von Haus aus recht<br />

dumme Gesellen. Sie können lediglich Dateien<br />

<strong>und</strong> so<strong>mit</strong> statische Seiten ausliefern. Um eine<br />

Webseite dynamisch zu erzeugen, braucht der<br />

Webserver Hilfe von einem weiteren Programm –<br />

wie etwa dem PHP-Interpreter. Dieser führt dann<br />

wiederum eines oder mehrere (PHP-)Skripte aus,<br />

die schließlich die Seite zusammenklöppeln. Wie<br />

der Webserver den Interpreter aufrufen <strong>und</strong> dieser<br />

die fertige Seite zurückgeben muss, regelt<br />

seit 1993 ein Standard namens Common Gateway<br />

Interface, kurz CGI. Sobald eine Anfrage<br />

beim Webserver eingeht, setzt dieser ein paar<br />

Umgebungsvariablen <strong>und</strong> startet dann den Interpreter.<br />

Der wiederum wertet die Umgebungsvariablen<br />

aus <strong>und</strong> gibt die erzeugte Webseite über<br />

die Standardausgabe an den Webserver zurück.<br />

Abbildung 1 veranschaulicht das Zusammenspiel<br />

noch einmal.<br />

Bei dieser Vorgehensweise startet der Webserver<br />

bei jeder Anfrage erneut den dicken Interpreter.<br />

Das frisst zum einen Rechenzeit <strong>und</strong><br />

zum anderen auch Hauptspeicher. Häufig dauert<br />

das Laden des Interpreters sogar länger als die<br />

Ausführung des eigentlichen Skriptes. Um die<br />

Antwortzeiten zu erhöhen <strong>und</strong> den Server zu<br />

entlasten, entstand Mitte der 90er-Jahre die<br />

FastCGI-Schnittstelle [1]. Dabei startet der Interpreter<br />

genau einmal <strong>und</strong> läuft dann im Hintergr<strong>und</strong><br />

ständig weiter.<br />

Der Webserver reicht dann die Anfragen über<br />

einen TCP-Port oder einen Unix Domain Socket<br />

an den Interpreter weiter.<br />

Da die Kommunikation über die bekannten Netzwerkstandards<br />

läuft, könnte der Interpreter sogar<br />

auf einem komplett anderen Rechner als<br />

der Webserver laufen. Die gesamte Umgebung<br />

lässt sich so wesentlich besser <strong>und</strong> einfacher<br />

skalieren.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

29


Netzwerk<br />

PHP-FPM<br />

conf«. Im einfachsten Fall weist in ihr<br />

nur die einsame Zeile:<br />

include=/etc/php5/fpm/pool.d/*.conf<br />

01 [einpool]<br />

darauf hin, wo alle weiteren Konfigurationsdateien<br />

zu finden sind. Kommentare<br />

beginnen übrigens immer <strong>mit</strong> einem Semikolon<br />

<strong>und</strong> gehen bis zum Ende der<br />

Zeile. Anstelle der »php‐fpm.conf« findet<br />

man häufig auch eine Beispieldatei, unter<br />

Open Suse heißt sie »php‐fpm.conf.<br />

default«. Diese muss man dann lediglich<br />

korrekt umbenennen, eine Anpassung ist<br />

normalerweise nicht notwendig.<br />

Schwimmbadbau<br />

Die PHP-Interpreter-Prozesse fasst PHP-<br />

FPM in Pools zusammen, wobei mindestens<br />

ein Pool existieren muss. Für jeden<br />

Pool liegt im Unterverzeichnis »/ etc/<br />

php5/pool.d« genau eine Konfigurationsdatei<br />

<strong>mit</strong> der Endung ».conf«. Den<br />

voranstehenden Dateinamen darf man<br />

frei wählen, PHP-FPM liest einfach alle<br />

».conf«-Dateien in diesem Verzeichnis<br />

nacheinander ein. Um einen Pool vorübergehend<br />

zu deaktivieren, muss man<br />

folglich nur die Endung der zugehörigen<br />

Konfigurationsdatei ändern.<br />

Wurde PHP-FPM über den Paketmanager<br />

der Distribution installiert, existiert im<br />

Konfigurationsverzeichnis meist schon<br />

eine Datei für einen einfachen Pool, unter<br />

Debian beispielsweise <strong>mit</strong> dem Namen<br />

»www.conf«. Diese Datei sollte man<br />

nicht löschen, sondern sichern: Da in<br />

ihr ausführliche Kommentare alle möglichen<br />

Einstellungen erklären, dient sie als<br />

Nachschlagewerk. Die Informationen auf<br />

der PHP-FPM-Homepage [2] <strong>und</strong> in der<br />

PHP-Dokumentation [3] sind hingegen<br />

veraltet beziehungsweise unvollständig.<br />

Wer keine Beispiel-Datei vorfindet, lädt<br />

Listing 1: Einfacher Pool namens »einpool«<br />

02 ; Pool erreichbar unter TCP‐Port:<br />

03 listen = 127.0.0.1:9000<br />

04 <br />

05 ; Zugriff nur erlaubt von:<br />

06 listen.allowed_clients = 127.0.0.1<br />

07 <br />

08 ; Prozesse laufen unter Benutzer <strong>und</strong> Gruppe:<br />

09 user = www‐data<br />

10 group = www‐data<br />

11 <br />

12 ; Erzeuge Prozesse nach Bedarf:<br />

sich das offizielle PHP-Quellcode-Paket<br />

herunter <strong>und</strong> wirft dann einen Blick in<br />

die Datei »php‐fpm.conf.in« im Verzeichnis<br />

»sapi/fpm«.<br />

Ein Beispiel für eine minimale Konfigurationsdatei<br />

zeigt Listing 1: Zu Beginn<br />

erhält der Pool in eckigen Klammern den<br />

Namen »einpool«. Die darin zusammengefassten<br />

Interpreter-Prozesse bearbeiten<br />

dann alle Anfragen, die der Webserver<br />

über den TCP-Port 9000 an PHP-FPM<br />

übergibt. Die nächste Zeile »listen.allowed_clients«<br />

stellt sicher, dass am Port<br />

9000 nur Programme anklopfen dürfen,<br />

die auf dem gleichen Rechner wie<br />

PHP-FPM laufen (»localhost«, IP-Adresse<br />

»127.0.0.1«). Da<strong>mit</strong> verhindert man, dass<br />

Angreifer von außen PHP-FPM <strong>mit</strong> Anfragen<br />

zubombardieren oder die PHP-Interpreter<br />

sogar für eigene Zwecke missbrauchen.<br />

Möchte man hier Anfragen von<br />

weiteren IP-Adressen zulassen, hängt<br />

man diese einfach durch ein Komma getrennt<br />

hintereinander.<br />

Alle PHP-Interpreter-Prozesse aus dem<br />

Pool »einpool« laufen gemäß Listing 1 <strong>mit</strong><br />

den Rechten des Benutzers »www‐data«<br />

aus der Gruppe »www‐data« – hier also<br />

der Einfachheit halber <strong>mit</strong> denen des<br />

Webservers. In einer produktiven Umgebung<br />

legt man sicherheitshalber für jeden<br />

Pool einen eigenen neuen Benutzer an.<br />

13 pm = dynamic<br />

14 <br />

15 ; Maximale Anzahl Prozesse:<br />

16 pm.max_children = 96<br />

17 <br />

18 ; Starte <strong>mit</strong> so vielen Prozessen:<br />

19 pm.start_servers = 16<br />

20 <br />

Abbildung 3: PHP-FPM lauscht an TCP-Port 9000.<br />

21 ; Vorrat an Interpretern ohne Aufgabe:<br />

22 pm.min_spare_servers = 10<br />

23 pm.max_spare_servers = 70<br />

Um keine Ressourcen zu verschwenden,<br />

soll PHP-FPM die Interpreter-Prozesse<br />

nach Bedarf (»dynamic«) starten <strong>und</strong> beenden.<br />

Wie »pm.max_children« vorgibt,<br />

dürfen dabei in diesem Pool höchstens<br />

96 PHP-Interpreter-Prozesse gleichzeitig<br />

laufen. Da jeder Interpreter-Prozess eine<br />

Anfrage abarbeitet, kann der Pool aus<br />

Listing 1 folglich 96 Anfragen gleichzeitig<br />

bedienen.<br />

Wie viele Kind-Prozesse PHP-FPM direkt<br />

nach seinem Start aktiviert, legt »pm.<br />

start_servers« fest – in Listing 1 sind es<br />

16 Stück. Es handelt sich hierbei wohlgemerkt<br />

um die Anzahl der Kind-Prozesse,<br />

zusammen <strong>mit</strong> dem vom Administrator<br />

gestarteten Ausgangs-Prozess laufen so<strong>mit</strong><br />

insgesamt 17 Prozesse. Däumchen<br />

drehende PHP-Interpreter-Prozesse darf<br />

es maximal 70 geben (»pm.max_spare_<br />

servers«). Um für Anfragestürme gewappnet<br />

zu sein, lässt Listing 1 immer<br />

10 Stück in Wartestellung laufen (»pm.<br />

min_spare_servers«).<br />

Eine für alle<br />

Die von PHP-FPM gestarteten PHP-Interpreter-Prozesse<br />

übernehmen die Einstellungen<br />

aus der Datei »/etc/php5/fpm/<br />

php.ini«. Ihr Inhalt entspricht der allseits<br />

bekannten »php.ini«-Datei. Sie gilt jetzt<br />

allerdings für sämtliche Prozesse aus allen<br />

Pools. Erhöht man in ihr beispielsweise<br />

das »memory_li<strong>mit</strong>« auf »64M«,<br />

darf anschließend jeder PHP-Interpreter-<br />

Prozess 64 MByte Hauptspeicher seinem<br />

PHP-Skript zur Verfügung stellen. Wenn<br />

nur der Pool aus Listing 1 existiert, könnten<br />

maximal 96 Prozesse gleichzeitig laufen,<br />

was im schlimmsten Fall 96 * 64<br />

MByte = 6 GByte Hauptspeicher beanspruchen<br />

würde.<br />

Sollen die Prozesse in einem bestimmten<br />

Pool abweichende Einstellungen nutzen,<br />

30 Ausgabe 06-2012 Admin www.admin-magazin.de


PHP-FPM<br />

Netzwerk<br />

Abbildung 4: Wie in Listing 1 vorgegeben, laufen hier<br />

17 PHP-Interpreter-Prozesse.<br />

legt man diese in der Konfigurationsdatei<br />

des Pools (wie in Listing 1) ab, allerdings<br />

in einer etwas gewöhnungsbedürftigen<br />

Notation. So muss der Name der PHP-<br />

Einstellung zwischen den eckigen Klammern<br />

von »php_admin_value[]« stehen:<br />

php_admin_value[memory_li<strong>mit</strong>] = 32M<br />

Diese Zeile setzt das »memory_li<strong>mit</strong>« auf<br />

32 MByte. Boolesche Werte (also Einstellungen,<br />

die etwas an- <strong>und</strong> ausschalten)<br />

lassen sich analog <strong>mit</strong> »php_admin_<br />

flag[]« überschreiben, hier ein Beispiel<br />

<strong>mit</strong> »log_errors«:<br />

php_admin_flag[log_errors] = on<br />

Nachdem die Konfiguration steht, startet<br />

der folgende Aufruf PHP-FPM:<br />

/etc/init.d/php5‐fpm start<br />

Abbildung 5: »phpinfo()« verrät, dass PHP-FPM die<br />

Anfrage beantwortet hat.<br />

Die Interpreter-Prozesse laufen jetzt im<br />

Hintergr<strong>und</strong> <strong>und</strong> warten dort auf Anfragen.<br />

Prüfen kann man das etwa <strong>mit</strong><br />

»netstat ‐tapn«. In der Ausgabe sollte wie<br />

in Abbildung 3 PHP-FPM auftauchen.<br />

»ps ‐A« sollte zudem die angegebene Anzahl<br />

PHP-Interpreter-Prozesse <strong>mit</strong> dem<br />

Namen »php‐fpm« anzeigen (Abbildung<br />

4). Als Nächstes gilt es, den Webserver<br />

auf PHP-FPM aufmerksam zu machen.<br />

Indianerhäuptling<br />

Apache muss die eingehende Anfrage an<br />

PHP-FPM weiterreichen. Dies übernimmt<br />

das Apache-Modul »mod_fastcgi«. Windows-Administratoren<br />

bekommen es als<br />

fertige DLL-Datei auf der FastCGI-Seite<br />

[4]. Unter Linux hilft ein Blick in den<br />

Paketmanager: Bei Debian 6 steckt das<br />

Modul im Paket »libapache2‐mod‐fastcgi«<br />

(aus dem »non‐free«-Repository). Dabei<br />

sollte man darauf achten, nicht das fast<br />

gleichlautende Modul »mod_fcgid« zu<br />

erwischen. Dieses rüstet FastCGI unter<br />

Apache 2 nach, bringt aber seinen eigenen<br />

Prozess-Manager <strong>mit</strong> <strong>und</strong> kann eingehende<br />

Anfragen nicht an einen schon<br />

laufenden Interpreter wie PHP-FPM weiterreichen.<br />

Folglich ist es in diesem Fall<br />

nutzlos.<br />

Wer Debian 6 verwendet <strong>und</strong> noch keinen<br />

Apache 2 installiert hat, spielt <strong>mit</strong><br />

folgendem Kommandozeilenbefehl die<br />

notwendigen Pakete ein:<br />

apt‐get install apache2‐mpm‐worker U<br />

libapache2‐mod‐fastcgi<br />

Nginx<br />

In der Praxis kombinieren viele Administratoren<br />

PHP-FPM <strong>mit</strong> dem schlanken <strong>und</strong> schnellen<br />

Webserver Nginx. Da<strong>mit</strong> die beiden zusammenarbeiten,<br />

muss die Ngnix-Konfiguration<br />

die Zeilen<br />

location ~ \.php$ {<br />

fastcgi_pass 127.0.0.1:9000;<br />

include<br />

fastcgi_params;<br />

# ...<br />

}<br />

enthalten. Wenn Sockets zum Einsatz kommen,<br />

ersetzt man die Zeile »fastcgi_pass« gegen:<br />

fastcgi_pass unix:/tmp/php5‐fpm.socket<br />

»/tmp/php5‐fpm.socket« ist dabei der Name<br />

des Sockets.<br />

Als Nächstes aktiviert der Befehl »a2enmod<br />

fastcgi« das Modul. Das Modul<br />

»mod_php5« lässt sich so deaktivieren:<br />

»a2dismod php5«.<br />

Jetzt muss man nur noch in der Apache-<br />

Konfigurationsdatei »httpd.conf« die Zeilen<br />

aus Listing 2 ergänzen. Unter Debian<br />

6 empfiehlt es sich, die Anweisungen in<br />

einer eigenen Datei, etwa <strong>mit</strong> dem Namen<br />

»php5‐fcgi.conf«, im Verzeichnis »/etc/<br />

apache2/conf.d« abzulegen. Entscheidend<br />

ist die Zeile »FastCgiExternalServer«,<br />

die Apache anweist, die Anfragen<br />

an den TCP-Port 9000 weiterzureichen.<br />

Sofern zuvor »mod_php« aktiv war, muss<br />

man dessen Konfiguration noch löschen<br />

beziehungsweise auskommentieren.<br />

Anschließend startet »/etc/init.d/apache2<br />

restart« den Webserver neu. Zur Probe<br />

sollte man jetzt eine simple PHP-Datei<br />

»info.php« <strong>mit</strong> dem Inhalt:<br />

<br />

im Document-Root ablegen, bei Debian 6<br />

im Verzeichnis »/var/www«. Steuert man<br />

jetzt diese Datei im Browser an, sollte<br />

sich PHP-FPM wie in Abbildung 5 als<br />

Interpreter zu erkennen geben.<br />

Sockel<br />

In Listing 1 übergibt der Webserver die<br />

eingehenden Anfragen über den TCP-Port<br />

9000 an PHP-FPM. Wenn Webserver <strong>und</strong><br />

PHP-FPM auf der gleichen Maschine<br />

laufen, bietet sich auch die Verwendung<br />

von Unix-Sockets an. Da<strong>mit</strong> verringert<br />

sich der TCP-Overhead. Um PHP-FPM<br />

am Unix-Socket »/tmp/php5‐fpm.socket«<br />

lauschen zu lassen, muss in der Pool-<br />

Konfigurationsdatei aus Listing 1 die<br />

Zeile »listen« durch<br />

listen = /tmp/php5‐fpm.socket<br />

ausgetauscht werden. Als Nächstes<br />

ersetzt man die Zeile »listen.allowed_<br />

clients« <strong>mit</strong> der Dreierbande:<br />

Listing 2: Apache-2-Konfiguration für PHP-FPM<br />

01 <br />

02 AddHandler php5‐fcgi .php<br />

03 Action php5‐fcgi /php5‐fcgi<br />

04 Alias /php5‐fcgi /usr/lib/cgi‐bin/php5‐fcgi<br />

05 FastCgiExternalServer /usr/lib/cgi‐bin/<br />

php5‐fcgi ‐host 127.0.0.1:9000 ‐pass‐header<br />

Authorization<br />

06 <br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

31


Netzwerk<br />

PHP-FPM<br />

listen.owner = www‐data<br />

listen.group = www‐data<br />

listen.mode = 0660<br />

Sie gibt den Besitzer (»listen.owner«),<br />

die Gruppe (»listen.group«) <strong>und</strong> die Zugriffsrechte<br />

(»listen.mode«) des Sockets<br />

vor. Anschließend startet dieser Befehl<br />

PHP-FPM neu:<br />

/etc/init.d/php5‐fpm restart<br />

01 <br />

Abbildung 6: Dieses Access-Log zeigt im oberen Bereich die Standard-Informationen <strong>und</strong> im unteren dann alle<br />

möglichen Daten über die Anfragen.<br />

Da<strong>mit</strong> Änderungen der PHP-Konfiguration<br />

wirksam werden, muss man den<br />

Apache-Server <strong>mit</strong> »mod_php« neustarten.<br />

Die gerade aktiven Benutzer erleben<br />

dann einen Verbindungsabbruch nebst einer<br />

Fehlermeldung. Anders bei PHP-FPM:<br />

Dort kann man die Konfiguration im laufenden<br />

Betrieb ändern. Das ist besonders<br />

nützlich, wenn man schnell die Anzahl<br />

der Interpreter-Prozesse in einem Pool<br />

hochschrauben oder weitere Pools hinzufügen<br />

möchte. PHP-FPM startet dann für<br />

neu eingehende Anfragen neue Prozesse<br />

<strong>mit</strong> der aktualisierten Konfiguration. Die<br />

noch laufenden alten Anfragen arbeiten<br />

die entsprechenden Prozesse noch ab, bevor<br />

PHP-FPM sie beendet. Einen solchen<br />

graceful Restart leitet<br />

/etc/init.d/php5‐fpm reload<br />

ein. Das bereits erwähnte:<br />

/etc/init.d/php5‐fpm restart<br />

löst hingegen einen herkömmlichen Neustart<br />

aus.<br />

Protokollant<br />

Die von einem Pool bearbeiteten Anfragen<br />

kann PHP-FPM zu Diagnosezwecken<br />

aufzeichnen. Dazu ergänzt man in der<br />

entsprechenden Konfigurationsdatei des<br />

Pools (wie der aus Listing 1) die Zeile:<br />

access.log = /var/log/$pool.access.log<br />

Nach dem Gleichheitszeichen folgt der<br />

Name der Log-Datei. Den Platzhalter<br />

»$pool« ersetzt PHP-FPM gegen den Namen<br />

des Pools. Standardmäßig landen im<br />

Protokoll die IP-Adresse, der Benutzername,<br />

die (Server-)Zeit, die Request-Methode,<br />

die angefragte Adresse (URI) <strong>und</strong><br />

der zurückgelieferte Status-Code. PHP-<br />

FPM kann zusätzlich aber auch die viel<br />

interessantere Ausführungszeit, die benötigte<br />

Prozessor-Belastung <strong>und</strong> den Query-<br />

String protokollieren. Man sollte deshalb<br />

gleich <strong>mit</strong> der zusätzlichen Zeile:<br />

access.format = "%R ‐ %u %t \"%m %r%Q%q\"U<br />

%s %f %{mili}d %{kilo}M %C%%"<br />

alle wichtigen Informationen zusammenstellen<br />

lassen (Abbildung 6). Wie ihr<br />

kryptischer Aufbau schon andeutet, kann<br />

man sich den Aufbau des Protokolls wie<br />

in Apache selbst zusammensetzen, die<br />

Buchstaben sind dabei Platzhalter für<br />

verschiedene Informationen. Welcher<br />

Platzhalter für welche Information steht,<br />

verraten die Kommentare in der <strong>mit</strong>gelieferten<br />

Beispiel-Datei.<br />

Optimierer<br />

Während das vorgestellte Access-Log<br />

sämtliche Anfragen aufzeichnet, landen<br />

im Slow-Log alle Anfragen, für die der<br />

PHP-Interperter zu lange benötigt hat.<br />

PHP-FPM führt ein solches Slow-Log für<br />

einen Pool, wenn man in der zugehörigen<br />

Konfigurationsdatei folgende Zeile<br />

ergänzt:<br />

slowlog = /var/log/$pool.log.slow<br />

»$pool« steht wieder für den Pool-Namen.<br />

Die folgende Zeile:<br />

request_slowlog_timeout = 30s<br />

legt dann noch fest, wann eine Anfrage<br />

zu lange in der Bearbeitung ist. In diesem<br />

Fall würde PHP-FPM eine Anfrage genau<br />

F Abbildung 7: Wie<br />

dieses Slow-Log<br />

auf deckt, verhindert<br />

eine »sleep()«-Anweisung<br />

in »info.php« die<br />

zügige Verarbeitung der<br />

Anfrage.<br />

32 Ausgabe 06-2012 Admin www.admin-magazin.de


dann im Slow-Log vermerken, wenn ein<br />

PHP-Interpreter auch nach über einer<br />

halben Minute noch keine Antwort geliefert<br />

hat (Abbildung 7). Alternativ zu<br />

»s« für Sek<strong>und</strong>en kann man die Zeit auch<br />

in Minuten (Kürzel »m«), St<strong>und</strong>en (»h«)<br />

<strong>und</strong> Tagen (»d«) angeben.<br />

Seine eigenen Probleme <strong>und</strong> interne Fehler<br />

schreibt PHP-FPM übrigens standardmäßig<br />

in die Datei »/var/log/php5‐fpm.<br />

log«. Darin findet man auch Hinweise auf<br />

fehlerhafte Konfigurationsdateien.<br />

Schwedische Gardinen<br />

Wer sich um die Sicherheit seines Webservers<br />

schert, kann alle Interpreter-<br />

Prozesse eines Pools in eine sogenannte<br />

Chroot-Umgebung stecken. Dazu genügt<br />

die Zeile:<br />

chroot = /mein/gefaengnis<br />

in der Konfigurationsdatei des Pools.<br />

Hinter dem Gleichheitszeichen steht der<br />

absolute Pfad, der dann für die Prozesse<br />

zum neuen Root-Verzeichnis wird – in<br />

diesem Beispiel »/mein/gefaengnis«.<br />

Den aktuellen Ges<strong>und</strong>heitszustand eines<br />

Pools kann man über eine spezielle<br />

Status-URL abfragen. Dazu ergänzt man<br />

in der Pool-Konfiguration (aus Listing 1)<br />

die Zeile:<br />

pm.status_path = /status<br />

Da<strong>mit</strong> erfährt man später unter »http://<br />

www.example.com/status« unter anderem,<br />

ob die Prozesse des Pools gerade<br />

laufen <strong>und</strong> wie viele Anfragen sie bereits<br />

beantwortet haben. Standardmäßig<br />

liefert PHP-FPM die Informationen als<br />

reinen Text zurück. Man kann sie sich<br />

aber auch in HTML oder XML verpacken<br />

lassen. Dazu hängt man einfach an die<br />

URL ein »?html« beziehungsweise »?xml«<br />

an. Mit der Zeile:<br />

ping.path = /ping<br />

kann man später unter »http://www.example.com/ping«<br />

schnell prüfen, ob der<br />

Pool läuft. In diesem Fall gibt PHP-FPM<br />

ein schlichtes »pong« zurück. Doch Vorsicht:<br />

Nach diesen Informationen lecken<br />

sich auch Angreifer die Finger. Man sollte<br />

die Funktion daher im produktiven Betrieb<br />

möglichst deaktiviert lassen oder<br />

zumindest den Zugriff durch den Webserver<br />

einschränken.<br />

Wenn ein Interpreter-Prozess zu lange<br />

an einem PHP-Script knabbert, beendet<br />

PHP-FPM ihn automatisch. Nach wie vielen<br />

Sek<strong>und</strong>en, legt in der Konfigurationsdatei<br />

»/etc/php5/fpm/php‐fpm.conf« die<br />

folgende Zeile fest:<br />

process_control_timeout = 10s<br />

Reagiert hier ein Prozess 10 Sek<strong>und</strong>en<br />

lang nicht, beendet PHP-FPM ihn automatisch.<br />

Auch hier gelten wieder die<br />

Abkürzungen »m« für Minuten, »h« für<br />

St<strong>und</strong>en <strong>und</strong> »d« für Tage.<br />

Parallelverarbeitung<br />

PHP-FPM stellt eine neue PHP-Funktion<br />

»fastcgi_finish_request()« bereit. Wie ihr<br />

Name schon andeutet, beendet sie die<br />

Anfrage, das Skript läuft hingegen im<br />

Hintergr<strong>und</strong> noch weiter. Ein Beispiel für<br />

ihren Praxiseinsatz zeigt Listing 3. »fastcgi_finish_request()«<br />

existiert allerdings<br />

nur in PHP-FPM, auf anderen PHP-Interpretern<br />

läuft das Skript nicht.<br />

Fazit<br />

PHP-FPM selbst erhöht die Sicherheit<br />

<strong>und</strong> skaliert gut, beschleunigt durch seine<br />

Arbeitsweise aber nicht automatisch die<br />

Auslieferungszeiten gegenüber dem herkömmlichen<br />

FastCGI-Interpreter. Die im<br />

Internet veröffentlichten beeindruckenden<br />

Zahlen vergleichen meist Apache 2<br />

inklusive »mod_php« <strong>mit</strong> einem schlanken<br />

Webserver wie Ngnix <strong>und</strong> PHP-FPM.<br />

Wer also die Antwortgeschwindigkeit<br />

insgesamt erhöhen möchte, muss noch<br />

weiter optimieren. (ofr)<br />

n<br />

Infos<br />

[1] FastCGI: [http:// www. fastcgi. com]<br />

[2] PHP-FPM: [http:// php‐fpm. org/]<br />

[3] PHP-FPM im PHP-Manual: [http:// php. net/​<br />

manual/ en/ install. fpm. php]<br />

[4] Mod-Fastcgi:<br />

[http:// www. fastcgi. com/ dist/]<br />

Der Autor<br />

Tim Schürmann ist selbstständiger Diplom-<br />

Informatiker <strong>und</strong> derzeit hauptsächlich als freier<br />

Autor unterwegs. Zu seinen Büchern gesellen<br />

sich zahlreiche Artikel, die in Zeitschriften <strong>und</strong><br />

auf Internetseiten in mehreren Ländern veröffentlicht<br />

wurden.<br />

ESET<br />

ENDPOINT<br />

LÖSUNGEN<br />

ITPROFIS VERTRAUEN<br />

AUF ESET.<br />

„Im Laufe der Jahre <strong>und</strong> Testreihen<br />

zeigte sich immer wieder, dass ESET<br />

leistungsfähige Sicherheitslösungen<br />

<strong>mit</strong> geringster Systembelastung<br />

entwickelt.“ (Andreas Clementi,<br />

Gründer <strong>und</strong> Vorsitzender bei AV-<br />

-Comparatives)<br />

Erstklassiger Schutz für Ihre<br />

Endpoints <strong>mit</strong> der mehrfach ausge-<br />

zeichneten Erkennungstechnologie,<br />

cloudbasiertem Scan, Webkontrolle<br />

<strong>und</strong> Remote Administration.<br />

www.eset.de<br />

www.admin-magazin.de<br />

Ausgabe 06-2012<br />

33


Netzwerk<br />

Mosh<br />

© Hugo Lacasse, 123RF<br />

SSH durch Mosh ergänzen<br />

Die Shell für<br />

unterwegs<br />

Lokales Echo <strong>und</strong> Netzroaming: Mosh ergänzt die bewährte SSH-Shell um<br />

Funktionen, die besonders bei instabilen <strong>und</strong> mobilen Netzverbindungen<br />

höhere Stabilität gewährleisten. Hanno Böck<br />

Es erscheint paradox: In einer Zeit, in der<br />

Netzverbindungen immer schneller werden,<br />

sind wir doch immer häufiger <strong>mit</strong><br />

instabilen Internetverbindungen konfrontiert.<br />

Außerhalb von Großstädten liefert<br />

der Surfstick häufig nur langsame EDGE-<br />

Verbindungen, <strong>und</strong> drahtlose Netzwerke<br />

auf Veranstaltungen oder in Hotels sind<br />

oft überlastet.<br />

Regelmäßige Nutzer von SSH kennen das<br />

Problem: Bei schlechter Netzverbindung<br />

hat die Secure Shell zahlreiche Macken.<br />

Führt man auf dem entfernten Host einen<br />

Befehl <strong>mit</strong> langer Ausgabe aus, etwa<br />

das Anzeigen einer umfangreichen Logdatei,<br />

lässt sich dieser <strong>mit</strong> [Strg]+[C]<br />

nicht mehr abbrechen. Der Befehl ist auf<br />

dem Host bereits ausgeführt, aber der<br />

Nutzer muss noch auf die Übertragung<br />

von möglicherweise mehreren Megabytes<br />

an Daten warten. Einen Editor über eine<br />

instabile SSH-Verbindung zu nutzen,<br />

macht wenig Freude, wenn das System<br />

auf jeden Tastendruck erst nach mehreren<br />

Sek<strong>und</strong>en reagiert.<br />

SSH-Aufsatz<br />

Abhilfe schaffen will hier Mobile Shell<br />

oder kurz genannt Mosh [1]. Ähnlich SSH<br />

bietet es einen sicheren Login auf einem<br />

entfernten Rechner, Mosh ist aber auf die<br />

Tücken mobiler Netze besser eingestellt.<br />

Dabei ersetzt Mosh SSH nicht vollständig,<br />

sondern baut darauf auf. Der Loginvorgang<br />

wird weiterhin über SSH abgewickelt,<br />

anschließend übernimmt Mosh<br />

die Kontrolle über eine UDP-Verbindung.<br />

Mosh wurde am MIT entwickelt, ist freie<br />

Software <strong>und</strong> steht unter der GNU General<br />

Public License (GPL) Version 3.<br />

Während bei SSH gr<strong>und</strong>sätzlich der gesamte<br />

Datenstrom einer Konsole übertragen<br />

wird, stellt Mosh nur den jeweils<br />

aktuellen Zustand dar. Beim eingangs<br />

erwähnten Beispiel eines Befehls <strong>mit</strong><br />

umfangreicher Ausgabe muss Mosh also<br />

nicht die gesamten Daten übertragen.<br />

Läuft der Befehl auf Serverseite schneller<br />

ab als die Ausgabedaten übertragen<br />

werden, überspringt Mosh einen Großteil<br />

der Ausgabe.<br />

Wenn Sie lokal Zeichen eintippen, werden<br />

diese vom Mosh-Client umgehend<br />

angezeigt. Auch dann, wenn die Netzverbindung<br />

gerade eine deutliche Verzögerung<br />

aufweist. Mosh versucht, vorherzuberechnen,<br />

welche Auswirkungen<br />

das Tippen auf dem entfernten Server<br />

hätte <strong>und</strong> zeigt dies bereits an. Dieses<br />

sogenannte lokale Echo arbeitet dabei<br />

nicht absolut perfekt, laut Aussagen der<br />

Entwickler liefert ihr Algorithmus in 70<br />

Prozent der Fälle eine korrekte Anzeige.<br />

36 Ausgabe 06-2012 Admin www.admin-magazin.de


Mosh<br />

Netzwerk<br />

Doch die Benutzbarkeit, etwa von Editoren,<br />

wird dadurch deutlich erhöht. Bereits<br />

eingetippte aber noch nicht übertragene<br />

Zeichen zeigt die Shell dabei unterstrichen<br />

an.<br />

Fliegender Wechsel<br />

Ein besonderes Feature von Mosh: Sogenanntes<br />

Roaming, der Wechsel zwischen<br />

verschiedenen Netzwerken, verläuft reibungslos.<br />

Wenn man etwa seinen Laptop<br />

vom Netzwerkkabel trennt <strong>und</strong> sich anschließend<br />

<strong>mit</strong> einem WLAN verbindet,<br />

bleibt eine SSH-Sitzung einfach stehen.<br />

Mosh hingegen bemerkt die fehlende<br />

Netzverbindung <strong>und</strong> zeigt eine entsprechende<br />

Meldung an (Abbildung 1). Sobald<br />

man sich <strong>mit</strong> dem WLAN verb<strong>und</strong>en<br />

hat, kann die aktuelle Sitzung sofort weitergenutzt<br />

werden.<br />

Die Installation<br />

Da es sich bei Mosh um keinen eigenen<br />

Netzwerkservice handelt, ist die Installation<br />

denkbar einfach. Auf der Serverseite<br />

muss lediglich das mosh-server Binary<br />

vorhanden sein. Alle gängigen Distributionen<br />

bieten für Mosh ein Paket an, je<br />

nach System reicht also ein einfaches<br />

»apt‐get install mosh« (Debian, Ubuntu),<br />

»yum install mosh« (Fedora) oder »zypper<br />

install mosh« (Open Suse). Eine Konfiguration<br />

ist nicht notwendig.<br />

Auf dem Clientsystem<br />

muss die<br />

Mosh-Software<br />

ebenfalls installiert<br />

werden. Eine Verbindung<br />

bauen Sie<br />

nun – ähnlich wie<br />

bei ssh – <strong>mit</strong> diesem Befehl auf:<br />

mosh username@servername.com<br />

Ein wenig komplizierter stellt sich die<br />

Situation dar, wenn man auf dem Server<br />

keine root-Rechte besitzt <strong>und</strong> so<strong>mit</strong><br />

keine systemweiten Programme installieren<br />

kann. Aber auch dann lässt sich<br />

Mosh benutzen. Sie benötigen lediglich<br />

das Binary »mosh-server« an beliebiger<br />

Stelle. Am einfachsten können Sie dieses<br />

vom Clientsystem direkt kopieren, etwa<br />

durch ein »scp /usr/bin/mosh‐server<br />

username@server.com«. Anschließend<br />

können Sie beim Login <strong>mit</strong> »mosh« den<br />

Pfad des Server-Binaries angeben: »mosh<br />

SSH<br />

SSH ist seit Langem der bevorzugte Weg,<br />

sich auf der Konsole eines Systems über das<br />

Netzwerk einzuloggen. SSH arbeitet dabei<br />

vollständig verschlüsselt – im Gegensatz zu<br />

früheren, unsicheren Protokollen wie Telnet,<br />

bei dem sämtliche Daten im Klartext übertragen<br />

werden <strong>und</strong> von einem Angreifer <strong>mit</strong>gelesen<br />

werden können. Unter freien Unix-<br />

Systemen wie Linux oder BSD kommt in der<br />

Regel OpenSSH zum Einsatz.<br />

Abbildung 1: Mosh erkennt, wenn die Netzwerkverbindung abbricht.<br />

username@server.com ‐server=/home/<br />

username/mosh‐server«.<br />

Die eben beschriebene Vorgehensweise<br />

funktioniert natürlich nur, wenn das<br />

Client-Binary auf dem Server auch läuft.<br />

Probleme können sich ergeben, wenn der<br />

Client ein 64-Bit-Linux ist, während auf<br />

dem Server noch ein 32-Bit-Linux läuft.<br />

Auch wenn auf dem Server ein ganz anderes<br />

System – etwa FreeBSD – läuft, funktioniert<br />

diese Vorgehensweise nicht. Dann<br />

kann mosh auf dem Server selbst kompiliert<br />

werden. Hierzu laden Sie das Sourcepaket<br />

herunter (aktuell »mosh‐1.2.2.tar.<br />

gz«), wechseln in das entpackte Verzeichnis,<br />

das einer etwas ungewöhnlichen Namenskonvention<br />

folgt (in der aktuellen<br />

Version »keithw‐mosh‐df955aa«).<br />

Mosh liefert kein Configure-Skript, dies<br />

erzeugen Sie <strong>mit</strong> dem Befehl »./autogen.<br />

sh«. Anschließend wird Mosh, wie bei<br />

den meisten Programmen gewohnt, <strong>mit</strong><br />

»./configure; make« kompiliert. Das Binary<br />

befindet sich anschließend im Pfad<br />

»src/frontend/mosh‐server«, es kann an<br />

beliebiger Stelle im Homedir hinterlegt<br />

<strong>und</strong> wie oben beschrieben <strong>mit</strong> dem Parameter<br />

»‐‐server« angegeben werden. E<br />

Linux-<strong>Magazin</strong><br />

ACADEMY<br />

Online-Training<br />

IT-Sicherheit Gr<strong>und</strong>lagen<br />

<strong>mit</strong> Tobias Eggendorfer<br />

Themen (Auszug):<br />

❚ physikalische Sicherheit<br />

❚ Sicherheitskonzepte<br />

❚ Sicherheitsprüfung<br />

❚ logische Sicherheit<br />

• Betriebssystem<br />

• Netzwerk<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

Deckt in Teilbereichen auch das Prüfungswissen für LPIC-303-Inhalte ab.<br />

Inklusive Benutzer- <strong>und</strong> Rechteverwaltung, Authentifizierung,<br />

ACLs sowie wichtige Netzwerkprotokolle <strong>und</strong> mehr!<br />

Das Gr<strong>und</strong>lagentraining für IT-Sicherheit richtet sich an Systemadministratoren <strong>und</strong> solche, die es<br />

werden wollen ebenso wie an ambitionierte Heimanwender. Nur 299 E inkl. 19 % MwSt.<br />

@Kirsty Pargeter, 123RF<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

Informationen <strong>und</strong> Anmeldung unter: academy.linux-magazin.de/sicherheit<br />

37


Netzwerk<br />

Mosh<br />

Mosh setzt voraus, dass auf Server <strong>und</strong><br />

Client ein System <strong>mit</strong> Unicode-Unterstützung<br />

<strong>und</strong> dem UTF-8-Zeichensatz<br />

läuft. Andere Zeichensätze werden nicht<br />

unterstützt. Auf den meisten aktuellen<br />

Systemen ist dies kein Problem, sie sind<br />

von Haus aus auf UTF-8 als Standardzeichensatz<br />

eingestellt. Ist auf dem lokalen<br />

System ein anderer Zeichensatz voreingestellt,<br />

können Sie vor dem Aufruf von<br />

mosh den Zeichensatz temporär umstellen:<br />

LC_ALL="de_DE.utf8"<br />

mosh username@server.com<br />

Mosh ist für zahlreiche Unix-Systeme verfügbar,<br />

die Webseite liefert, sofern nicht<br />

sowieso vorhanden, Pakete für gängige<br />

Linux-Distributionen, für FreeBSD <strong>und</strong><br />

auch für Mac OS X. Etwas komplizierter<br />

stellt sich die Situation unter Windows<br />

dar. Ein einfacher Windows-Client für<br />

Mosh ist bislang nicht erhältlich, lediglich<br />

eine Anleitung, wie sich das Programm<br />

unter Cygwin kompilieren lässt [2].<br />

Auch auf dem Handy<br />

Aufgr<strong>und</strong> seiner Möglichkeit zum Roaming<br />

ist Mosh natürlich besonders für<br />

mobile Anwendungen interessant. Eine<br />

Android-App ist bereits verfügbar [3],<br />

dessen Terminal-Emulator basiert auf<br />

dem Code von Irssi-Connectbot. Der<br />

Name sollte niemanden verwirren, die<br />

App lässt auch eine gewöhnliche Shellverbindung<br />

zu <strong>und</strong> ist nicht auf die Nutzung<br />

von Irssi beschränkt.<br />

Die App verbindet sich standardmäßig<br />

über gewöhnliches SSH, eine Mosh-<br />

Verbindung muss explizit ausgewählt<br />

werden. Anschließend erhalten Sie eine<br />

Shellverbindung, die beispielsweise auch<br />

dann aufrechterhalten wird, wenn Sie<br />

von einem WLAN zu einer UMTS-Verbindung<br />

wechseln.<br />

Schwieriger sieht die Situation bislang<br />

auf iPhones aus. Das lag zunächst vor allem<br />

an den restriktiven Bedingungen von<br />

Apples App Store. Dieser lässt Anwendungen<br />

unter der GPL-Lizenz nicht zu.<br />

Inzwischen haben die Mosh-Entwickler<br />

daher in ihre Lizenzbedingungen eine<br />

Klausel eingefügt, die eine Portierung für<br />

iOS möglich machen soll. Unabhängig<br />

davon arbeiten die Entwickler des kostenpflichtigen<br />

iSSH-App [4] daran, Mosh<br />

Abbildung 2: Anzeigefehler wie hier treten bei Mosh<br />

leider noch häufig auf.<br />

selbst zu implementieren. Die Funktion<br />

soll in einer der kommenden Versionen<br />

verfügbar sein.<br />

Kein Scrollback Buffer<br />

Während die Nutzung von Mosh gegenüber<br />

SSH viele Vorteile bringt, gibt es<br />

eine nicht unerhebliche Einschränkung:<br />

Das Zurückscrollen auf der Konsole <strong>mit</strong><br />

[Strg]+[PgUp], der sogenannte Scrollback<br />

Buffer, funktioniert nicht wie gewohnt.<br />

Das hängt <strong>mit</strong> der gr<strong>und</strong>legenden<br />

Funktionsweise von Mosh zusammen. Es<br />

überträgt nur den jeweils aktuellen Anzeigestand<br />

einer Konsole, der Scrollback<br />

Buffer arbeitet allerdings clientseitig <strong>und</strong><br />

ist darauf angewiesen, dass alle Daten,<br />

zu denen zurückgescrollt werden kann,<br />

auch verfügbar sind.<br />

Die Mosh-Entwickler arbeiten nach eigenen<br />

Angaben daran, in künftigen Versionen<br />

hierfür eine Lösung zu schaffen, als<br />

Abhilfe empfehlen sie die Nutzung von<br />

Screen [5] auf der Serverseite. Screen besitzt<br />

einen eingebauten Scrollback Buffer,<br />

der sich <strong>mit</strong> [Strg]+[A] <strong>und</strong> anschließendem<br />

Drücken von ] aktivieren <strong>und</strong> <strong>mit</strong><br />

[Esc] wieder verlassen lässt.<br />

Eine weitere Einschränkung, die möglicherweise<br />

manchen von einer Nutzung<br />

abhält: Mosh funktioniert bislang nur<br />

über IPv4, Unterstützung für das IPv6-<br />

Protokoll ist noch nicht vorhanden.<br />

Anzeigefehler<br />

In unseren Tests zeigte Mosh in einigen<br />

Situationen Anzeigefehler. Besonders<br />

gerne traten diese auf, wenn man sich<br />

in der untersten Zeile eines Konsolenfensters<br />

befindet <strong>und</strong> Befehle eingibt, die<br />

länger als eine Zeile sind. Dabei kam<br />

es allerdings auf die Wahl des Terminalemulators<br />

an. Unter Gnome-Terminal<br />

<strong>und</strong> Lxterminal traten besonders viele<br />

Probleme auf (Abbildung 2), auf einem<br />

echten Linux-Terminal <strong>und</strong> <strong>mit</strong> der KDEeigenen<br />

Konsole konnten wir keine Anzeigefehler<br />

feststellen.<br />

Wie sicher ist Mosh?<br />

Eine Shell-Verbindung ist ein mächtiges<br />

Werkzeug, <strong>und</strong> so ist auch das Missbrauchspotenzial<br />

groß. SSH <strong>und</strong> dessen<br />

Open-Source-Implementierung OpenSSH<br />

genießen einen sehr guten Ruf. Sicherheitsprobleme<br />

treten selten auf, das Protokoll<br />

nutzt starke kryptografische Protokolle<br />

<strong>und</strong> ist von zahlreichen Sicherheitsexperten<br />

untersucht worden. Während<br />

Mosh für das Login auf SSH aufsetzt,<br />

findet die Datenübertragung selbst <strong>mit</strong><br />

einem eigenen Protokoll statt <strong>und</strong> enthält<br />

so<strong>mit</strong> möglicherweise noch unbekannte<br />

Sicherheitsprobleme.<br />

Mosh überträgt beim Verbindungsaufbau<br />

über SSH einen Sitzungsschlüssel, der<br />

anschließend zur Verschlüsselung der eigentlichen<br />

Mosh-Daten dient. Es handelt<br />

sich um ein simples UDP-Protokoll <strong>mit</strong><br />

AES-128-Verschlüsselung im sogenannten<br />

OCB-Modus. Obwohl das Protokoll<br />

relativ einfach strukturiert ist <strong>und</strong> wenig<br />

Ansatzpunkte für Sicherheitsprobleme<br />

aufweist, weisen die Mosh-Entwickler<br />

selbst darauf hin, dass es bisher nicht<br />

von Kryptografie-Experten untersucht<br />

wurde. Sie rufen dazu auf, dass Fachleute<br />

den Quellcode <strong>und</strong> das Protokoll genau<br />

unter die Lupe nehmen. (ofr) n<br />

Infos<br />

[1] Mosh: [http:// mosh. <strong>mit</strong>. edu/]<br />

[2] Mosh via Cygwin unter Windows: [https://​<br />

gist. github. com/ 2349067]<br />

[3] Mosh unter Android: [http:// dan. drown.​<br />

org/ android/ mosh/]<br />

[4] iSSH für Apple iOS: [http:// www.​<br />

zinger‐soft. com/ iSSH_features. html]<br />

[5] Screen:<br />

[http:// www. gnu. org/ software/ screen/]<br />

Der Autor<br />

Hanno Böck ist freier Journalist <strong>und</strong> ehrenamtlicher<br />

Entwickler bei Gentoo Linux. Nebenher<br />

arbeitet er beim Webhosting-Unternehmen schokokeks.org<br />

<strong>mit</strong>, welches für den Betrieb seiner<br />

Dienste ausschließlich auf freie Software setzt.<br />

38 Ausgabe 06-2012 Admin www.admin-magazin.de


globalBusiness:<br />

weltweit mehr<br />

als 4.000 Orte<br />

verfügbar<br />

New York – Berlin zum Ortstarif:<br />

globalBusiness verbindet Sie <strong>mit</strong> der Welt.<br />

Und so geht’s: Sie erhalten von der outbox AG<br />

eine lokale Rufnummer z.B. aus New York.<br />

Alle Anrufe darauf werden umgehend auf Ihre<br />

Festnetznummer in Berlin – oder auf jedes<br />

andere beliebige Ziel – weitergeleitet. So sind<br />

Sie in Ihrem Büro in Deutschland für internationale<br />

K<strong>und</strong>en zu deren Ortstarif erreichbar.<br />

Bieten Sie Ihren K<strong>und</strong>en <strong>und</strong> Interessenten <strong>mit</strong><br />

globalBusiness diese persönliche <strong>und</strong> günstige<br />

Kontaktmöglichkeit <strong>und</strong> sichern Sie sich Ihren<br />

Wettbewerbsvorteil. Alle verfügbaren Länder<br />

<strong>und</strong> Vorwahlen im Web: www.outbox.de/admin<br />

Infos <strong>und</strong> Beratung: 0800 / 66 474 640<br />

www.outbox.de/admin


Netzwerk<br />

Remotedesktop<br />

© Phanlop Boonsongsomnukool, 123RF<br />

Remote Desktop auf Basis von HTML5<br />

Klick in die Zukunft<br />

HTML5 bietet eine Reihe neuer Funktionalitäten wie Audio, Video-Unterstützung, ohne dass dafür Plugins wie<br />

Flash oder Java nötig wären. Das eröffnet völlig neue Möglichkeiten in der Bereitstellung von Inhalten über das<br />

Web – auch für den mobilen Zugriff auf Anwendungen im LAN. Thomas Zeller<br />

Die Bedienung entfernt laufender Applikationen<br />

im Browser ist spätestens seit<br />

Google Apps nichts Besonderes mehr.<br />

Was aber, wenn eigene Anwendungen<br />

aus dem Firmen-LAN oder der heimische<br />

Desktop über das Internet bereitgestellt<br />

werden sollen? Terminalserver-Technologien<br />

wie VNC <strong>und</strong> RDP oder VDI-Lösungen<br />

wie VMware View oder Citrix<br />

Xen Desktop sind dafür die erste Wahl.<br />

In der Regel muss aber an dem Rechner,<br />

von dem aus Benutzer auf die Remote-<br />

Anwendung zugreifen wollen, auch ein<br />

entsprechender Software Client installiert<br />

werden. Traut man der eingebauten Verschlüsselung<br />

nicht, oder ist die gar nicht<br />

erst vorhanden, wird schnell auch noch<br />

ein VPN-Client für die Verschlüsselung<br />

<strong>und</strong> Authentifizierung nötig.<br />

Alles sehr ungünstig, wenn der Rechner<br />

zum Beispiel in der Hotel-Lobby oder<br />

einem Internet-Café steht, auf dem keine<br />

eigenen Anwendungen installiert werden<br />

dürfen. Diese Lücke füllen seit einigen<br />

Jahren „Clientless SSL-VPNs“, die einen<br />

Zugriff auf Remote-Anwendungen über<br />

eine sichere HTTPS-Verbindung ohne<br />

Installation eines Clients nur <strong>mit</strong> dem<br />

Browser erlauben. Allerdings stellen auch<br />

diese Lösungen zumeist spezifische Anforderungen<br />

an Browser <strong>und</strong> Plugins.<br />

Häufig wird Java, Flash oder ActiveX –<br />

evtentuell sogar in einer ganz bestimmten<br />

Version – vorausgesetzt.<br />

Besser <strong>mit</strong> HTML5<br />

Als Alternative bietet sich Guacamole [1]<br />

an, eine HTML5-Web-Applikation, die<br />

einen grafischen Zugriff über Remote-<br />

Desktop-Protokolle direkt im Browser<br />

bereitstellt, ohne dass weitere Plugins<br />

installiert werden müssen. Das Programm<br />

steht unter der AGPLv3 <strong>und</strong> unterstützt in<br />

der aktuellen Version 0.6.2 die Protokolle<br />

VNC <strong>und</strong> RDP, deren Funktionsumfang<br />

jedoch an einigen Stellen eingeschränkt<br />

ist. So können über RDP beispielsweise<br />

keine Audiodaten übertragen oder Netzlaufwerke<br />

verb<strong>und</strong>en werden.<br />

Serverseitig arbeitet die in Java geschriebene<br />

Software auf einem Apache-Server<br />

<strong>mit</strong> Servlet-Container (Apache Tomcat)<br />

<strong>und</strong> fungiert dann als Proxy, der die grafische<br />

Ausgabe von VNC <strong>und</strong> RDP in<br />

XML übersetzt <strong>und</strong> umgekehrt (Abbildung<br />

1). Die per RDP oder VNC erreichbaren<br />

Desktops können dabei entweder<br />

auf dem Application Server selbst oder<br />

auf einem anderen Rechner im Netzwerk<br />

laufen. Guacamole verspricht eine fast<br />

native Performance, bietet internationale<br />

Keyboard-Unterstützung <strong>und</strong> ein On-<br />

Screen Keyboard, <strong>mit</strong> dem Tastatureingaben<br />

auch über die Maus erfolgen können.<br />

Basis für die Funktion von Guacamole<br />

ist das Canvas-Element in HTML5, das<br />

per Javascript umfangreiche grafische<br />

Operationen vornehmen kann. Dazu ge-<br />

HTML5-fähige Browser<br />

Wer überprüfen möchte, ob <strong>und</strong> welche<br />

HTML5-Features der eigene Browser unterstützt,<br />

dem sei die HTML5-Test Site unter [2]<br />

empfohlen. Sie analysiert blitzschnell die Unterstützung<br />

einzelner Funktionen im Browser<br />

<strong>und</strong> vergibt einen Score für jedes Element.<br />

Auf diese Weise erhält man eine belastbare<br />

Einschätzung zur HTML5-Kompatibilität des<br />

eigenen Browsers. Bei den Desktop-Browsern<br />

liegt derzeit Chrome 21 <strong>mit</strong> 437 Punkten klar<br />

vorne, das Schlusslicht bildet der Internet<br />

Explorer 9 <strong>mit</strong> gerade mal 138 Punkten. Auf<br />

den mobilen Plattformen (Android, iOS, Windows<br />

Phone <strong>und</strong> andere) liegt Opera 12 auf<br />

allen Plattformen nur um zwei Punkte hinter<br />

Chrome (auf Android 4 Devices).<br />

40 Ausgabe 06-2012 Admin www.admin-magazin.de


Remotedesktop<br />

Netzwerk<br />

hört das Zeichnen von Linien,<br />

Rechtecken, Kreisbögen <strong>und</strong><br />

Bézierkurven, aber auch die<br />

Darstellung von Farbverläufen,<br />

Transparenz, Text <strong>und</strong><br />

vor allem auch das Skalieren<br />

von Grafiken der Formate<br />

PNG, JPG <strong>und</strong> GIF. Ideale Voraussetzungen<br />

also, um einen<br />

Desktop <strong>mit</strong>samt Anwendungen<br />

im Browser darzustellen.<br />

Voraussetzung ist dann lediglich<br />

ein Browser, der das<br />

Canvas-Element unterstützt.<br />

Das können die meisten aktuellen<br />

Browser (vom Internet<br />

Explorer 8 <strong>und</strong> 9 einmal abgesehen)<br />

bereits heute, obwohl<br />

das W3C davon ausgeht, dass<br />

HTML5 erst bis 2014 wirklich<br />

breite Unterstützung erfährt.<br />

Guacamole installieren<br />

Glücklicherweise hält die Guacamole<br />

Website bereits vorgefertigte Pakete für<br />

einige Distributionen bereit. Unter [1] finden<br />

Sie Pakete für Debian 6.0 (Squeeze),<br />

Ubuntu 11.10/​12.04 <strong>und</strong> Fedora 15/​16/​<br />

17. Alternativ kann man Guacamole natürlich<br />

auch aus den Sourcen unter [3]<br />

selbst kompilieren. Für einen Test soll<br />

Guacamole 0.6.2 auf einem aktuellen<br />

(12.04.1 LTS) Ubuntu-System installiert<br />

werden. Dazu müssen zunächst noch die<br />

Voraussetzungen für den Java-, VNC- <strong>und</strong><br />

RDP-Support geschaffen werden, was so<br />

rasch erledigt ist:<br />

sudo apt‐get install tomcat6 U<br />

libvncserver0 libfreerdp1<br />

Anschließend laden Sie die Pre-Build-<br />

Pakete für Ubuntu 12.04 von der Guacamole-Projektseite<br />

bei SourceForge herunter<br />

<strong>und</strong> entpacken den Inhalt des Archivs<br />

in Ihrem Homeverzeichnis. Wechseln Sie<br />

nun in das neue Verzeichnis<br />

cd guacamole‐0.6.2‐ubuntu‐12.04‐i386<br />

Abbildung 1: Die Skizze zeigt das Funktionsschema von Guacamole <strong>und</strong> die<br />

Kommunikation <strong>mit</strong> RDP- oder VNC-Servern.<br />

<strong>und</strong> installieren Sie die Guacamole-Pakete.<br />

Das erledigt der folgende Einzeiler:<br />

sudo dpkg ‐i guacd_*.deb guacamole_*.debU<br />

libguac3_*.deb libguac‐client‐vnc0_*.debU<br />

libguac‐client‐rdp0_*.deb<br />

Möchten Sie lediglich VNC-Verbindungen<br />

im Browser verfügbar machen, können<br />

Sie auf die Installation des Paketes<br />

»libguac‐client‐rdp0_*.deb« verzichten.<br />

Der Tomcat-Server benötigt nun noch<br />

zwei symbolische Links zu den Dateien<br />

»guacamole.war« and »guacamole.properties«.<br />

Außerdem muss der User »tomcat6«<br />

noch der neuen Gruppe »guacamole‐web«<br />

hinzugefügt werden, was durch Einspielen<br />

des Paketes<br />

sudo dpkg ‐i guacamole‐tomcat_*.deb<br />

automatisch erledigt wird. Die manuelle<br />

Vorgehensweise wird alternativ auf der<br />

Guacamole Projekt-Website beschrieben.<br />

Abschließend ist ein Neustart des Tomcat-<br />

Servers fällig, wählen Sie dazu einfach<br />

»Ja« in der folgenden Abfrage (Abbildung<br />

2), oder starten Sie den Tomcat-Server<br />

auf der Kommandozeile neu:<br />

sudo /etc/init.d/tomcat6 restart<br />

Da<strong>mit</strong> der Zugriff über Guacamole<br />

auf den Desktop gelingt,<br />

muss natürlich zunächst<br />

auch ein Desktop freigegeben<br />

werden. Für den Test soll der<br />

Desktop auf einem Windows-<br />

7-PC über das RDP-Protokoll<br />

freigegeben werden. Natürlich<br />

funktioniert das ebenso <strong>mit</strong><br />

einem echten Windows-Terminalserver<br />

oder einem Rechner,<br />

auf dem der Desktop per<br />

VNC-Server freigegeben ist.<br />

Zugriffsschutz<br />

Jetzt müssen Sie die Credentials<br />

für den Remote-Desktop<br />

noch Guacamole bekannt geben,<br />

da<strong>mit</strong> der Zugriff auch<br />

über den Browser gelingt. Dazu bearbeiten<br />

Sie die Datei »/etc/guacamole/<br />

user‐mapping.xml« (Abbildung 3)<br />

sudo vi /etc/guacamole/user‐mapping.xml<br />

Dort tragen Sie im Abschnitt:<br />

<br />

die entsprechenden Daten ein. Entfernen<br />

Sie dazu zunächst die Kommentarzeichen<br />

»«.<br />

Im Beispiel soll es eine Verbindung für<br />

den User »tom« <strong>mit</strong> dem Passwort »test«<br />

auf dem Windows-System <strong>mit</strong> der IP-<br />

Adresse 192.168.1.11 geben (Listing 1).<br />

Nutzen Sie lieber VNC, ersetzen Sie »rdp«<br />

in der Protocol-Sektion einfach durch<br />

»vnc«. Das Passwort für den VNC-Server<br />

landet dann im Abschnitt<br />

MeinVNCPasswordU<br />

<br />

Speichern Sie jetzt die Konfigurationsdatei,<br />

<strong>und</strong> starten Sie »guacd« neu:<br />

sudo /etc/init.d/guacd restart<br />

Stellen Sie sicher, dass der Rechner, den<br />

Sie in »user‐mapping.xml« eingetragen<br />

Abbildung 2: Das Einspielen der Pakete von der Guacamole-Website aktiviert auf dem Ubuntu-System<br />

anschließend ein Skript, das den Tomcat-Server konfiguriert.<br />

Listing 1: User-Mapping<br />

01 <br />

02 rdp<br />

03 192.168.1.11<br />

04 3389<br />

05 <br />

06 <br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

41


Netzwerk<br />

Remotedesktop<br />

daher Eigentümer <strong>und</strong> Rechte der Datei<br />

»user‐mapping.xml« wie folgt ändern:<br />

sudo chown tomcat6.tomcat6 user‐U<br />

mapping.xml<br />

sudo chmod 640 user‐mapping.xml<br />

Abbildung 3: Benutzer, die über HTTP auf grafische Desktops zugreifen dürfen, werden in der zentralen<br />

Konfigurationsdatei »user‐mapping.xml« eingetragen.<br />

Alternativ bietet Guacamole im Config-<br />

File auch die Möglichkeit, nur gehashte<br />

Passworte anzulegen. Das nachfolgende<br />

Beispiel zeigt die entsprechende Sektion<br />

der »user‐mapping.xml« für den Benutzer<br />

»tom« <strong>und</strong> dem <strong>mit</strong> MD5 gehashten Passwort<br />

»GEHEIM« (Listing 2).<br />

Der Hash eines Passworts lässt sich <strong>mit</strong><br />

dem Hilfsprogramm »md5sum« auf der<br />

Kommandozeile schnell anzeigen:<br />

echo ‐n PASSWORD | md5sum ‐t<br />

319f4d26e3c536b5dd871bb2c52e3178 ‐<br />

haben, über das entsprechende Protokoll<br />

erreichbar ist, <strong>und</strong> rufen Sie dann<br />

im Webbrowser die Adresse »http://<br />

IP‐Adresse:8080/guacamole« auf. Nach<br />

erfolgreicher Authentifizierung <strong>mit</strong> dem<br />

festgelegten Benutzernamen <strong>und</strong> Passwort<br />

sollte nun die Anmeldung am Desktop<br />

des Zielsystems im Browserfenster<br />

angezeigt werden (Abbildung 4). Dort<br />

können Sie sich dann <strong>mit</strong> Ihren Windows-Credentials<br />

anmelden.<br />

Guacamole stellt eine einfache Zwischenablage<br />

für den Austausch von Texten zwischen<br />

Remote-Rechner <strong>und</strong> dem lokalen<br />

System sowie eine Bildschirmtastatur<br />

zur Verfügung (Abbildung 5), wenn Sie<br />

den Mauszeiger in Richtung Adresszeile<br />

des Browsers bewegen. Dort können Sie<br />

dem Remote-Rechner im Bedarfsfalle<br />

auch ein [Strg]+[Alt]+[Entf] schicken<br />

oder die Remote-Sitzung <strong>mit</strong> Guacamole<br />

beenden.<br />

Kleine Unsicherheiten<br />

Das Default-Setup von Guacamole ist<br />

zwar funktionsfähig aber alles andere als<br />

sicher, denn der Zugriff auf die Login-<br />

Seite erfolgt unverschlüsselt. Es empfiehlt<br />

sich daher dringend, Tomcat <strong>mit</strong><br />

SSL-Unterstützung zu installieren. Wie<br />

das geht, verrät die ausführliche Tomcat-<br />

Dokumentation unter [4]. Unschön ist<br />

auch, dass das Passwort für den Verbindungsaufbau<br />

zum RDP-Server <strong>und</strong><br />

– im Falle einer VNC-Verbindung auch<br />

das VNC-Passwort – im Klartext in der<br />

Konfigurationsdatei »user‐mapping.xml«<br />

stehen <strong>und</strong> von angemeldeten Benutzern<br />

ausgelesen werden können. Sie sollten<br />

Diesen Hashwert übernehmen Sie anstelle<br />

des Passworts in die Konfiguration.<br />

Natürlich sollte das gehashte Passwort<br />

länger als acht Zeichen <strong>und</strong> <strong>mit</strong> Sonderzeichen<br />

möglichst sicher gewählt sein<br />

– einfache Passworte errechnen Brute-<br />

Force Cracker wie »mdcrack« ansonsten<br />

binnen weniger Minuten.<br />

Sophos UTM 9.0 <strong>mit</strong> HTML5<br />

VPN Portal<br />

Wer den Aufwand für die Einrichtung<br />

<strong>sicherer</strong> Verbindungen <strong>mit</strong> Guacamole<br />

scheut, kann natürlich auch zu kommerzieller<br />

Software greifen. So bietet<br />

beispielsweise die aktuelle Version der<br />

Sophos UTM 9.0 Firewall (früher Astaro<br />

Security Gateway) ebenfalls ein HTML5-<br />

Portal, <strong>mit</strong> dem man von extern kom-<br />

Abbildung 4: Desktop im Browser: Dank HTML5 sind keine Plugins für den<br />

grafischen Zugriff auf Desktops im Browser erforderlich.<br />

Abbildung 5: Guacamole bietet neben einem eigenen (Text) Clipboard eine Bildschirmtastatur,<br />

<strong>mit</strong> der sich Texteingaben auch <strong>mit</strong> der Maus erledigen lassen.<br />

42 Ausgabe 06-2012 Admin www.admin-magazin.de


Remotedesktop<br />

Netzwerk<br />

fortabel <strong>und</strong> ohne Client-Installation<br />

schnell auf Dienste im LAN zugreifen<br />

kann. Neben RDP <strong>und</strong> VNC unterstützt<br />

Sophos darüber hinaus Verbindungen zu<br />

Telnet- <strong>und</strong> SSH-Servern sowie HTTP<strong>und</strong><br />

HTTPS-Verbindungen. Im Gesamtkonzept<br />

spielt der HTML5-Remote-Access<br />

bei Sophos UTM aber eher eine untergeordnete<br />

Rolle. Denn auch hier kann man<br />

über RDP beispielsweise keine Laufwerke<br />

des Clients mappen.<br />

Volles Programm<br />

Für den vollständig transparenten Remote-Netzwerkzugriff<br />

stellt Sophos<br />

UTM <strong>mit</strong> IPSEC-, SSL-, PPTP- <strong>und</strong> L2TP-<br />

VPN Servern gewichtige Alternativen<br />

bereit. Das HTML5-Portal ist <strong>mit</strong> seiner<br />

reinen KVM-Übertragung (Keyboard Video<br />

Mouse) auch eher für gelegentliche<br />

Fernwartungssitzungen externer Dienstleister<br />

gedacht, die keinen vollwertigen<br />

VPN-Zugang bekommen sollen.<br />

Sophos bietet UTM 9.0 als Hardware-<br />

Appliance, virtuelle Appliance oder als<br />

Software Appliance zur Installation auf<br />

eigener Hardware an. Software- <strong>und</strong> virtuelle<br />

Appliance stehen auf dem FTP-<br />

Server [5] zum Download bereit.<br />

Für den privaten, nicht-kommerziellen<br />

Einsatz gewährt Sophos gegen Registrierung<br />

eine kostenfreie „Home-Use<br />

License“ für bis zu 50 IP-Adressen (Endpoint<br />

Antivirus 10 User), die den vollen<br />

Funktionsumfang der kommerziellen<br />

Ausgabe enthält. Dieser umfasst die folgenden<br />

Module:<br />

n Network Security: Paketfilter, VPN,<br />

Intrusion Protection<br />

n Web Security: URL-Filter, Application<br />

Control, Antivirus <strong>mit</strong> HTTP-, HTTPS-,<br />

<strong>und</strong> FTP-Proxy<br />

n Mail Security: Antispam, Antivirus <strong>mit</strong><br />

SMTP + POP3-Proxy<br />

n Web Server Security: Web Application<br />

Firewall gegen Cross-Site-Scripting<br />

Attacken, SQL-Injection <strong>und</strong> so weiter<br />

rz lam-0018 Anzeige_210x148:la1 lam-0010 Anzeige_210x148 18.08.2010 15:26 Uhr Seite 1<br />

n Wireless Security: WLAN Controller<br />

für Sophos Access Points<br />

n Endpoint AntiVirus: Antivirus <strong>und</strong> Gerätekontrolle<br />

für Windows Clients<br />

Um eine Lizenz abzurufen, registrieren<br />

Sie sich zunächst unter [6], <strong>und</strong> loggen<br />

Sie sich dann <strong>mit</strong> Ihren Zugangsdaten<br />

ein. Die kostenfreie Lizenz finden Sie<br />

dann unter „View License / Home Use<br />

License“.<br />

Sophos UTM 9.0 <strong>und</strong> User-<br />

Portal einrichten<br />

Dank vorgefertigter Images für VMware<br />

ist die Inbetriebnahme einer Sophos UTM<br />

9.0 <strong>mit</strong> HTML5-Portal, zum Beispiel <strong>mit</strong><br />

dem VMware-Player, VMware-Workstation<br />

oder einem ESX-Server, schnell erledigt.<br />

Wer die virtuelle Maschine lieber<br />

in einer Virtualbox betreiben möchte,<br />

lädt statt der virtuellen Appliance das<br />

ISO-Image herunter <strong>und</strong> bindet es als<br />

Bootmedium in einer manuell erzeugten<br />

„Es gibt drei Möglichkeiten, eine Firma zu ruinieren:<br />

<strong>mit</strong> Frauen, das ist das Angenehmste;<br />

<strong>mit</strong> Spielen, das ist das Schnellste;<br />

<strong>mit</strong> Computern, das ist das Sicherste.“<br />

Oswald Dreyer-Eimbcke, deutscher Unternehmer<br />

Es gibt allerdings auch eine ganze Reihe von Möglichkeiten, <strong>mit</strong> IT zum Unternehmenserfolg beizutragen.<br />

Und genau da<strong>mit</strong> beschäftigen wir uns seit dem Jahr 1989. In weit über 100.000 St<strong>und</strong>en IT-Training,<br />

technischem Consulting <strong>und</strong> 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 06-2012<br />

43


Netzwerk<br />

Remotedesktop<br />

nun noch für alle oder nur bestimmte<br />

User <strong>und</strong> Netze freigeben beziehungsweise<br />

einschränken. Die Verbindung ist<br />

jetzt einsatzbereit. Der oder die berechtigten<br />

User können sich nun am User-Portal<br />

anmelden, das sie über die URL »https://<br />

Externe‐IP‐Adresse« erreichen. Nach erfolgreicher<br />

Authentifizierung genügt ein<br />

Klick auf »HTML5‐VPN‐Portal« <strong>und</strong> dann<br />

auf die Schaltfläche »Verbinden« neben<br />

zuvor konfigurierten Verbindungen.<br />

Schnittstellen<br />

01 <br />

05 vnc<br />

06 localhost<br />

07 5900<br />

08 123456<br />

09 <br />

Das HTML5-VPN-Portal ist in das sogenannte<br />

User-Portal integriert, über das<br />

Benutzer auch andere Funktionen nutzen<br />

können, etwa die eigene Spam-Quarantäne<br />

einsehen, vorkonfigurierte VPN-<br />

Clients herunterladen <strong>und</strong> eben auch auf<br />

das HTML5 VPN Portal zugreifen. Im<br />

ersten Schritt aktivieren Sie daher das<br />

User-Portal unter »Management / User<br />

Portal«, das sich auch auf einzelne Netze<br />

<strong>und</strong> Benutzer einschränken lässt.<br />

Natürlich sollen die Benutzer auch aus<br />

dem Internet auf das User-Portal zugreifen<br />

können. Tragen Sie unter »Allowed<br />

networks« daher einfach »AnyIPv4« ein,<br />

<strong>und</strong> setzen Sie das Häkchen bei »Allow all<br />

Users«. Legen Sie nun unter »Definitions<br />

& Users / Users & Groups« die Benutzer<br />

an, die später Zugang zum User-Portal<br />

erhalten sollen. Jetzt aktivieren Sie das<br />

HTML5 VPN Portal unter »Remote Access<br />

/ HTML5 VPN Portal / Enable«, <strong>und</strong> legen<br />

Sie die Verbindungen zu den internen<br />

Diensten an. Dazu klicken Sie auf »New<br />

HTML5 VPN Portal connection«, tragen<br />

einen Namen für die Verbindung ein <strong>und</strong><br />

wählen das Protokoll, zum Beispiel »Remote<br />

Desktop« aus (Abbildung 6).<br />

Optional können Sie auch gleich die<br />

Credentials hinterlegen, dann wird der<br />

Benutzer über das HTML5 VPN Portal<br />

später direkt <strong>mit</strong> dem Terminalserver<br />

eingeloggt. Das ist praktisch, denn wer<br />

möchte schon einem Externen seinen Administrator<br />

Account anvertrauen. Weiter<br />

unten können Sie die neue Verbindung<br />

Weitere HTML5 Remote Desktops<br />

Der Vollständigkeit halber sollen hier noch<br />

zwei weitere interessante Projekte erwähnt<br />

werden, die sich für die Bereitstellung von<br />

Remote-Desktops ebenfalls der HTML5-Technik<br />

bedienen.<br />

n ThinVNC [8] ist ein kommerzieller VNC-<br />

Server (leider nur für Windows) <strong>mit</strong> integrierter<br />

SSL-Verschlüsselung <strong>und</strong> NTLM-<br />

Authentifizierung.<br />

n noVNC [9] ist ein unter LGPLv3 veröffentlichter<br />

HTML5-VNC-Client, der serverseitig<br />

einen VNC-Server <strong>mit</strong> Websockets-Unterstützung<br />

voraussetzt.<br />

Abschließend sei noch erwähnt, dass Sophos<br />

UTM 9.0 als Backend-System eine<br />

breite Palette von Authentifizierungslösungen,<br />

darunter LDAP, Active Directory<br />

Single Sign On, Novell eDirectory <strong>und</strong><br />

RADIUS unterstützt. Da die meisten Hersteller<br />

von Two-Factor-Authentifizierungslösungen<br />

(zum Beispiel Vasco Digipass<br />

[7]) die universelle Radius-Schnittstelle<br />

nutzen, lässt sich der Zugang zum User-<br />

Portal leicht um eine Zugangssicherung<br />

<strong>mit</strong> Tokens erweitern. (ofr)<br />

n<br />

Infos<br />

[1] Guacamole: [http:// www. guac‐dev. org]<br />

[2] HTML5 Test Suite:<br />

[http:// www. html5test. com]<br />

[3] Guacamole-Quellcode:<br />

[http:// sourceforge. net/ projects/<br />

guacamole/ files/ current/ source/]<br />

[4] Tomcat SSL-Howto: [http:// tomcat. apache.​<br />

org/ tomcat‐6. 0‐doc/ ssl‐howto. html]<br />

[5] Astataro UTM:<br />

[ftp:// ftp. astaro. com/ UTM/ v9/]<br />

[6] Astaro-Anmeldung:<br />

[https:// my. astaro. com]<br />

[7] Digipass: [http:// www. vasco. com/ de/​<br />

products/ digipass/ digipass_index. aspx]<br />

[8] ThinVNC:<br />

[http:// www. cybelesoft. com/ thinvnc/]<br />

[9] NoVNC:<br />

[http:// kanaka. github. com/ noVNC/]<br />

Der Autor<br />

Thomas Zeller ist IT-Consultant <strong>und</strong> beschäftigt<br />

sich seit 15 Jahren <strong>mit</strong> IT-Sicherheit <strong>und</strong> Open<br />

Source. Er ist Autor / Co-Autor der Bücher „Open-<br />

VPN kompakt“ <strong>und</strong> „Mindmapping <strong>mit</strong> Freemind“.<br />

Im richtigen Leben ist er Geschäftsführer eines<br />

<strong>mit</strong>telständischen IT-Systemhauses <strong>und</strong> ist dort<br />

auch für den Geschäftsbereich IT-Sicherheit verantwortlich.<br />

44 Ausgabe 06-2012 Admin www.admin-magazin.de


<strong>RAID</strong>-Systeme<br />

<strong>RAID</strong>-Level<br />

© Nasir Khan, 123RF<br />

Die Gr<strong>und</strong>lagen der <strong>RAID</strong>-Technologie<br />

Abgesichert<br />

eine um wenigstens eine Größenordnung<br />

bessere Performance <strong>und</strong> Zuverlässigkeit<br />

bei geringeren Kosten dank des von ihnen<br />

entwickelten neuen Arrays aus billigen,<br />

kleinen Platten, dem <strong>RAID</strong> (Red<strong>und</strong>ant<br />

Array of Inexpensive Disks).<br />

Wie funktioniert eigentlich ein <strong>RAID</strong>? Welches Level eignet sich für welchen<br />

Einsatzfall, <strong>und</strong> was kann man tun, um gerade bei großen <strong>RAID</strong>-Sets<br />

das Risiko eines Datenverlusts zu minimieren? Dieser Gr<strong>und</strong>lagenartikel<br />

gibt die Antworten. Jens-Christoph Brendel<br />

Wo wären wir heute ohne <strong>RAID</strong>? Man<br />

kann das erahnen, wenn man auf die Zeit<br />

schaut, als es nur große Einzelplatten<br />

für Mainframes gab (sogenannte SLEDs,<br />

Single Large Expensive Disks): Mitte der<br />

50er bis Ende der 80er-Jahre des letzten<br />

Jahrh<strong>und</strong>erts. Vielleicht würden wir <strong>mit</strong><br />

der heutigen Speicherdichte ein paar Dutzend<br />

Terabyte auf die damals üblichen<br />

großen Scheiben schreiben können, aber<br />

die Probleme, die es schon vor einem<br />

Vierteljahrh<strong>und</strong>ert da<strong>mit</strong> gab, wären<br />

nach wie vor akut.<br />

Denn die großen Riesenplatten<br />

waren zwar recht zuverlässig,<br />

dafür aber extrem<br />

teuer, <strong>und</strong> ihre I/​O-Leistungen<br />

blieben deutlich hinter den<br />

Fortschritten bei der CPU<strong>und</strong><br />

Memory-Performance<br />

zurück. Als es später kleinere<br />

<strong>und</strong> billigere Laufwerke für<br />

die damals neuen PCs gab,<br />

konnte man die zunächst nur<br />

in schlichten Sammlungen<br />

(JBOD, „just a bunch of disks“) einsetzen<br />

oder einfach hintereinander schalten<br />

(disk spanning). Das schloss aber die<br />

Schere bei der I/​O-Performance nicht <strong>und</strong><br />

bescherte stattdessen große Verwaltungsprobleme,<br />

wenn es um das Management<br />

des freien Platzes oder das Auffinden einzelner<br />

Files ging.<br />

Deshalb machten sich 1988 drei Forscher<br />

der University of California (David A.<br />

Patterson, Garth Gibson, <strong>und</strong> Randy H.<br />

Katz) Gedanken über ein alternatives<br />

Konzept. Ihre Ergebnisse [1] versprachen<br />

Data Disk 1 Data Disk 2 Parity Disk<br />

1 0 1 1 0 1 1 1 0 0 1 1<br />

0: Bitsumme ungerade<br />

1: Bitsumme gerade<br />

Abbildung 1: Paritätsberechnung bei <strong>RAID</strong> 3: Die Paritätsplatte vermerkt, ob die<br />

Summe der Datenbits an dieser Position gerade oder ungerade ist.<br />

<strong>RAID</strong> 0 <strong>und</strong> 1<br />

Die ursprüngliche Veröffentlichung beschrieb<br />

die <strong>RAID</strong>-Level 1 bis 5. Heute<br />

kennt man außerdem noch die Level<br />

<strong>RAID</strong> 0 <strong>und</strong> 6 <strong>und</strong> einige weitere. Das<br />

<strong>RAID</strong> Level 0, das einfache Striping,<br />

kennt aber keine Red<strong>und</strong>anz <strong>und</strong> widerspricht<br />

daher eigentlich dem eigenen Namen<br />

<strong>RAID</strong> (Red<strong>und</strong>ant Array …). Beim<br />

Striping werden die Daten in Abschnitte<br />

aufgeteilt (Stripes), die wechselweise auf<br />

die beteiligten Platten geschrieben werden.<br />

So kann man im besten Fall auf<br />

alle Platten parallel zugreifen. Die Größe<br />

der Abschnitte (Chunk Size) ist konfigurierbar<br />

<strong>und</strong> steht in Beziehung zur<br />

vorherrschenden Dateigröße. Eine große<br />

Chunk Size bei kleinen Dateien würde<br />

eine geringere Verteilung über<br />

die Platten bewirken, da<strong>mit</strong><br />

auch weniger von der Parallelität<br />

der Zugriffe profitieren,<br />

dafür unter Umständen aber<br />

die Datensicherheit etwas<br />

erhöhen, weil jede verteilte<br />

Datei rettungslos verloren ist,<br />

sobald eine der beteiligten<br />

Platten ausfällt. Passt sie dagegen<br />

komplett in einen Stripe<br />

auf einer Platte, ist sie sicher,<br />

46 Ausgabe 06-2012 Admin www.admin-magazin.de


<strong>RAID</strong>-Level<br />

<strong>RAID</strong>-Systeme<br />

wenn eine andere Platte ausfällt.<br />

Wegen der Anfälligkeit für Datenverlust<br />

eignet sich reines Striping<br />

auch nur für Daten, auf die man<br />

notfalls verzichten könnte: Es bietet<br />

gute Perfomance auf Kosten der<br />

Sicherheit.<br />

Sicher <strong>und</strong> teuer<br />

Das Raid Level 1 steht für eine<br />

Spiegelung (Mirroring): Alle Daten<br />

werden parallel auf zwei Laufwerke<br />

geschrieben. Fällt eine Platte aus, kann<br />

<strong>mit</strong> der anderen ohne Verzögerung <strong>und</strong><br />

Datenverlust weitergearbeitet werden.<br />

Unter der Voraussetzung, dass die beiden<br />

Spiegelhälften an verschiedene Kanäle<br />

des <strong>RAID</strong>-Controllers angeschlossen<br />

sind, kann sich die Lesegeschwindigkeit<br />

im Idealfall verdoppeln, das Schreiben<br />

ist höchstens so schnell wie auf eine<br />

einzelne Platte. Der größte Nachteil der<br />

Spiegelung besteht aber darin, dass sich<br />

die Kosten der Datenhaltung verdoppeln:<br />

Zum Preis von zwei Platten erhält man<br />

die Kapazität von einer. Da<strong>mit</strong> eignet<br />

sich eine einfache Spiegelung vor allem<br />

für besonders schutzwürdige Daten, die<br />

hauptsächlich gelesen werden.<br />

Aus der Mode: Die Parity<br />

Disk<br />

Die hohen Kosten der Spiegelung vermeiden<br />

die folgenden <strong>RAID</strong>-Level dadurch,<br />

dass sie die Red<strong>und</strong>anz etwas vermindern<br />

<strong>und</strong> statt durch Verdopplung der<br />

Schreiboperationen durch Berechnung<br />

eines Paritätswerts erreichen. Wie das<br />

genau funktioniert, wird für die heute<br />

gebräuchlichen Verfahren weiter unten<br />

demonstriert.<br />

Das <strong>RAID</strong>-Level 2 spielt heute keine<br />

Rolle mehr, es kam überhaupt nur in<br />

der Großrechnerwelt zum Einsatz. Es erzeugt<br />

die Red<strong>und</strong>anz durch einen nach<br />

seinem Erfinder Hamming benannten<br />

linearen fehlerkorrigierenden Blockcode,<br />

der ursprünglich entwickelt wurde, um<br />

die Lesefehler von Lochkarten zu bereinigen.<br />

Dabei werden in einem aufwändigen<br />

Verfahren Paritycodes über einem<br />

Datenblock fixer Länge berechnet, <strong>mit</strong><br />

denen sich Einzelbitfehler korrigieren<br />

lassen. Eine Besonderheit des Verfahrens<br />

ist, dass die Anzahl der Platten ein ganz-<br />

Stripe 1<br />

Stripe 2<br />

Stripe 3<br />

Stripe 4<br />

Drive 1 Drive 2 Drive 3 Drive 4<br />

0100 0101 0010 0011<br />

0010 0000 0110 0100<br />

0011 0001 1010 1000<br />

0110 0001 1101 1010<br />

Abbildung 2: Schema eines <strong>RAID</strong>-5-Verb<strong>und</strong>es. Die gelben<br />

Felder enthalten die Paritätsinformationen, die sich durch XOR-<br />

Verknüpfung der anderen Segmente des Stripe ergeben.<br />

zahliges Vielfaches der Hamming-Codewortlänge<br />

sein muss. Deshalb wurden in<br />

der Praxis zumeist <strong>RAID</strong>-2-Verbünde <strong>mit</strong><br />

mindestens zehn Platten benutzt.<br />

Auch <strong>RAID</strong> 3 ist heute weitgehend vom<br />

Markt verschw<strong>und</strong>en: Dahinter verbirgt<br />

sich ein Striping (wie bei <strong>RAID</strong> 0), jedoch<br />

<strong>mit</strong> zusätzlicher Absicherung durch Paritätsinformationen<br />

auf einer extra Parity<br />

Disk. Auf der Parity Disk wird bitweise<br />

vermerkt, ob über alle Datenplatten die<br />

Summe aller Datenbits an einer bestimmten<br />

Position gerade oder ungerade ist (Abbildung<br />

1). Fällt nun<br />

eine Datenplatte aus,<br />

ist für jede Bitposition<br />

klar, ob die Summe aller<br />

verbliebenen Bits<br />

an dieser Stelle <strong>mit</strong><br />

einer »0« oder »1« ergänzt<br />

werden muss,<br />

da<strong>mit</strong> der gemerkte<br />

Zustand wieder erreicht<br />

wird. Fällt also<br />

beispielsweise von den<br />

beiden Datenplatten in<br />

Abbildung 1 die zweite<br />

Platte aus, dann kombiniert<br />

der Controller<br />

beispielsweise für das<br />

letzte Bit der gezeigten<br />

Vierergruppe den Wert<br />

»1« von der verbliebenen<br />

Data Disk 1 <strong>mit</strong> der<br />

»1« der Paritätsplatte,<br />

die anzeigt, dass die<br />

Bitsumme gerade sein<br />

muss. Es ergibt sich »1<br />

+ [0 oder 1]? = gerade<br />

Zahl« <strong>und</strong> da<strong>mit</strong><br />

ist un<strong>mit</strong>telbar klar,<br />

dass an der unleserlichen<br />

Bitposition eine<br />

»1« gestanden haben<br />

muss. Das Verfahren<br />

ist im Übrigen nur eine andere Formulierung<br />

für die unten beschriebene<br />

XOR-Verknüpfung.<br />

Der Vorteil von <strong>RAID</strong> 3 ist, dass<br />

für beliebig viele Datenplatten immer<br />

nur eine Partitätsplatte nötig<br />

ist. Das ist aber zugleich auch der<br />

größte Nachteil, denn diese Parity<br />

Disk wird für jede Schreiboperation<br />

benötigt <strong>und</strong> so zum Flaschenhals.<br />

<strong>RAID</strong> 4: Gut <strong>mit</strong> Cache<br />

Eine leichte Verbesserung gegenüber<br />

<strong>RAID</strong> 3 brachte das heute allerdings<br />

auch weitgehend ungebräuchliche <strong>RAID</strong><br />

4: Es verwendet ebenfalls eine extra<br />

Paritätsdisk <strong>mit</strong> denselben Nachteilen,<br />

beschreibt die Datenplatten aber in größeren<br />

Blöcken (Chunks). Der Nachteil<br />

der Paritätsplatte lässt sich deutlich abmildern,<br />

wenn ein NVRAM-Cache die<br />

Schreiboperationen puffert <strong>und</strong> zusammenfasst.<br />

In dieser Konstellation nutzt<br />

NetApps eigenes Filesystem WAFL (Write<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

47


<strong>RAID</strong>-Systeme<br />

<strong>RAID</strong>-Level<br />

Anywhere File Layout) noch heute einen<br />

verwandten Algorithmus von <strong>RAID</strong> 4 <strong>mit</strong><br />

einem zweiten Laufwerk für Paritätsdaten:<br />

Raid DP. Der Artikel kommt weiter<br />

unten darauf zurück.<br />

<strong>RAID</strong> 5<br />

<strong>RAID</strong> 5 übernimmt die blockweise Datenablage<br />

von <strong>RAID</strong> 4, verteilt aber die<br />

Paritätsinformationen über alle Platten,<br />

statt sie auf einer zu konzentrieren. Dadurch<br />

werden auch die Schreibzugriffe<br />

verteilt <strong>und</strong> parallelisiert <strong>und</strong> der Bottleneck<br />

einer Paritätsdisk vermieden. Allerdings<br />

erfordert <strong>RAID</strong> 5 zwei Lese- <strong>und</strong><br />

zwei Schreiboperationen pro Schreibanforderung,<br />

was die Schreibperformance<br />

zwangsläufig bremst.<br />

Abbildung 2 zeigt den schematischen<br />

Aufbau eines <strong>RAID</strong>-5-Verb<strong>und</strong>s. Die Daten<br />

sind darin in sogenannten Stripes<br />

abgelegt. Das sind aufeinander folgende<br />

Segmente auf verschiedenen physischen<br />

Datenträgern (Disks). Jeder Stripe zieht<br />

sich über alle 4 Platten. Die Segmente<br />

<strong>mit</strong> weißem Hintergr<strong>und</strong> enthalten die<br />

eigentlichen Daten, die Segmente <strong>mit</strong> gelbem<br />

Hintergr<strong>und</strong> die Paritätsinformationen.<br />

Zu sehen ist, dass die Paritätsdaten<br />

wie beschrieben gleichmäßig über alle<br />

Laufwerke verteilt sind.<br />

Die Paritätsdaten errechnen sich aus<br />

den Nutzdaten durch eine sogenannte<br />

XOR-Verknüpfung (Exklusive OR, auch<br />

Antivalenz genannt). Die XOR-Funktion<br />

verknüpft zwei Werte derart, dass sich<br />

eine logische 1 ergibt, wenn die Eingangsgrößen<br />

verschieden waren. 0 XOR<br />

1 = 1; 0 XOR 0 = 0; 1 XOR 1 = 0; 1 XOR<br />

0 = 1. Die Nutzdaten aller Segmente<br />

eines Stripes werden nun nacheinander<br />

bitweise XOR-verknüpft. Beispielsweise<br />

ergibt sich in der zweiten Zeile des Schemas<br />

in der Grafik: 0010 XOR 0000 ergibt<br />

0010 <strong>und</strong> 0010 XOR 0100 ergibt 0110. Das<br />

ist der Wert im gelb hinterlegten Segment<br />

am Schnittpunkt Stripe 2/​Drive 3. Entsprechendes<br />

gilt für die anderen Stripes<br />

im Beispiel.<br />

Fällt nun eine Platte aus, dann lassen<br />

sich die fehlenden Daten durch XOR-<br />

Verknüpfung der übrig gebliebenen errechnen<br />

(Rebuild), wenn mindestens<br />

drei Platten pro Stripe im Spiel waren.<br />

Nehmen wir beispielsweise an, dass auf<br />

Drive 2 nicht mehr zugegriffen werden<br />

kann. Dann rechnet der <strong>RAID</strong>-Controller<br />

für Stripe 2: 0010 XOR 0110 (Drive 1 <strong>und</strong><br />

Drive 3) – das Ergebnis ist 0100. Dieser<br />

Wert 0100 XOR 0100 von Drive 4 ergibt<br />

0000. Da<strong>mit</strong> ist klar, dass im fehlenden<br />

Segment des ausgefallenen Drive 2 der<br />

Wert 0000 hinterlegt gewesen sein muss.<br />

Das ist auch tatsächlich der Fall, wie ein<br />

Blick auf die Grafik zeigt. Entsprechend<br />

lässt sich in jedem Stripe jedes Segment<br />

durch XOR-Verknüpfung der anderen<br />

Segmente des Stripe auf einfache Weise<br />

berechnen. Fällt mehr als eine Platte aus,<br />

funktioniert das Spiel allerdings nicht<br />

mehr – dann sind alle Daten aller Stripes<br />

unwiederbringlich verloren.<br />

<strong>RAID</strong> <strong>und</strong> Risiko<br />

Der Betrieb <strong>mit</strong> einer ausgefallenen Platte<br />

(Status »degraded«) oder während der<br />

Wiederherstellung der Inhalte eines zuvor<br />

ausgefallenen Laufwerks (Status<br />

»rebuild«) ist bei den klassischen <strong>RAID</strong>-<br />

Leveln 3 bis 5, die auf der beschriebenen<br />

Paritätsberechnung beruhen, aber auch<br />

bei einer Spiegelung besonders kritisch.<br />

Fällt jetzt eine weitere Platte aus, oder ist<br />

auch nur ein einziger Sektor auf den verbliebenen<br />

Platten unleserlich, sind alle<br />

Daten verloren.<br />

Aber wie wahrscheinlich ist es, dass gerade<br />

in dieser sensiblen Zeit ein weiterer<br />

Schaden eintritt? Das kann man ausrechnen.<br />

Ein einfacher Ansatz geht davon<br />

Datendisk 1<br />

Datendisk 2<br />

Datendisk 3<br />

aus, dass in die gesuchte Mean Time To<br />

Data Loss (MTTDL) die Gesamtzahl der<br />

Festplatten, ihre durchschnittliche Betriebsdauer<br />

bis zu einem Fehler (Mean<br />

Time To Failure, MTTL) <strong>und</strong> die Dauer<br />

des Wiederherstellungsprozesses einhergehen.<br />

Die Formel dafür ist noch gut<br />

überschaubar (<strong>und</strong> solche Berechnungen<br />

stellten bereits die <strong>RAID</strong>-Erfinder in [1]<br />

an), sie hat aber einen Schönheitsfehler:<br />

Sie geht nämlich von der Annahme aus,<br />

dass die Festplattenausfälle voneinander<br />

unabhängig sind. So kommt man zu recht<br />

hohen MTTDL-Werten, die auf den ersten<br />

Blick beruhigend wirken. Praktisch sind<br />

diese Voraussetzungen aber meistens<br />

nicht gegeben: In der Regel stammen alle<br />

Platten aus einer Produktionscharge, waren<br />

denselben Umweltbedingungen ausgesetzt,<br />

altern auf ähnliche Weise <strong>und</strong> so<br />

weiter. Außerdem erhöht sich die Ausfallwahrscheinlichkeit<br />

<strong>mit</strong> der Betriebsdauer.<br />

Im Ergebnis sinkt die MTTF nach jedem<br />

Ausfall, das heißt, ein weiterer Ausfall<br />

nach dem ersten ist da<strong>mit</strong> um ein Vielfaches<br />

wahrscheinlicher.<br />

Komplizierte Lesefehler<br />

Noch komplizierter wird die Sache, wenn<br />

man nicht nur den Totalausfall einer weiteren<br />

Festplatte kalkuliert, sondern auch<br />

die Wahrscheinlichkeit einfacher Lesefehler,<br />

die ja in dieser Situation ebenfalls<br />

einen Totalverlust der Daten zur Folge<br />

Datendisk 4<br />

XOR horizontal<br />

XOR diagonal<br />

Abbildung 3: <strong>RAID</strong> DP: Eine Prüfsumme (XOR-Verknüpfung) wird wie gehabt horizontal berechnet (Pa, Pb,…)<br />

<strong>und</strong> eine zweite, unabhängige Prüfsumme über die diagonal liegenden Sektoren (hier kenntlich durch die<br />

gleiche Farbe.<br />

48 Ausgabe 06-2012 Admin www.admin-magazin.de


<strong>RAID</strong>-Level<br />

<strong>RAID</strong>-Systeme<br />

haben können. Maßgeblich dafür ist die<br />

Bitfehlerrate der Festplatte. Hier darf man<br />

sich durch große Zahlen nicht blenden<br />

lassen. Selbst bei einer Bitfehlerwahrscheinlichkeit<br />

von nur 1:10 14 bleibt ein<br />

Risiko von r<strong>und</strong> 30 Prozent für einen<br />

schadhaften Sektor, wenn die Gesamtkapazität<br />

des <strong>RAID</strong>-Verb<strong>und</strong>es 5 TByte<br />

beträgt. Überhaupt beißt sich die Katze<br />

besonders bei den heute üblichen hohen<br />

Kapazitäten in den Schwanz: Je größer<br />

das <strong>RAID</strong>, je höher die Fehlerwahrscheinlichkeit,<br />

je länger aber auch die Rebuild-<br />

Dauer <strong>und</strong> da<strong>mit</strong> wiederum das Risiko<br />

für einen verhängnisvollen doppelten<br />

Fehler. Das führt zu der Schlussfolgerung:<br />

Sehr große <strong>RAID</strong>-Sets lassen sich<br />

<strong>mit</strong> den klassischen Verfahren nicht mehr<br />

zuverlässig sichern.<br />

Auswege<br />

Einen ersten Ausweg bieten unter Umständen<br />

die kombinierten <strong>RAID</strong>-Level,<br />

bei denen generell <strong>RAID</strong>-Sets aus Elementen<br />

gebildet werden, die ihrerseits<br />

bereits <strong>RAID</strong>-Sets sind. Spiegelt man dabei<br />

etwa paritätsgesicherte <strong>RAID</strong>-Sets wie<br />

bei <strong>RAID</strong> 50 (gespiegelte <strong>RAID</strong> 5-Sets),<br />

dann ist die Ausfallsicherheit etwas höher,<br />

weil jetzt in jeder Spiegelhälfte eine<br />

Platte ausfallen kann, ohne dass es zu<br />

Datenverlusten kommt. Das gesamte<br />

Konstrukt verträgt also unter günstigen<br />

Bedingungen zwei Plattenausfälle. Der<br />

Preis dafür ist allerdings eine nochmals<br />

geringere Kapazitätsausbeute: Da bei<br />

<strong>RAID</strong> 5 immer die Kapazität einer Platte<br />

für die Paritätsdaten verloren geht, verdoppelt<br />

sich der Verlust bei zwei <strong>RAID</strong><br />

5-Sets (eines in jeder Spiegelhälfte).<br />

Günstiger <strong>und</strong> zugleich <strong>sicherer</strong> sind eine<br />

Reihe später entwickelter <strong>RAID</strong>-Level <strong>mit</strong><br />

doppelter Parität. Diesen Verfahren – zum<br />

Beispiel <strong>RAID</strong> DP oder <strong>RAID</strong> 5 DP – ist<br />

gemeinsam, dass sie eine Prüfsumme wie<br />

gehabt durch bitweise XOR-Verknüpfung<br />

pro Stripe errechnen <strong>und</strong> dann zusätzlich<br />

eine zweite, davon unabhängige Prüfsumme<br />

bilden, ebenfalls durch XOR-Verknüpfung,<br />

nun aber von diagonal angeordneten<br />

Sektoren (Abbildung 3). <strong>RAID</strong><br />

DP speichert die Paritätsdaten dabei wie<br />

<strong>RAID</strong> 4 auf zwei extra Paritätsplatten.<br />

Ein zumindest theoretischer Vorteil der<br />

Paritätsplatte ist in diesem Fall, dass sich<br />

ein <strong>RAID</strong> 4 durch Hinzufügen einer Platte<br />

<strong>und</strong> Neuberechnen der diagonalen Parität<br />

zu <strong>RAID</strong> DP aufbohren ließe. Wie auch<br />

immer man dahin gelangt: Jedenfalls<br />

dürfen dann zwei Platten pro <strong>RAID</strong>-Set<br />

ausfallen, bevor es zum unwiderruflichen<br />

Datenverlust kommt.<br />

Die <strong>RAID</strong>-Level <strong>mit</strong> doppelter Parität<br />

funktionieren jedoch nur bei einer bestimmten<br />

Anzahl von Platten. Bei <strong>RAID</strong><br />

DP muss beispielsweise die Anzahl aller<br />

Datenplatten plus der horizontalen Paritätsplatte<br />

eine Primzahl sein. Ist das von<br />

sich aus nicht der Fall, werden die Platten<br />

um leere, virtuelle Platten ergänzt, um<br />

diese Bedingung zu erfüllen.<br />

Noch ausfall<strong>sicherer</strong><br />

Mehr als zwei Plattenausfälle sind <strong>mit</strong><br />

den XOR-basierten Verfahren nicht kompensierbar.<br />

Mit fehlerkorrigierenden Kodierungsverfahren,<br />

wie man eines schon<br />

einmal bei <strong>RAID</strong> 2 verwendet hatte, wäre<br />

es aber prinzipiell möglich, eine noch<br />

höhere Fehlertoleranz zu erreichen <strong>und</strong><br />

daran wird auch gearbeitet.<br />

Allerdings sind<br />

die zugr<strong>und</strong>e liegenden<br />

mathematischen Algorithmen<br />

nicht mehr<br />

trivial <strong>und</strong> rechenintensiv.<br />

Ein Kandidat für ein<br />

solches Blockkodierverfahren<br />

ist der Reed-Solomon-Code<br />

(RS-Code),<br />

der beispielsweise auch<br />

bei der Übertragung<br />

von Fernsehsignalen<br />

nach der DVB-Norm<br />

zum Einsatz kommt<br />

<strong>und</strong> dort die Bitfehlerrate<br />

des empfangenen<br />

Signals um mehr als<br />

sechs Zehnerpotenzen<br />

verbessern kann. Einen<br />

solchen RS-Code<br />

verwendet auch <strong>RAID</strong><br />

6 – zumindest in manchen<br />

Implementierungen<br />

– das eine XOR-<br />

Prüfsumme <strong>mit</strong> einer<br />

zweiten Prüfsumme<br />

nach dem RS-Verfahren<br />

ergänzt.<br />

Die Performance-Einbußen<br />

sind bei <strong>RAID</strong><br />

6 etwas größer als bei <strong>RAID</strong> 5 außerdem<br />

wird eine Festplatte mehr benötigt<br />

(mindestens vier). Dafür kann auch hier<br />

der Ausfall von zwei Festplatten toleriert<br />

werden.<br />

Fazit<br />

Abgesehen vom reinen Striping erhöhen<br />

alle Raidlevel die Ausfallsicherheit. Mindestens<br />

ein einzelner Festplattenausfall<br />

ist da<strong>mit</strong> immer sicher zu überleben. Den<br />

Preis dafür bezahlt man in Form von<br />

Kapazitäts- <strong>und</strong> Performance-Einbußen.<br />

Weil bei sehr großen Raidsets die Gefahr<br />

von Datenverlusten duch Doppelfehler<br />

wächst, wurden auch Verfahren entwickelt,<br />

die zwei Plattenausfälle in einer<br />

Einheit kompensieren können. (jcb) n<br />

Infos<br />

[1] „A case for red<strong>und</strong>ant arrays of inexpensive<br />

disks“: [http:// http:// www.​<br />

coursehero. com/ file/ 1494431/ CSD‐87‐391]<br />

Linux-Server<br />

Das Administrationshandbuch<br />

948 S., 2. Auflage 2012, 49,90 €<br />

» www.GalileoComputing.de/3051<br />

Admin-Know-how<br />

Ubuntu GNU/Linux 12.04 LTS<br />

1.023 S., 7. Auflage 2012, <strong>mit</strong> DVD, 39,90 €<br />

» www.GalileoComputing.de/3151<br />

Das Komplettpaket LPIC-1 & LPIC-2<br />

Das gesamte Prüfungswissen<br />

545 S. <strong>und</strong> 552 S., <strong>mit</strong> 2 DVDs, 59,90 €<br />

» www.GalileoComputing.de/2895<br />

www.GalileoComputing.de<br />

Windows 8 für Administratoren<br />

712 S., 2. Auflage, 49,90 €<br />

» www.GalileoComputing.de/3261<br />

www.admin-magazin.de<br />

Admin<br />

49<br />

Ausgabe 06-2012<br />

Wissen, wie’s geht.


<strong>RAID</strong>-Systeme<br />

Raider<br />

Der Installer prüft die Mindestanzahl<br />

<strong>und</strong> weigert sich, beispielsweise <strong>mit</strong> nur<br />

zwei <strong>RAID</strong>-Partitionen, ein <strong>RAID</strong>-6 anzulegen.<br />

Nachträglich umrüsten<br />

<strong>RAID</strong>-Systeme anlegen <strong>mit</strong> Raider<br />

Fallschirm<br />

Neben einem zuverlässigen Backup sollte in einem guten Server ein <strong>RAID</strong>-<br />

System selbstverständlich sein. Dieser Workshop verrät, wie man eine bestehende<br />

Linux-Installation in ein <strong>RAID</strong> überführt <strong>und</strong> dabei auftretende<br />

Hindernisse überwindet. Oliver Frommel<br />

Wer mehr Performance oder mehr Sicherheit<br />

haben will, sollte auf <strong>RAID</strong>-Speicher<br />

setzen. So beschleunigt das nicht red<strong>und</strong>ante<br />

<strong>RAID</strong>-0 den Datenzugriff, während<br />

<strong>RAID</strong>-1 den Datenbestand dupliziert <strong>und</strong><br />

so<strong>mit</strong> höhere Ausfallsicherheit verschafft.<br />

Beides zusammen beschert dem Anwender<br />

<strong>RAID</strong>-Level 10, das Mirroring <strong>und</strong><br />

Striping vereint.<br />

Ein <strong>RAID</strong> beispielsweise auf zwei Partitionen<br />

einer Festplatte zu erstellen, ist<br />

wenig sinnvoll, denn wenn sie kaputt<br />

geht, sind gleich beide „Platten“ des<br />

<strong>RAID</strong> futsch. Allerdings ist es durchaus<br />

möglich, auf einer Festplatte mehrere<br />

Partitionen anzulegen <strong>und</strong> sie jeweils<br />

unterschiedlichen <strong>RAID</strong>-Verbünden zuzuweisen.<br />

Ein Beispiel dafür gibt dieser<br />

Artikel später.<br />

Wer ein neues Linux-System installiert,<br />

kann dabei bereits ein <strong>RAID</strong> erstellen,<br />

vorausgesetzt das System verfügt über<br />

genug Festplatten. Zum Beispiel <strong>mit</strong> Red<br />

Hat oder CentOS wählen Sie bei der Installation<br />

erst »Basis‐Speichergeräte« <strong>und</strong><br />

in einem späteren Schritt dann »Maßgeschneidertes<br />

Layout erstellen«. Beim<br />

Erzeugen einer neuen Partition stellen Sie<br />

statt eines Dateisystems »Software‐<strong>RAID</strong>«<br />

ein. Haben Sie mindestens zwei <strong>RAID</strong>-<br />

Partitionen erstellt, bietet der Installer<br />

<strong>mit</strong> dem Menüpunkt »Neu« dann auch<br />

ein »<strong>RAID</strong>‐Gerät« an, bei dem Sie die<br />

eben erzeugten Partitionen auswählen.<br />

Doch was tun, wenn der Rechner schon<br />

eine Zeit lang läuft <strong>und</strong> bisher nur ein<br />

simples Dateisystem verwendet? Prinzipiell<br />

ist es nicht schwer, aus einem konventionellen<br />

Dateisystem manuell ein <strong>RAID</strong><br />

zu bauen, allerdings gibt es dabei einige<br />

Dinge zu beachten. Einfacher geht es <strong>mit</strong><br />

einem Skript namens Raider, das eine<br />

einfache Linux-Installation in ein <strong>RAID</strong><br />

umwandelt. Es überprüft die Voraussetzungen,<br />

kopiert die Daten, legt ein neues<br />

<strong>RAID</strong> an <strong>und</strong> bindet alle dafür nötigen<br />

Partitionen ein.<br />

Zu finden ist Raider unter der Adresse<br />

[1]. Haben Sie das Paket heruntergeladen<br />

<strong>und</strong> entpackt, müssen noch einige<br />

Voraussetzungen erfüllt sein, da<strong>mit</strong> sich<br />

Raider installieren lässt: Es benötigt die<br />

Pakete »bc«, »mdadm« , »parted« <strong>und</strong><br />

»rsync«, die sich <strong>mit</strong> dem Paketmanager<br />

einfach installieren lassen:<br />

yum install bc mdadm rsync parted<br />

Ein ebenfalls vorausgesetztes Programm,<br />

<strong>mit</strong> dem sich eine initiale RAM-Disk erzeugen<br />

lässt (Dracut, Mkinitramfs <strong>und</strong><br />

so weiter), ist meistens schon installiert.<br />

Danach befördert »/install.sh« im Raider-<br />

Verzeichnis die Dateien auf die Festplatte.<br />

Das Skript installiert einige Programme,<br />

von denen für den Anwender nur »raider«<br />

<strong>und</strong> »raiderl« von Interesse sind. »/ usr/<br />

bin/raider« ist ein relativ kurzer Wrapper,<br />

der die Kommandozeile auswertet <strong>und</strong><br />

dann die eigentliche Arbeit an eines der<br />

23 Skripts übergibt, die sich in »/usr/lib/<br />

raider« befinden (Abbildung 1).<br />

Einfach bedienbar<br />

Ein Aufruf von »raider ‐‐help« zeigt die<br />

verfügbaren Aufrufparameter. So verschafft<br />

»raider ‐d« erst einmal einen Überblick<br />

über die eingebauten Festplatten<br />

<strong>und</strong> Partitionen. In Abbildung 2 ist das<br />

Ergebnis für einen Linux-Server zu sehen,<br />

der über zwei Festplatten verfügt, von<br />

denen die erste zwei Partitionen enthält<br />

<strong>und</strong> die zweite leer ist. Um da<strong>mit</strong> etwa<br />

ein <strong>RAID</strong>-1 aufzubauen, genügt es, das<br />

52 Ausgabe 06-2012 Admin www.admin-magazin.de


Raider<br />

<strong>RAID</strong>-Systeme<br />

Raider-Skript nur <strong>mit</strong> der Option »‐R1«<br />

aufzurufen:<br />

raider ‐R1<br />

Die sonst erforderliche Angabe der Platten/​Partitionen<br />

fällt hier weg, denn Raider<br />

nimmt einfach die beiden für das<br />

<strong>RAID</strong>-1 nötigen Platten. Es konstruiert<br />

einen Befehl zum Erzeugen der initialen<br />

RAM-Disk, kopiert die Partitions-Informationen<br />

von der ersten auf die zweite<br />

Platte, erzeugt da<strong>mit</strong> ein <strong>RAID</strong> <strong>und</strong> kopiert<br />

die Daten von der ersten Festplatte<br />

in das <strong>RAID</strong> (das zum aktuellen Zeitpunkt<br />

nur aus der zweiten Platte besteht). Dann<br />

erzeugt Raider die RAM-Disk <strong>und</strong> wechselt<br />

in eine Chroot-Umgebung, um den<br />

Bootloader Grub auf die zweite Platte<br />

zu schreiben. Hierbei setzt Raider eine<br />

leere Festplatte voraus. Befinden sich auf<br />

ihr Partitionen, bricht Raider den Vorgang<br />

ab. Ein Aufruf von »raider ‐‐erase<br />

/dev/sdb« löscht die Daten. Einen Test<br />

absolviert Raider übrigens durch die zusätzliche<br />

Option »‐t«, also etwa »raider<br />

‐t ‐R1«.<br />

Langsamer Sync<br />

Wie lange das Kopieren dauert, hängt in<br />

erster Linie davon ab, wie viele Nutzdaten<br />

auf der ersten Festplatte liegen. Im<br />

Beispiel waren dies nur wenige GBytes,<br />

also war der Vorgang nach wenigen Minuten<br />

erledigt. Nun fordert Raider den<br />

Anwender dazu auf, die erste <strong>und</strong> letzte<br />

der Festplatten im Server auszutauschen,<br />

im Fall von <strong>RAID</strong>-1 also die einzigen beiden<br />

existierenden Platten. Dies ist eine<br />

Maßnahme, die sicherstellen soll, dass<br />

alle Daten ins <strong>RAID</strong>-System kopiert wurden.<br />

Nach dem Tausch bootet das System<br />

von der ehemals zweiten Platte, die nun<br />

hoffentlich alle Daten der ursprünglichen<br />

Root-Platte enthält. War auf dem alten<br />

System SE-Linux aktiviert, hat Raider die<br />

Partition für ein Relabeling markiert, was<br />

noch einen weiteren Reboot erfordert.<br />

Nach dem Einloggen verschafft ein Blick<br />

in die Mount-Tabelle die Erkenntnis, dass<br />

das Root-Dateisystem nun ein <strong>RAID</strong> ist:<br />

Abbildung 1: Raider ist gut strukturiert <strong>und</strong> verteilt seine Arbeit auf eine ganze Reihe von einzelnen Skripten.<br />

ein <strong>RAID</strong>-1 handelt <strong>und</strong> nur eine der beiden<br />

notwendigen Festplatten vorhanden<br />

ist, sodass es sich um ein sogenanntes degraded<br />

<strong>RAID</strong> handelt. Dies ist am »[U_]«<br />

abzulesen – bei einem vollständigen<br />

<strong>RAID</strong>-Verb<strong>und</strong> stünde hier »[UU]«. Mehr<br />

Informationen gibt der Befehl »mdadm ‐D<br />

/dev/md0« aus.<br />

# cat /proc/mdstat<br />

Personalities : [raid1]<br />

md0 : active raid1 sda1[0]<br />

310522816 blocks [2/1] [U_]<br />

Der nächste Schritt besteht darin, den<br />

Befehl<br />

raider ‐‐run<br />

einzugeben. Sind die Festplatten nicht<br />

ausgetauscht, weigert sich Raider, weiterzuarbeiten.<br />

Andernfalls partitioniert<br />

das Programm auch die zweite (ehemals<br />

erste) Festplatte neu, wenn dies nötig<br />

ist <strong>und</strong> bindet sie in den Verb<strong>und</strong> ein,<br />

wo<strong>mit</strong> das <strong>RAID</strong> automatisch seine<br />

„Wiederherstellung“ startet. Weil dies<br />

blockweise <strong>und</strong> unter Einbeziehung des<br />

jeweiligen <strong>RAID</strong>-Algorithmus geschieht,<br />

ist der Vorgang viel langsamer als ein<br />

normales Kopieren. Insbesondere wird<br />

auch die komplette Partition kopiert <strong>und</strong><br />

nicht etwa nur der <strong>mit</strong> Daten belegte<br />

Bereich. Mit <strong>RAID</strong>-1 <strong>und</strong> Festplatten von<br />

320 GByte dauert der ganze Vorgang<br />

eineinhalb St<strong>und</strong>en (Abbildung 3). Das<br />

Logfile lässt sich jederzeit <strong>mit</strong> dem Befehl<br />

»raiderl« anzeigen. Die aktuelle <strong>RAID</strong>-<br />

Konfiguration schreibt Raider in die Datei<br />

»/etc/mdadm.conf«. Manuell lässt sich<br />

dies <strong>mit</strong> »mdadm ‐‐detail ‐‐scan > /etc/<br />

mdadm.conf« bewerkstelligen.<br />

Bei heutigen Festplatten <strong>mit</strong> TByte-Kapazitäten<br />

<strong>und</strong> hohen <strong>RAID</strong>-Leveln kann ein<br />

solcher Rebuild unter Umständen auch<br />

ganze Tage in Anspruch nehmen. In dieser<br />

Zeit sind degraded <strong>RAID</strong>s besonders<br />

gefährdet, denn wenn schon eine Platte<br />

ausgefallen ist, kann der Ausfall einer<br />

weiteren Platte zur Datenkatastrophe führen.<br />

<strong>RAID</strong>s <strong>mit</strong> Double-Parity, die Parity-<br />

Daten doppelt speichern, verkraften auch<br />

den Ausfall einer weiteren Platte. Manche<br />

Experten sehen angesichts immer größerer<br />

Datenmengen <strong>und</strong> entsprechender<br />

Festplatten sogar eine Notwendigkeit für<br />

Triple-Parity-<strong>RAID</strong>, wie es in ZFS implementiert<br />

ist, das sogar beim Ausfall dreier<br />

Platten noch funktioniert [2].<br />

Beschränkt<br />

Raider funktioniert <strong>mit</strong> den gängigen<br />

Linux-Dateisystemen wie Ext2/​3/​4, XFS,<br />

JFS, ReiserFS <strong>und</strong> beherrscht auch Logical<br />

Volumes <strong>mit</strong> LVM2. Support für<br />

Btrfs gibt es bisher nicht, auch nicht für<br />

verschlüsselte Partitionen. Partititionsinformationen<br />

kann Raider nicht nur im<br />

alten MBR-Format, sondern auch aus<br />

GPT-Tabellen auslesen. Außerdem kann<br />

Raider nur solche Linux-Installationen<br />

in <strong>RAID</strong>-System umwandeln, die eine<br />

Festplatte <strong>mit</strong> Linux-Dateisystemen enthält.<br />

Befindet sich darauf etwa noch eine<br />

Windows-Partition, funktioniert das Programm<br />

natürlich nicht.<br />

Eine Root-Partition in ein <strong>RAID</strong>-1 umzuwandeln,<br />

ist noch keine große Kunst, das<br />

würde man vermutlich auch noch ohne<br />

die Hilfe von Raider schaffen. Allerdings<br />

kann Raider noch mehr, zum Beispiel<br />

$ mount<br />

/dev/md0 on / type ext4 (rw)<br />

...<br />

Ein Blick in die Kernel-Status-Datei für<br />

<strong>RAID</strong>s verrät wiederum, dass es sich um<br />

Abbildung 2: Raider zeigt hier die Ausgangssituation: eine Festplatte <strong>mit</strong> einer Root- <strong>und</strong> einer Swap-Partition.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

53


<strong>RAID</strong>-Systeme<br />

Raider<br />

01 # df ‐h<br />

aus mehreren Platten auch <strong>RAID</strong>s der<br />

Level 4, 5, 6 <strong>und</strong> 10 zusammenbauen,<br />

die entsprechende Menge an Festplatten<br />

vorausgesetzt (siehe Tabelle 1 <strong>und</strong> den<br />

Artikel zu <strong>RAID</strong>-Gr<strong>und</strong>lagen in diesem<br />

Heft).<br />

Außerdem kann Raider <strong>mit</strong> Logical Volumes<br />

umgehen, was bei zum Beispiel bei<br />

Fedora, Red Hat <strong>und</strong> CentOS der Default-<br />

Installationsmodus ist. Hier<strong>mit</strong> ein <strong>RAID</strong><br />

zu realisieren, erfordert doch einiges<br />

an Konfigurationsaufwand, den Raider<br />

einem abnehmen kann. Die Ausgangsposition<br />

einer solchen Installation ist in<br />

Listing 1 zu sehen.<br />

Boot-Partition<br />

Der folgende Aufruf startet <strong>mit</strong> drei zusätzlichen<br />

Festplatten die Konvertierung<br />

zu einem <strong>RAID</strong>-5, das die Daten über<br />

die Festplatten verteilt, aber durch Parity-<br />

Informationen absichert, also hohe Performance<br />

<strong>und</strong> Sicherheit vereint:<br />

raider ‐R5 sda sdb sdc sdd<br />

Weil es im aktuellen Fall schon eine Boot-<br />

Partition gibt, wandelt Raider sie wieder<br />

in ein <strong>RAID</strong> um. Fehlt eine solche Partition,<br />

<strong>und</strong> der Anwender wählt ein anderes<br />

<strong>RAID</strong> als Level 1, ändert Raider die<br />

Partitionierung. Weil die Linux-Bootloader<br />

üblicherweise nur von <strong>RAID</strong>-1 booten<br />

können, jedenfalls, wenn das <strong>RAID</strong><br />

degraded ist, legt Raider dann auf jeder<br />

Listing 1: LVM-Partitionen<br />

02 Dateisystem Size Used Avail Use%<br />

Eingehängt auf<br />

03 /dev/mapper/VolGroup‐lv_root<br />

04 50G 1,7G 46G 4% /<br />

05 tmpfs 3,9G 0 3,9G 0% /dev/shm<br />

06 /dev/sda1 485M 35M 425M 8% /boot<br />

07 /dev/mapper/VolGroup‐lv_home<br />

08 235G 188M 222G 1% /home<br />

Level<br />

Tabelle 1: <strong>RAID</strong>-Level Minimalkonfiguration<br />

Min. Anzahl<br />

Festplatten<br />

neuen Festplatte eine Boot-Partition <strong>mit</strong><br />

etwa 500 MByte an, die es später zu einem<br />

<strong>RAID</strong>-1 vereint. Fällt eine Platte aus,<br />

kann das System also auf jeden Fall von<br />

einer der verbliebenen Platten booten.<br />

Nach dem Durchlauf des Kommandos<br />

muss man wieder den Rechner ausschalten<br />

<strong>und</strong> dieses Mal die erste <strong>mit</strong> der letzten<br />

Festplatte am Bus vertauschen, die<br />

anderen beiden können bleiben, wo sie<br />

sind.<br />

Nach dem Booten startet »raider ‐‐run«<br />

wieder den Rebuild des <strong>RAID</strong>. Weil es bei<br />

einem laufenden System keine zwei Volume<br />

Groups <strong>mit</strong> gleichem Namen geben<br />

kann, hat Raider auf dem neuen <strong>RAID</strong><br />

eine Volume Group <strong>mit</strong> einem ähnlichen<br />

aber leicht veränderten Namen gegeben<br />

(siehe Listing 2). Er kommt zustande,<br />

indem Raider hinter den Originalnamen<br />

»__raider« setzt. Dies lässt sich aber <strong>mit</strong><br />

der Kommandozeilenoption »‐l« ändern.<br />

Bei vielen Tests ging <strong>mit</strong> Raider alles gut,<br />

aber einmal weigerte sich das Programm,<br />

in der zweiten Phase die verbliebene<br />

Platte dem neuen <strong>RAID</strong>-Verb<strong>und</strong> hinzuzufügen,<br />

<strong>mit</strong> dem lapidaren Hinweis:<br />

Failed to add a device in /dev/md1 array<br />

Auch das Logfile, das »raiderl« anzeigt,<br />

schwieg sich aus. Mehr Informationen<br />

Lesegeschwindigkeit<br />

Schreibgeschwindigkeit<br />

1 1+1 1x 1x 1x<br />

5 1+2 2x 1/​2x 2x<br />

6 1+3 2x 1/​3x 2x<br />

10 1+3 1x 1x 2x<br />

sind dafür in weiteren Logdateien zu finden,<br />

die in »/var/log/raider« liegen. So<br />

protokolliert »/var/log/raider/raider_debug_STEP3_.log«<br />

minutiös jedes einzelne<br />

Kommando, das Raider im Lauf seiner<br />

Arbeit aufruft. Hier fand sich schließlich<br />

die Zeile:<br />

mdadm: Cannot open /dev/sdd1: Device or U<br />

resource busy<br />

Typischerweise ist es unter Linux nicht<br />

immer einfach, die Ursache für eine<br />

solche Fehlermeldung zu finden. Das<br />

Mount-Kommando zeigte an, dass die<br />

Partition nicht eingeb<strong>und</strong>en war, auch<br />

»lsof« lieferte keine neuen Erkenntnisse.<br />

Schließlich verriet »swapon ‐s«, dass das<br />

System, aus welchen Gründen auch immer,<br />

die komplette Festplatte zum Swappen<br />

verwendete (Abbildung 4).<br />

Das Abschalten des Swap <strong>mit</strong> »swapoff<br />

/ dev/sdd « brachte schließlich die Lösung.<br />

Nun ließ sich zuerst das Device<br />

»sdd1« dem <strong>RAID</strong>-1 »md0« hinzufügen.<br />

Ein Blick in »/proc/mdstat« zeigte, dass<br />

sich das Boot-<strong>RAID</strong> in etwa einer Minute<br />

synchronisierte. Auch die zweite Partition<br />

die zu dem <strong>RAID</strong>-5 <strong>mit</strong> der Volume Group<br />

gehört, wurde <strong>mit</strong> dem folgenden Befehl<br />

Teil des Verb<strong>und</strong>s:<br />

mdadm ‐‐add /dev/md1 /dev/sdd2<br />

Kapazität<br />

Listing 2: Raider-LVM<br />

01 # df ‐h<br />

02 Dateisystem Size Used Avail Use%<br />

Eingehängt auf<br />

03 /dev/mapper/VolGroup__raider‐lv_root<br />

04 50G 1,9G 45G 4% /<br />

05 tmpfs 3,9G 0 3,9G 0% /dev/shm<br />

06 /dev/md0 485M 61M 399M 14% /boot<br />

07 /dev/mapper/VolGroup__raider‐lv_home<br />

08 235G 188M 222G 1% /home<br />

Abbildung 3: Nach dem Hinzufügen der zweiten Festplatte zum <strong>RAID</strong>-Verb<strong>und</strong> läuft die Synchronisation, die<br />

sich eine Zeit lang hinzieht.<br />

54 Ausgabe 06-2012 Admin www.admin-magazin.de


Raider<br />

<strong>RAID</strong>-Systeme<br />

Platten unterschiedlicher Hersteller oder<br />

Baureihen zu verwenden, um die Wahrscheinlichkeit<br />

zu minimieren, dass alle<br />

an dem gleichen Fehler leiden.<br />

Mit dem Partitionierungs-Tool (»fdisk«,<br />

»sfdisk« <strong>und</strong> so weiter) stellen Sie den<br />

Typ der Partition auf »Linux raid autodetect«,<br />

das den Code »fd« besitzt. Von einer<br />

Platte lassen sich die Partitions-Infos<br />

etwa <strong>mit</strong> »sfdisk« übertragen:<br />

sfdisk ‐d /dev/sda | sfdisk /dev/sdd<br />

Abbildung 4: Fälschlicherweise wurde die letzte Festplatte als Swap-Bereich verwendet. Dies zu deaktivieren<br />

<strong>und</strong> sie manuell ins <strong>RAID</strong> aufzunehmen, löst das Problem.<br />

Die anschließende, automatisch ablaufende<br />

Synchronisierung dauerte wieder<br />

etwa eineinhalb St<strong>und</strong>en. Alle Variablen<br />

<strong>und</strong> Arbeitsdaten legt Raider im Verzeichnis<br />

»/var/lib/raider« <strong>und</strong> Unterverzeichnissen<br />

wie »DB« ab, wo der k<strong>und</strong>ige<br />

Administrator gegebenfalls auch manuell<br />

eingreifen kann.<br />

Dieses Beispiel zeigt bereits, wie man<br />

ausgefallene Platten in einem <strong>RAID</strong> einfach<br />

ersetzt, solange es noch gr<strong>und</strong>sätzlich<br />

funktioniert, also die minmal nötige<br />

Anzahl von Platten vorhanden ist. Fällt<br />

eine Platte aus, nimmt das <strong>RAID</strong>-Subsystem<br />

sie automatisch aus dem Verb<strong>und</strong><br />

heraus.<br />

Nötig ist es aber, das <strong>RAID</strong> <strong>mit</strong> einem<br />

Monitoring-Paket wie Nagios zu überwachen,<br />

um einen solchen Ausfall auch <strong>mit</strong>zubekommen.<br />

Sonst arbeitet das <strong>RAID</strong><br />

<strong>mit</strong> einer ausgefallenen Platte in Minimalkonfiguration<br />

einfach stillschweigend<br />

weiter, <strong>und</strong> die Katastrophe ist programmiert.<br />

Will man eine Festplatte bereits vor dem<br />

Totalschaden austauschen, etwa weil<br />

sich die <strong>mit</strong> SMART gemeldeten Fehler<br />

häufen, kann man den Ausfall dem<br />

<strong>RAID</strong> auch vortäuschen. Hierzu bietet<br />

»mdadm« einen Befehl:<br />

Befehl<br />

Tabelle 2: <strong>RAID</strong>-Kommandos<br />

mdadm --fail <strong>RAID</strong>-Device Partition<br />

mdadm --add <strong>RAID</strong>-Device Partition<br />

mdadm --remove <strong>RAID</strong>-Device Partition<br />

mdadm --stop <strong>RAID</strong>-Device<br />

mdadm --query Device<br />

mdadmin --examine Device<br />

mdadm ‐D <strong>RAID</strong>-Device<br />

mdadm ‐‐fail /dev/md0 /dev/sda1<br />

Nun meldet das <strong>RAID</strong> die Platte als defekt.<br />

Mit mdadm »‐‐remove« lässt sie sich<br />

aus dem Verb<strong>und</strong> entfernen. Nach dem<br />

Einbau einer neuen Platte fügt »‐‐add«<br />

sie wie gezeigt wieder hinzu, <strong>und</strong> die<br />

Synchronisierung beginnt von selbst.<br />

Eine Übersicht der wichtigsten Mdadm-<br />

Befehle zeigt Tabelle 2.<br />

Handarbeit<br />

Zum Abschluss noch kursorisch die<br />

Vorgehensweise, um ein neues <strong>RAID</strong><br />

anzulegen, das beispielsweise nur zur<br />

Speicherung von Nutzerdaten in einem<br />

Dateiserver dienen soll, ohne die Root-<br />

Partition anzutasten. Zuerst legen Sie die<br />

passenden Partitionen an, die optimalerweise<br />

die komplette Platte umfassen <strong>und</strong><br />

auf allen Platten gleich groß sind. Bei den<br />

verschiedenen <strong>RAID</strong>-Leveln funktionieren<br />

zum Teil auch unterschiedlich große<br />

Partitionen, aber der Verb<strong>und</strong> verwendet<br />

dann den kleinsten gemeinsamen Nenner,<br />

<strong>und</strong> Sie verschenken Platz.<br />

Platten des gleichen Typs vereinfachen<br />

die Konfiguration. Erfahrene Administratoren<br />

empfehlen aber andererseits auch,<br />

Funktion<br />

Schaltet eine Partition auf Ausfall<br />

Fügt eine Partition dem <strong>RAID</strong> hinzu<br />

Entfernt eine Partition<br />

Stoppt ein <strong>RAID</strong><br />

Infos über Device oder <strong>RAID</strong><br />

Mehr Details<br />

Zeigt detallierte Infos<br />

Zum Anlegen des <strong>RAID</strong> dient dann der<br />

Mdadm-Befehl »‐‐create«, zusammen <strong>mit</strong><br />

dem gewünschten <strong>RAID</strong>-Level <strong>und</strong> den<br />

erforderlichen Partitionen.:<br />

mdadm ‐‐create /dev/md0 ‐‐level=5 ‐‐raid-U<br />

devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1<br />

Alternativ lässt sich ein <strong>RAID</strong> auch <strong>mit</strong><br />

weniger Platten als nötig erstellen, wenn<br />

man »‐‐devices« entsprechend reduziert<br />

oder statt einer Partition »missing« angibt.<br />

Ist die eingestellte Anzahl an Devices<br />

erreicht, synchronisiert das <strong>RAID</strong>-Subsystem<br />

den neuen Verb<strong>und</strong>, auch wenn<br />

noch keine Daten gespeichert sind. Ein<br />

Dateisystem oder Logical Volumes lassen<br />

sich aber jetzt bereits anlegen. Mehr<br />

Informationen zu letzterem Thema bietet<br />

ein LVM-Workshop von Charly Kühnast,<br />

der unter [3] frei zugänglich ist.<br />

Fazit<br />

Raider hilft Administratoren bei der Konvertierung<br />

konventioneller Linux-Partitionen<br />

in <strong>RAID</strong>-Systeme. Dabei unterstützt<br />

es eine Reihe von Dateisystemen <strong>und</strong><br />

die <strong>RAID</strong>-Level 1, 4, 5, 6, <strong>und</strong> 10 sowie<br />

Partitionstabellen im MBR wie auch im<br />

GPT-Format. Das Tool funktioniert zuverlässig<br />

<strong>und</strong> stellt durch das Vertauschen<br />

der Platten sicher, dass ein funktionsfähiges<br />

System entsteht <strong>und</strong> der sichere<br />

Rückweg zum Ausgangszustand nicht<br />

verbaut wird.<br />

n<br />

Infos<br />

[1] Raider: [http:// raider. sourceforge. net]<br />

[2] Adam Leventhal, Triple-Parity <strong>RAID</strong>-Z:<br />

[https:// blogs. oracle. com/ ahl/ entry/​<br />

triple_parity_raid_z]<br />

[3] Charly Kühnast, Einführung in LVM, <strong>ADMIN</strong><br />

01/​2012: [http:// www. admin‐magazin. de/​<br />

Das‐Heft/ 2012/ 01/ Einfuehrung‐in‐LVM]<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

55


<strong>RAID</strong>-Systeme<br />

NAS-Speicher<br />

© Mongkol Chakritthakool, 123RF<br />

NAS-Speicherboxen für 5 bis 50 TByte im Vergleich<br />

Alleskönner<br />

<strong>RAID</strong>-Technologie steckt in allen. Worin aber unterscheiden sich zentrale<br />

Speicher für Arbeitsgruppen oder Außenstellen oder kleine Unternehmen,<br />

wie sie alle namhaften Hersteller anbieten? Wir haben sechs Modelle verglichen.<br />

Jens-Christoph Brendel<br />

NAS-Speicher für kleine <strong>und</strong> <strong>mit</strong>tlere<br />

Anwendungen sind heutzutage Alleskönner.<br />

Ihre Hersteller haben erkannt,<br />

dass ein kleiner Rechner, ein Disk-Controller<br />

<strong>und</strong> eine Handvoll Platten nicht<br />

nur als tumber Speicher taugen, sondern<br />

als Zutaten für ein ganzes Portfolio an<br />

Lösungen vom Streaming-Server bis zur<br />

Private Cloud, von der Datenbank bis<br />

zum LDAP-Host, von der Telefonanlage<br />

bis zur Backup-Disk, vom Speicher für<br />

Kameraaufzeichnungen bis zum Storage<br />

für ein kleines CRM- oder ERP-System.<br />

In der Ausprägung dieser Strategie gibt<br />

es allerdings deutliche Unterschiede: Vorweg<br />

gehen Synology <strong>und</strong> Qnap, die beide<br />

Dutzende vorgefertigte Module aller Art<br />

anbieten, die über eine integrierte Paketverwaltung<br />

leicht installierbar sind.<br />

Am anderen Ende finden sich Anbieter,<br />

deren Erweiterungen sich an den Fingern<br />

einer Hand abzählen lassen, weil sie einen<br />

enger abgesteckten Einsatzbereich<br />

anpeilen oder einfach auf eine schlichtere<br />

Ausstattung setzen.<br />

Beim Speicher im engeren Sinne unterscheiden<br />

sich die Offerten oft nicht so<br />

deutlich (Tabelle 1). Alle getesteten NAS-<br />

Speicher liefen <strong>mit</strong> Intel-Prozessoren <strong>und</strong><br />

boten die gängigen Standard-<strong>RAID</strong>-Level,<br />

mindestens 1 <strong>und</strong> 5, die besseren auch<br />

noch eine Variante <strong>mit</strong> doppelter Parität<br />

wie <strong>RAID</strong> 6. Da es sich meistens um Embedded-Linux-Systeme<br />

handelte, sind ein<br />

paar der gängigen Linux-Filesysteme im<br />

Angebot, oft <strong>mit</strong> nur wenigen Wahlmöglichkeiten.<br />

Zwei GByte RAM sind verbreiteter<br />

Konsens, netzwerkseitig bieten<br />

alle zwei Gigabit-Ethernet-Schnittstellen,<br />

manche erlauben die Konfiguration von<br />

Jumbo-Frames (besonders für iSCSI),<br />

viele das Bonding. Alle Geräte laufen<br />

<strong>mit</strong> SATA-Platten (3 oder 6 GB/​s) <strong>mit</strong><br />

bis zu 4 TByte Kapazität. Meistens sind<br />

2,5- oder 3,5-Zoll-Formate verwendbar,<br />

nur Buffalo <strong>und</strong> Netgear sparen sich die<br />

Bohrlöcher für die kleineren Platten in<br />

den Wechselrahmen. In unseren Test<br />

haben wir Systeme <strong>mit</strong> 6 bis 12 Disk-<br />

Slots aufgenommen. Alle Geräte hatten<br />

USB-Schnittstellen für die Erweiterung<br />

<strong>mit</strong> externen Festplatten, nur QNAP<br />

<strong>und</strong> Thecus <strong>und</strong> Iomega verfügen auch<br />

über eine eSATA-Schnittstelle für diesen<br />

Zweck. Alle Geräte ließen sich neben<br />

der NAS-Funktion auch als iSCSI-Target<br />

verwenden <strong>und</strong> da<strong>mit</strong> durch den Client<br />

als Blockdevice einbinden.<br />

Windows-Pflicht<br />

Alle Hersteller außer Synology statteten<br />

ihre Speicherboxen <strong>mit</strong> einem LCD-Panel<br />

aus, das es zumindest ermöglicht, beispielsweise<br />

die via DHCP-erhaltene IP-<br />

Adresse abzufragen. Nur bei Synology ist<br />

für die Installation zudem ein Windows-<br />

Rechner zwingende Voraussetzung, weil<br />

das Gerät im Unterschied zu den meisten<br />

anderen auch nicht von einem internen<br />

Flashspeicher booten kann, sondern<br />

zunächst sein Betriebssystem auf die<br />

Festplatten installieren muss. Ein Linux-<br />

Client für die Linux-Installation auf den<br />

NAS-Speicher ist paradoxerweise nicht<br />

im Angebot.<br />

Recht eng beieinander liegen auch die<br />

Perfomance-Werte (Abbildung 1). Wir<br />

56 Ausgabe 06-2012 Admin www.admin-magazin.de


NAS-Speicher<br />

<strong>RAID</strong>-Systeme<br />

I/O-Performance<br />

sequentielle Operationen<br />

haben alle Testgeräte <strong>mit</strong> Ausnahme der<br />

Modelle von Buffalo <strong>und</strong> Netgear <strong>mit</strong><br />

denselben Platten bestückt: Western Digital<br />

WD3200BEKT Scorpio Black, 320<br />

GByte, 2,5 Zoll, 7200 RPM, 16MB Cache,<br />

SATA-Interface. Die erwähnten Ausnahmen<br />

wurden <strong>mit</strong> vorinstallierten Platten<br />

geliefert <strong>und</strong> boten keine Möglichkeit,<br />

2,5-Zoll-Disks einzusetzen. Für unsere<br />

Benchmarks konfigurierten wir für alle<br />

Probanden <strong>mit</strong> unseren Testplatten eine<br />

<strong>RAID</strong>-5-Gruppe <strong>und</strong> eine globale Hotspare-Platte.<br />

In den beiden Ausnahmefällen<br />

richteten wir <strong>mit</strong> den dort verbauten<br />

größeren Platten ein <strong>RAID</strong>-5 vergleichbarer<br />

Kapazität ein. Die Messwerte gewannen<br />

wir <strong>mit</strong> Bonnie++ auf einem NFSgemounteten<br />

Volume unter Linux.<br />

Im Schnitt erreichten die Probanden beim<br />

sequentiellen Lesen um die 100 MByte/s<br />

<strong>und</strong> beim Schreiben gut 10 Prozent weniger.<br />

Die maximale Transferleistung<br />

der Festplatte liegt bei 147 MByte/​s, die<br />

Differenz wird man größtenteils dem<br />

<strong>RAID</strong>-Overhead zurechnen müssen, beim<br />

Schreiben speziell der Prüfsummenberechnung.<br />

Allerdings kann bei parallelen<br />

I/​O-Operationen auch die Ethernet-<br />

Schnittstelle zum Flaschenhals werden,<br />

weshalb alle Anbieter außer Netgear bei<br />

Bedarf das Bonding/​Teaming mehrerer<br />

Netzwerkinterfaces vorsehen.<br />

Alle Testteilehmer boten Browser-GUIs<br />

für die Administration, wobei sich der<br />

Funktionsumfang <strong>und</strong> die Usability teils<br />

beträchtlich unterschieden. Sehr gute<br />

Oberflächen, die trotz der Funktionsvielfalt<br />

auch nicht überladen wirken, bieten<br />

vor allem Synology <strong>und</strong> QNAP, aber auch<br />

Iomega <strong>und</strong> Thecus. Eher schlicht <strong>und</strong><br />

zurückgenommen präsentiert sich dagegen<br />

zum Beispiel Buffalo.<br />

Hersteller<br />

Netgear*<br />

Buffalo*<br />

Thecus<br />

Iomega<br />

Synology<br />

QNAP<br />

0.00 20.00 40.00 60.00 80.00 100.00 120.00<br />

her oder Computermomnitor verb<strong>und</strong>en<br />

werden kann. Den professionellen Anwendern<br />

dagegen bietet es sich etwa als<br />

zentrale Station für die Datensicherung,<br />

für das Desaster Recovery, als Fileserver,<br />

als zentrale Instanz eines Verzeichnisdienstes<br />

oder bei der Virtualisierung an:<br />

Die Turbo-Station ist für VMware, Citrix<br />

<strong>und</strong> Hyper-V zertifiziert <strong>und</strong> bietet viele<br />

fein granulare Sicherheits- <strong>und</strong> Zugriffsschutzfunktionen<br />

bis zur AES-Verschlüsselung<br />

ganzer Volumes.<br />

Der Mehrkern-Prozessor sorgt für einen<br />

recht hohen Datendurchsatz (Abbildung<br />

2), netzwerkseitig gibt es zumindest als<br />

Option auch 10 GbE-Schnittstellen, alternativ<br />

lassen sich die vier 1 GbE-Ports<br />

bündeln. Externe Platten, etwa für ein<br />

Backup des <strong>RAID</strong>-Speichers, lassen sich<br />

über das schnelle USB-3.0 konnektieren.<br />

Das Modell von QNAP ist zwar das teuerste<br />

im Testfeld, hat aber auch einiges<br />

sequentiell Schreiben<br />

sequentiell Lesen<br />

MByte/s<br />

Abbildung 1: Mit Bonnie++ gemessene NFS-Performance-Werte der Probanden (* <strong>mit</strong> Platten des Herstellers).<br />

zu bieten, was bei entsprechendem Bedarf<br />

etwas höhere Ausgaben rechtfertigen<br />

kann.<br />

E Synology DS 2413+<br />

Die DiskStation 2413+ ist ein topaktuelles<br />

Modell, das <strong>mit</strong> seinen 12 Disk-Slots<br />

das obere Ende der Testrange markiert,<br />

die wir diesmal ausgewählt hatten. Da<strong>mit</strong><br />

sind immerhin bis zu 48 TByte Speicher<br />

realisierbar, der <strong>mit</strong> einer Erweiterungseinheit<br />

Synology DX1211 noch einmal<br />

verdoppelt werden kann. Das prädestiniert<br />

den NAS-Server schon für eine<br />

Verwendung in kleineren Unternehmen<br />

oder auch in größeren Abteilungen (Abbildung<br />

3).<br />

Zusammen <strong>mit</strong> dem Modell von QNAP<br />

bietet dieser NAS-Speicher die meisten<br />

Module zum Nachrüsten von Funktionen,<br />

darunter diverse Medien-Server für<br />

E QNAP TS 879-Pro<br />

Die Installation geht bei diesem Modell<br />

kinderleicht von der Hand, denn es ist<br />

keine spezielle Client-Software nötig,<br />

sondern der Speicher bootet von einem<br />

internen Flash-Memory in eine übersichtliche<br />

Web-Oberfläche.<br />

Das Modell zählt zu den funktionsreichsten<br />

Testkandidaten <strong>und</strong> spricht dabei sowohl<br />

professionelle wie auch Heimanwender<br />

an. Letzteren hat es als relativ seltene<br />

Besonderheit einen HDMI-Ausgang<br />

zu bieten, der direkt <strong>mit</strong> einem Fernse-<br />

Abbildung 2: Auch ein leistungsfähiges Ressourcen-Monitoring ist in die Turbo-Station von QNAP eingebaut.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

57


<strong>RAID</strong>-Systeme<br />

NAS-Speicher<br />

Audio- <strong>und</strong> Video-Streams, Backup-Server,<br />

Bilderspeicher, LDAP-, Syslog- <strong>und</strong><br />

DHCP-Server sowie verschiedenste vordefinierte<br />

Applikationen von Asterisk bis<br />

OpenERP, von Drupal oder Mediawiki,<br />

bis Zarafa, vTiger oder Moodle <strong>und</strong> so<br />

weiter. Insgesamt haben wir 15 eigene<br />

<strong>und</strong> über 20 Apps von Drittanbietern gezählt.<br />

Für den Unternehmenseinsatz enthält die<br />

DiskStation eine Reihe von Features, die<br />

die Verfügbarkeit erhöhen: Alle Platten<br />

sind selbstverständlich hot-swappable,<br />

zwischen den beiden Netzwerkinterfaces<br />

lässt sich ein Failover konfigurieren,<br />

<strong>und</strong> auch die Lüfter können füreinander<br />

einspringen. Unter Sicherheitsgesichtspunkten<br />

ist der Support für Windows<br />

ACLs hervorzuheben, der auf alle Volumes<br />

angewandt werden kann, darunter<br />

auch AFP, FTP, File Station, NFS <strong>und</strong><br />

WebDAV.<br />

In Zeiten geringer Last spart die DiskStation<br />

dank HDD Hibernation Strom <strong>und</strong><br />

erhöht die Lebensdauer der Platten.<br />

E Iomega StorCenter<br />

px6-300d<br />

Die Web-GUI (Abbildung 4) bei Iomega<br />

bietet eine Vielzahl an Optionen <strong>und</strong> ist<br />

dabei leicht bedienbar, aber nicht so modular<br />

anpassbar wie bei manchen Konkurrenten.<br />

Einen Linux-Client gibt es auf<br />

Wunsch zusätzlich. Das Betriebssystem<br />

LifeLine profitiert vom Know-how des<br />

Speichergiganten EMC <strong>und</strong> wurde speziell<br />

für kleine Unternehmen <strong>und</strong> Heimanwender<br />

maßgeschneidert. Mit Blick auf<br />

Protokolle, Backup sowie Datenschutz,<br />

Dateimanagement <strong>und</strong> Media-Serving<br />

mangelt es nicht an nützlichen Funktionen.<br />

Dazu gehört beispielsweise auch ein<br />

integrierter Printserver für USB-Drucker.<br />

Auch Iomega bietet nun (wie QNAP,<br />

Synology <strong>und</strong> andere) eine sogenannte<br />

Personal Cloud, was allerdings auch<br />

hier nicht viel mehr als ein altbekannter<br />

Webzugang ist, der <strong>mit</strong> einer Synchronisierung<br />

oder im Falle von Iomega einer<br />

möglichen Replizierung auf ein zweites,<br />

geografisch getrenntes StorCenter<br />

verb<strong>und</strong>en ist. Immerhin ist ein derart<br />

zentralisierter Speicher im Internet für<br />

Tabelle 1: Basisdaten<br />

Feature QNAP Synology Iomega Thecus Buffalo Netgear<br />

Modell TS-879 Pro DS 2413+ StorCenter px6- N6850 Terastation 5800 ReadyNAS Pro6<br />

300d<br />

Hersteller Qnap Systems Inc. Synology Iomega Thecus Technology Buffalo Technology NETGEAR<br />

Hardware<br />

Prozessor<br />

Embedded Linux<br />

ab ca. 1700 Euro<br />

(ohne Platten)<br />

Dual Core Intel Core<br />

i3-2120 Processor<br />

3.3 GHz<br />

DSM 4.0 (Basis:<br />

LInux)<br />

ab ca. 1250 Euro<br />

(ohne Platten)<br />

Intel Atom D2700,<br />

2.13GHz<br />

EMC LifeLine Linux Linux <strong>RAID</strong>iator OS<br />

ab ca. 880<br />

(ohne Platten)<br />

ab ca. 1100 Euro<br />

(ohne Platten)<br />

Intel Atom 1.8 GHz Intel Pentium G620,<br />

2.60GHz<br />

ab ca. 1500 Euro<br />

(ohne Platten)<br />

Intel Atom D2700<br />

Dual Core<br />

ab ca. 940 Euro<br />

(ohne Platten)<br />

Intel e5300 2.6GHz<br />

Memory 2 GByte DDR3 RAM 2GB DDR3 RAM 2 GByte RAM 2 GByte DDR3 RAM 2 GB DDR3-RAM 1 GByte RAM<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

100-240V AC,<br />

50/​60Hz, 350W<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

100-240V AC,<br />

50/​60Hz<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

extern<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

300W Single Power<br />

(80plus)<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

100-240 V,<br />

50/​60 Hz<br />

2 x Gigabit RJ-45<br />

Ethernet<br />

120/​230 V<br />

50/​60 Hz<br />

Lüfter 2 Stück 2 Stück 2 Stück 1 Stück 2 Stück 2 Stück<br />

Disk-Slots 8x, hot-swappable 12x, hot-swappable 6x, hot swappable 6 x, hot swappable 8x , hot swapable 6 x, hot swappable<br />

Betriebssystem<br />

Preis<br />

Netzwerkinterfaces<br />

Netzteile<br />

Festplattentypen<br />

3,5- oder 2,5-Zoll<br />

SATA 6Gb/​s oder<br />

3Gb/​s<br />

max.<br />

Plattengröße<br />

USB 2xUSB 3.0,<br />

4xUSB 2.0<br />

3,5- oder 2,5-Zoll<br />

SATA II<br />

3,5- oder 2,5-Zoll<br />

SATA II<br />

3,5- oder 2,5-Zoll<br />

SATA II<br />

SATA (3 Gbit/​s),<br />

3,5-Zoll<br />

4 TByte 4 TByte 3 TByte 4TByte 4 TByte 3 TByte<br />

2xUSB 3.0,<br />

4xUSB 2.0<br />

1 x USB 3.0,<br />

2 x USB 2.0<br />

4xUSB 3.0,<br />

4xUSB 2.0<br />

2 x USB 2.0,<br />

3 x USB 3.0<br />

SATA-I oder SATA-II,<br />

3,5-Zoll<br />

3 x USB 2.0<br />

e-SATA ja nein nein ja nein nein<br />

LCD-Panel ja nein ja ja ja ja<br />

Bauform Desktop,<br />

217.5(H) x 327(B) x<br />

321.2(T) mm<br />

Desktop,<br />

270(H) x 300(B) x<br />

340(T) mm<br />

Desktop Mini-Tower<br />

270(H) x 176(B) x<br />

257(T) mm<br />

Desktop Mini-Tower<br />

320(H) x 215(B) x<br />

283(T) mm<br />

Desktop,<br />

300(B) x 215(H) x<br />

230(T) mm<br />

Mini-Tower<br />

285(H) x 170(B) x<br />

250(T) mm<br />

58 Ausgabe 06-2012 Admin www.admin-magazin.de


NAS-Speicher<br />

<strong>RAID</strong>-Systeme<br />

plus 4xUSB 2.0), eSATA <strong>und</strong> HDMI, optionalem<br />

10 GbE-Netzwerk (PCI-Express-<br />

Steckplatz) <strong>und</strong> Sandy-Bridge-Prozessor.<br />

Ein Slimline-Blu-ray-Laufwerk lässt sich<br />

nachträglich einbauen, sogar eine Fernbedienung<br />

via Smartphone ist möglich.<br />

Das chice Gehäuse <strong>mit</strong> hellem OLED-<br />

Display <strong>und</strong> Touch-Tasten sticht ins Auge.<br />

Eine senkrechte LED-Zeile liefert während<br />

des Bootens sogar eine kleine Lightshow,<br />

die auch Fehler signalisiert. Dafür bleibt<br />

das Lüftergeräusch immer vernehmbar.<br />

Das mag auch am höheren Kühlungsbedarf<br />

der Pentium-CPU liegen.<br />

Wie steht es um die inneren Werte? Die<br />

Web-GUI (Abbildung 5) macht im Unterschied<br />

zu Synology oder QNAP einen<br />

eher technischen Eindruck <strong>und</strong> ist wenikleinere<br />

Unternehmen oder Außenstellen<br />

sicher eine sinnvolle Sache.<br />

Kleine Schwachstellen leistet sich der<br />

ansonsten gute NAS-Server bei der IPv6-<br />

Unterstützung (fehlt), bei der Speicherkonfiguration,<br />

die nur einen Pool <strong>mit</strong><br />

allen Platten zulässt, beim fehlenden<br />

SSH-Zugang <strong>und</strong> dem ebenfalls fehlenden<br />

Zugriff auf die S.M.A.R.T-Daten der<br />

Festplatten.<br />

E Thecus N6850<br />

Das Thecus N6850 haben wir direkt vom<br />

Hersteller aus Fernost importiert, es ist<br />

aber auch über hiesige Händler erhältlich.<br />

Auffällig an diesem Gerät ist seine<br />

sehr gute Ausstattung <strong>mit</strong> USB 3.0 (4x<br />

Auch die Terastations der 5000er-Serie<br />

stammen aus diesem Jahr. Der Herstel-<br />

ger auf Multimedia zugeschnitten. Dafür<br />

bietet sie zahlreiche Einstellmöglichkeiten,<br />

etwa bei der <strong>RAID</strong>-Konfiguration inklusive<br />

einer relativ großen Auswahl an<br />

Filesystemen. Der professionelle Anwender<br />

wird die etwas höhere Komplexität<br />

zugunsten der erweiterten Konfigurationsoptionen<br />

hinnehmen. Bei den Benchmarks<br />

spielt das Thecus dank seiner performanten<br />

Hardware im Vorderfeld <strong>mit</strong>.<br />

Neben dem hier getesteten Modell gibt es<br />

noch Varianten <strong>mit</strong> 8 <strong>und</strong> 10 Disk-Slots.<br />

E Buffalo Terastation<br />

5800<br />

Tabelle 2: Services <strong>und</strong> Software-Features<br />

Feature QNAP Synology Iomega Thecus Buffalo Netgear<br />

IPv4 ja ja ja ja ja ja<br />

IPv6 ja, Dual Stack ja, getunnelt nein ja, Dual Stack nein ja<br />

VLAN ja ja ja no nein ja<br />

NFS V3 ja ja ja ja ja ja<br />

NFS V4 nein nein nein ja nein nein<br />

CIFS/​SMB ja ja ja ja ja ja<br />

iSCSI ja ja ja ja ja ja<br />

AFP ja ja ja ja ja ja<br />

HTTP/​HTTPS ja ja ja ja ja ja<br />

FTP/​FTPS ja ja ja ja ja ja<br />

TFTP ja ja ja ja nein nein<br />

SSH ja ja nach Aktivierung ja nein ja<br />

DHCP-Client ja ja ja ja ja ja<br />

UPnP (Bonjour) ja ja ja ja nein ja<br />

Software-Features<br />

Verschlüsselung ja ja, per Shared ja, AES 256 ja nein nein<br />

Folder<br />

Kompression nein nein nein nein nein nein<br />

Deduplikation nein nein nein nein nein nein<br />

Replikation ja ja ja ja (Data Guard) ja ja<br />

Snapshots ja (nur iSCSI) in Time Backup nein nein nein ja<br />

Antivirus Protection ja ja nein ja nein nein<br />

Backup<br />

ja, diverse Möglichkeiten<br />

ja ja ja ja ja<br />

Web-GUI ja ja ja ja ja ja<br />

Logging ja ja ausgewählte Ereignisse<br />

ja ja ja<br />

Ressourcen-Monitor ja ja ohne Performancedaten<br />

ja nein nein<br />

SNMP ja ja ja ja ja ja<br />

S.M.A.R.T-Daten ja ja nein ja nein ja<br />

Wake-on-LAN ja ja ja ja ja ja<br />

interne Apps<br />

Port-Trunking/​NIC-<br />

Teaming<br />

ja, z.B. Media-,<br />

File-, Backup- Foto-<br />

Server, u.v.a.m.<br />

ja, z.B. Media-,<br />

File-, Backup- Foto-<br />

Server, u.v.a.m.<br />

ja<br />

ja, Apps for Media-,<br />

Web- oder DB-<br />

Server, etc.<br />

ja ja ja ja ja nein<br />

ja<br />

ja<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

59


<strong>RAID</strong>-Systeme<br />

NAS-Speicher<br />

Abbildung 3: Konfiguration einer iSCSI-Lun auf der Synology DiskStation 2413+. iSCSI kann parallel zu den<br />

NAS-Funktionen verwendet werden.<br />

Abbildung 4: Auch das NAS von Iomega kann <strong>mit</strong> einer leicht bedienbaren grafischen Oberfläche im<br />

Browserfenster glänzen.<br />

Abbildung 5: Der Ressourcen-Monitor des Thecus N6850 <strong>mit</strong> grafischer Darstellung des Speicherverbrauchs<br />

<strong>und</strong> der Netzwerkauslastung.<br />

ler hatte dabei wohl vor allem Interessenten<br />

im Blick, die eine Speicher- <strong>und</strong><br />

Verwaltungslösung für den Einsatz von<br />

IP-Kameras suchen. Über die Management-Software<br />

„Buffalo Surveillance<br />

Server Client B<strong>und</strong>le“ ist es möglich,<br />

Sicherheits- oder IP-Kameras einzubinden,<br />

die das RTSP-Protokoll nutzen <strong>und</strong><br />

ONVIF-konform sind. Die Software bietet<br />

Kamera- <strong>und</strong> Speicherplatzverwaltung<br />

sowie eine speicherübergreifende Suche.<br />

Sie kann parallel zu Verwaltungsaufgaben<br />

oder Suchen gleichzeitig aufnehmen.<br />

Buffalo gibt an, dass die TeraStations<br />

mehr als 1400 Kameramodelle von über<br />

180 Kamera-Herstellern unterstützen.<br />

Entsprechend dieser Ausrichtung findet<br />

man bei diesem Modell keine solche Fülle<br />

an nachinstallierbaren Funktionen <strong>und</strong><br />

auch keine so ausgebaute <strong>und</strong> optisch<br />

ansprechende Web-GUI (Abbildung 6)<br />

wie etwa bei Synology oer QNAP. Die Anmutung<br />

ist eher reduziert <strong>und</strong> funktional.<br />

Eingeschränkt ist auch die Wahlmöglichkeit<br />

bei Festplatten: 2,5-Zoll-Modelle sind<br />

nicht vorgesehen.<br />

Für den Unternehmenseinsatz hat die<br />

TeraStation Etliches zu bieten. Etwa die<br />

Möglichkeit, Amazon S3 zu integrieren<br />

oder über die integrierten USB 3.0-Anschlüsse<br />

externe Platten anzubinden.<br />

Zugriffsbeschränkungen lassen sich entweder<br />

über die integrierte Benutzerverwaltung<br />

oder Active-Directory verwalten.<br />

Im Lieferumfang der TeraStations finden<br />

sich außerdem zehn Lizenzen von Nova-<br />

BACKUP Business Essentials.<br />

E Netgear ReadyNAS Pro6<br />

ReadyNAS Pro6 von Netgear verschaffte<br />

sich in unserem Testfeld im wahrsten<br />

Sinn des Wortes Gehör, nämlich als das<br />

lauteste Gerät, das auch im Ruhezustand<br />

stets vernehmlich blieb. Löblich war dagegen<br />

zu verzeichnen, dass es den nötigen<br />

Installer auch als Linux-Shellskript<br />

gab (das dann allerdings bei unseren Versuchen<br />

keinen der installierten Browser<br />

fand <strong>und</strong> so<strong>mit</strong> auch kaum weiterhelfen<br />

konnte).<br />

Das ReadyNAS wird meist bestückt <strong>mit</strong><br />

Platten verkauft – die Optionen reichen<br />

dabei von 1 bis zu 3 TByte Disks – es<br />

erschwert den Einbau eigener Festplatten<br />

auch insoweit, als den Wechselrahmen<br />

Bohrungen für 2,5-Zoll-Platten fehlen.<br />

60 Ausgabe 06-2012 Admin www.admin-magazin.de


NAS-Speicher<br />

<strong>RAID</strong>-Systeme<br />

Abbildung 6: Die Konfigurationsoberfläche der neuen TeraStation von Buffalo kommt eher schlicht-funktional<br />

daher. Eine Zielgruppe sind Nutzer von Überwachungskameras.<br />

Abbildung 7: Die Startseite der Weg-GUI des Netgear ReadyNAS Pro6 gibt einen Überblick. Die Optionen sind<br />

überschaubar, dafür ist die Bedienung einfach.<br />

Dafür fällt eine Erweiterung leichter,<br />

denn das standardmäßig konfigurierte<br />

proprietäre X-<strong>RAID</strong> 2 lässt sich durch<br />

Hinzustecken weiterer Platten vergrößern.<br />

Dieses Feature war einmalig unter<br />

den Testteilnehmern.<br />

Kompliziert wird es dann allerdings<br />

wieder, wenn man das vorbestimmte<br />

<strong>RAID</strong>-Level nicht mag, sondern einen<br />

<strong>RAID</strong>-Standard konfigurieren will. Dafür<br />

ist ein Factory Reset <strong>mit</strong> aufgebogener<br />

Büroklammer nötig, der ein zehnminütiges<br />

Zeitfenster öffnet, in dem allein die<br />

Änderung bewerkstelligt werden kann.<br />

Wählbar ist dabei zudem auch nur das<br />

<strong>RAID</strong>-Level, das immer alle vorhandenen<br />

Platten benutzt.<br />

Auffällig am Netgear-NAS ist die Verwendung<br />

einer ausgewachsenen Desktop-<br />

CPU (Intel Pentium), wo viele Mitbewerber<br />

eher zu etwas leistungsschwächeren,<br />

aber stromsparenden Atom-Prozessoren<br />

greifen. In den von uns gemessenen<br />

I/​O-Leistungen schlug sich das Mehr an<br />

Prozessor-Power aber nicht signifikant<br />

nieder.<br />

Das Netgear ReadyNAS Pro6 verzichtet<br />

auf eine große Anzahl nachinstallierbarer<br />

Features. Kauft man es bestückt <strong>und</strong><br />

vorkonfiguriert, erhält man ein besonders<br />

einfach zu bedienendes Gerät, das<br />

sich in einem gewissen Rahmen sogar<br />

im laufenden Betrieb erweitern lässt. Für<br />

Standardaufgaben wie Fileserver, Backup<br />

oder Virtualisierungsspeicher eignet es<br />

sich dabei gut. Den Preis für die größte<br />

Vielseitigkeit gewinnt es allerdings sicher<br />

nicht. (jcb)<br />

n<br />

Tabelle 3: Rechte- <strong>und</strong> Diskmanagement<br />

Feature QNAP Synology Iomega Thecus Buffalo Netgear<br />

Microsoft Active Directory ja ja ja ja, für Authentifizierung<br />

ja<br />

ja<br />

(AD)<br />

LDAP Server ja ja nein nein nein nein<br />

LDAP Client ja ja nein ja ja nein<br />

<strong>RAID</strong>-Level<br />

JBOD ja ja ja ja ja ja<br />

<strong>RAID</strong>-Level 0, 1, 5, 6, 10 0, 1, 5, 6, 10, Synology<br />

Hybrid<br />

0, 1, 10, 5, 6 0, 1, 5, 6, 10, 50 0, 1, 5, 6, 10, 50,<br />

51, 60, 61<br />

0, 1, 5, 6 , X-<strong>RAID</strong>2<br />

(proprietär)<br />

Global Spare Disk ja nein ja ja ja ja<br />

Filesysteme (intern)<br />

Ext3 ja nein nein ja nein ja<br />

Ext4 ja ja nein ja nein ja<br />

XFS nein nein je ja ja nein<br />

ZFS nein nein nein nein nein nein<br />

Btrfs nein nein nein nein nein nein<br />

WAFL nein nein nein nein k.A. nein<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

61


Know-how<br />

Unicode-Migration<br />

© joingate, 123RF<br />

Wie die Unicode-Migration einer Oracle-DB gelingt<br />

Ausweg aus<br />

Babylon<br />

Die Globalisierung bringt es <strong>mit</strong> sich, dass der Mitarbeiter in Japan dieselbe<br />

Datenbank befüllt wie sein Kollege in Berlin. Voraussetzung ist ein<br />

Zeichensatz wie Unicode, der alle sinnvollen Zeichen der Welt beinhaltet.<br />

Worauf bei der Umstellung einer Oracle Datenbank auf Unicode zu achten<br />

ist <strong>und</strong> wo Fallstricke lauern, diskutiert dieser Artikel. Johannes Ahrends<br />

Für eine Migration zu Unicode bietet<br />

Oracle mehrere Möglichkeiten. Allerdings<br />

scheitern manche, wie beispielsweise<br />

das von Oracle seit 2011 zur Verfügung<br />

gestellte Oracle Database Migration Utility<br />

for Unicode – kurz DMU – in der<br />

Praxis oft daran, dass die Vorgaben der<br />

Unternehmen die nötige Downtime nicht<br />

zulassen, oder dass die Einsatzvoraussetzungen<br />

des Produktes (Release- <strong>und</strong><br />

Patchstand) nicht gegeben sind. Mit dem<br />

hier vorgestellten Verfahren wurden dagegen<br />

bereits sehr große Datenbanken in<br />

sehr kurzer Zeit migriert.<br />

Warum Unicode?<br />

Jede Datenbank wird <strong>mit</strong> einer bestimmten<br />

Code Page erstellt. Auf dem Weg der<br />

Daten von der Anwendung in die Datenbank<br />

werden die Zeichen dann entsprechend<br />

übersetzt: Die Code Page der<br />

Anwendung wird auf die der Datenbank<br />

gemapt. Das gilt jedoch nur dann, wenn<br />

es sich um Zeichen-Datentypen handelt<br />

(»CHAR«, »VARCHAR2«, »CLOB«,<br />

»LONG«, »NCHAR«, »NVARCHAR2«,<br />

»NCLOB«), denn Binärdaten möchte man<br />

natürlich nicht konvertieren.<br />

Die Konvertierung findet während des<br />

Transports (über Oracle Net) automatisch<br />

statt, das heißt ein auf dem Windows<br />

Rechner eingetipptes Eurozeichen (0x80<br />

unter WIN-1252) wird in der Datenbank<br />

als 0xA4 eingetragen, wenn sie <strong>mit</strong> dem<br />

Zeichensatz ISO-8859P15 angelegt wurde.<br />

Wurde die Datenbank allerdings <strong>mit</strong> einem<br />

Unicode-Zeichensatz erstellt, dann<br />

legt sie das Eurozeichen als drei Byte<br />

lange Sequenz ab (0xE282AC), benötigt<br />

also dreimal so viel Platz wie zuvor.<br />

In der Vergangenheit wurden die meisten<br />

Datenbanken in Europa <strong>mit</strong> einem Ein-<br />

Byte-Zeichensatz angelegt (also ISO-8859<br />

oder MSWIN-1252). Im Zuge der Globalisierung<br />

wird es für die Unternehmen<br />

nun aber immer wichtiger, Datenbanken<br />

weltweit einzusetzen. Daher empfiehlt<br />

Oracle seit einiger Zeit, Unicode als Standardzeichensatz<br />

zu verwenden. Viele<br />

moderne Anwendungen (beispielsweise<br />

Java-Applikationen) verwenden darüber<br />

hinaus ebenfalls standardmäßig Unicode.<br />

Dasselbe gilt für viele heutige Betriebssysteme<br />

wie Microsoft Windows 7 oder<br />

Linux.<br />

Bei der Umstellung einer Oracle-Datenbank<br />

auf Unicode können die folgenden<br />

Schwierigkeiten auftreten:<br />

Spalten laufen über<br />

Beim Design von Tabellen ist darauf zu<br />

achten, dass die Breite einer Spalte als<br />

bestimmte Anzahl von Zeichen <strong>und</strong> nicht<br />

etwa als Anzahl Bytes definiert ist. Als<br />

Beispiel eignen sich hierfür Felder, die<br />

<strong>mit</strong> dem Datentyp CHAR angelegt wurden,<br />

zum Beispiel<br />

CREATE TABLE status (<br />

statusid CHAR(1),<br />

beschreibung VARCHAR2(50));<br />

Die Frage ist, handelt es sich bei der<br />

„1“ um die Länge ein Byte oder um ein<br />

64 Ausgabe 06-2012 Admin www.admin-magazin.de


Unicode-Migration<br />

know-how<br />

Zeichen. Für diese Festlegung verwendet<br />

die Oracle-Datenbank den Parameter<br />

»NLS_LENGTH_SEMANTICS«, der entsprechend<br />

auf »CHAR« oder »BYTE« einzustellen<br />

ist. Da diese Semantik erst seit<br />

Oracle 9i zur Verfügung steht <strong>und</strong> vorher<br />

ausschließlich Byte verwendet werden<br />

konnte, ist bei vielen älteren Anwendungen<br />

(oder bei Anwendungen, die über<br />

mehrere Oracle Releases migriert wurden),<br />

die Längensemantik immer noch<br />

auf »BYTE« eingestellt. Bei einer Unicode-<br />

Migration kann das dazu führen, dass ein<br />

Datensatz nicht eingefügt werden kann,<br />

weil in ihm beispielsweise ein Umlaut<br />

vorkommt. Daraus resultiert dann eine<br />

Fehlermeldung wie die folgende:<br />

ORA‐02374: conversion error loading table U<br />

"DEMO"."STATUS"<br />

ORA‐12899: value too large for column U<br />

STATUSID (actual: 2, maximum: 1)<br />

In diesem Fall enthielt die Status-Spalte<br />

als ID ein »Ü«, was im Unicode nun aber<br />

ein zwei Byte langes Zeichen ist.<br />

Bei neuen Anwendungen gibt man die<br />

Längensemantik deshalb immer explizit<br />

an. Alte Anwendungen sind im Zuge der<br />

Migration anzupassen. Das obige Beispiel<br />

wäre also wie folgt zu ändern:<br />

CREATE TABLE status (<br />

statusid CHAR(1 CHAR),<br />

beschreibung VARCHAR2(50 CHAR));<br />

Maximale Datentyplänge<br />

In der Oracle-Dokumentation wird oft davon<br />

geredet, dass der Datentyp »CHAR«<br />

die Länge 2000 Zeichen hat <strong>und</strong> »VAR-<br />

CHAR2« 4000 Zeichen fasst. Das ist aber<br />

nicht richtig, denn die maximale Länge<br />

wird in Byte gerechnet, das heißt ein<br />

»VARCHAR2«-Feld kann maximal 4000<br />

Byte lang werden.<br />

CREATE TABLE status (<br />

statusid CHAR(1 CHAR),<br />

beschreibung VARCHAR2(4000 CHAR));<br />

In diesem Fall ist also die Längensemantik<br />

falsch, da das Feld »BESCHREIBUNG«<br />

tatsächlich nur 4000 Byte lang sein kann<br />

(trotzdem lässt Oracle die unter Umständen<br />

irreführende Definition zu). Wenn<br />

jetzt dieses Feld bis zum letzten Zeichen<br />

gefüllt ist <strong>und</strong> Umlaute oder Sonderzeichen<br />

enthält, die im Unicode länger als<br />

ein Byte sind, dann muss die Konvertierung<br />

fehlschlagen. Stattdessen muss der<br />

Anwender den Datentyp in »LONG« oder<br />

besser »CLOB« ändern. Die Definition der<br />

Tabelle sieht dann für das obige Beispiel<br />

so aus:<br />

CREATE TABLE status (<br />

statusid CHAR(1 CHAR),<br />

beschreibung CLOB)<br />

LOB (beschreibung) STORE AS (<br />

ENABLE STORAGE IN ROW);<br />

Standardtypen statt<br />

National Characters<br />

Wenn in der Datenbank nur gelegentlich<br />

spezielle Zeichen, wie Arabisch oder<br />

Kanji abzuspeichern sind, kann man<br />

auch die sogenannten National Language<br />

Datentypen (»NCHAR«, »NVARCHAR2«<br />

oder »NCLOB«) benutzen. Durch die generelle<br />

Umstellung<br />

der Datenbank auf<br />

Unicode entfällt<br />

diese Notwendigkeit <strong>und</strong> die »N«-Datentypen<br />

lassem sich wieder in „normale“<br />

Datentypen umwandeln. Dafür passt<br />

man einfach den »CREATE«-Befehls der<br />

entsprechenden Tabelle an.<br />

Schmutzeffekte in der<br />

Datenbank<br />

Dieser Punkt ist am schwersten zu beherrschen,<br />

denn eigentlich hat die Datenbank<br />

alles richtig gemacht, <strong>und</strong> trotzdem<br />

sind die Daten falsch. Das kommt dann<br />

vor, wenn zwei Systeme Daten ohne Konvertierung<br />

übertragen. Wurde beispielsweise<br />

die Datenbank <strong>mit</strong> dem Zeichensatz<br />

»WE8MSWIN1252« erstellt <strong>und</strong> auf<br />

einem beliebigen Client (zum Beispiel<br />

auf der Kommandozeile unter DOS) die<br />

Variable »NLS_LANG=GERMAN_GER-<br />

MANY.WE8MSWIN1252« eingestellt,<br />

dann geht die Datenbank davon aus, dass<br />

keine Zeichenkonvertierung notwendig<br />

ist, da ja beide Zeichensätze identisch<br />

sind. Für den DOS-Client sieht es jetzt<br />

bei der Abfrage so aus, als ob die Zeichen<br />

richtig dargestellt würden, denn auf<br />

dem Rückweg werden sie ja ebenfalls<br />

nicht konvertiert. Bei der Abfrage <strong>mit</strong><br />

einem Windows-Client (etwa <strong>mit</strong> dem<br />

Tool DELL Toad for Oracle) stellen wir<br />

allerdings plötzlich fest, dass irgendwelche<br />

Hieroglyphen gespeichert wurden<br />

(Abbildung 1).<br />

Dieser Fehler kann nur durch Entladen<br />

der Daten über eine entsprechende<br />

Schnittstelle <strong>und</strong> anschließendes erneutes<br />

Laden <strong>mit</strong> dem „richtigen“ Zeichensatz<br />

behoben werden. Die Migration<br />

wird dadurch erheblich erschwert.<br />

Glücklicherweise sind diese Fehler heute<br />

eher selten anzutreffen, weil sie dank der<br />

Abbildung 1: Fehlerhafte Zeichendarstellung nach einer Datenübertragung ohne<br />

Konvertierung.<br />

Mehr auf den Datenbanktagen<br />

Mehr zu diesem <strong>und</strong> zu vielen anderen Themen r<strong>und</strong> um Datenbanken<br />

bieten die Frankfurter Datenbanktage, die am vom 14. <strong>und</strong> 15. März 2013<br />

in Frankfurt/​Main stattfinden. Veranstalter sind die Firma Held Informatik<br />

(fachliche Leitung) <strong>und</strong> die Firma e/​c/​s (organisatorische Leitung). Gut<br />

50 hochkarätige Referenten – darunter der Autor dieses Beitrages – behandeln<br />

Themen r<strong>und</strong> um Datenbankmanagementsysteme wie Oracle, MS<br />

SQL Server, PostgreSQL, MySQL <strong>und</strong> NoSQL, DB2 aber auch allgemeine<br />

Datenbankbetriebssysteme, heterogene Datenbankumgebungen oder<br />

Datenbank-Monitoring. Der Fokus liegt auf neuesten Technologien <strong>und</strong><br />

deren Bewertung. Die auf 180 Personen begrenzte Teilnehmerzahl soll<br />

einen intensiven Erfahrungsaustausch garantieren. Anmeldungen sind<br />

unter [http:// www. frankfurter‐datenbanktage. de/ index. php/ anmeldung1.​<br />

html] möglich.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

65


Know-how<br />

Unicode-Migration<br />

grafischen Werkzeuge schnell<br />

erkennbar sind.<br />

Die Migration<br />

Die eigentliche Migration erfolgt<br />

in vier Schritten (Abbildung<br />

2):<br />

n Aufbau einer neuen Datenbank.<br />

Die neue Datenbank<br />

wird entsprechend<br />

den Vorgaben des<br />

Unternehmens <strong>und</strong> von Oracle <strong>mit</strong><br />

dem neuen Zeichensatz (in der Regel<br />

»AL32UTF8«) aufgebaut. Als angenehmer<br />

Nebeneffekt ergibt sich dabei,<br />

dass sich die Datenbank komplett<br />

reorganisieren lässt, das heißt<br />

überflüssige Daten, die etwa durch die<br />

Installation von Beispielschemata in<br />

die Datenbank gelangten, kann man<br />

jetzt eliminieren.<br />

n Exportieren der Schemadefinitionen<br />

als ASCII-Datei. Danach exportiert<br />

man die Schemadefinitionen (Abbildung<br />

3) ohne Längensemantik als<br />

ASCII-Datei. Dadurch ergibt sich die<br />

Möglichkeit, anschließend eine Bereinigung<br />

vorzunehmen. Oracle bietet<br />

hierfür ein Package <strong>mit</strong> dem Namen<br />

»dbms_metadata« an. Der Autor hat<br />

sehr gute Erfahrungen <strong>mit</strong> Toad for<br />

Oracle gemacht, da das Tool über eine<br />

grafische Schnittstelle ganz einfach<br />

die komplette Definition auch mehrerer<br />

Schemata als ASCII-Datei erstellt<br />

Abbildung 2: Schematische Darstellung einer Migration.<br />

<strong>und</strong> in den Editor kopiert. Über »find«<br />

<strong>und</strong> »replace« lassen sich dann gegebenenfalls<br />

Änderungen (zum Beispiel<br />

Umstellung von »NVARCHAR2« auf<br />

»VARCHAR2«) durchführen.<br />

n Importieren der Schemadefinitionen.<br />

Das eben erstellte Skript <strong>mit</strong> der Schemadefinition<br />

wird dann in der neuen<br />

Datenbank ausgeführt. Vorher setzt<br />

man allerdings für die gesamte Session<br />

den Parameter »NLS_LENGTH_<br />

SEMANTICS«:<br />

SQL> ALTER SESSION U<br />

SET NLS_LENGTH_SEMANTICS=CHAR;<br />

Da<strong>mit</strong> wird dafür gesorgt, dass allen<br />

Zeichen-Spalten (also »CHAR«, »VAR-<br />

CHAR2«, etc.), die keine explizite Längensemantik<br />

verwenden, »CHAR« als<br />

Längensemantik zugewiesen wird. Da<strong>mit</strong><br />

passen die Umlaute auch wieder in<br />

die Felder.<br />

n Datensätze importieren. Als Letztes<br />

werden die Datensätze, also die<br />

Inhalte der Tabellen einfach<br />

per Export / Import oder Data<br />

Pump übertragen. Beim Importieren<br />

der Daten ist darauf<br />

zu achten, dass die Befehle<br />

ignoriert werden, die die Tabellen<br />

erstellen würden, denn<br />

die gibt es ja schon. Außerdem<br />

müssen die Foreign-Key-<br />

Contraints ausgeschaltet werden,<br />

da die Reihenfolge des<br />

Einfügens der Daten nicht<br />

festgelegt werden kann. Ansonsten<br />

könnte es dazu kommen, dass ein<br />

Detail-Datensatz (zum Beispiel die<br />

Adresse einer Person) nicht eingefügt<br />

werden kann, weil die Daten der Person<br />

selbst (also Vorname, Nachname,<br />

etc.) noch nicht vorhanden sind. Beim<br />

Importieren interessieren wir uns aber<br />

nur dafür, dass ganz am Ende alle<br />

Daten eingefügt sind, dann sollten die<br />

Personen zu den Adressen passen.<br />

Nötige Auszeiten<br />

Sicherlich ist die Auszeit für eine solche<br />

Migration nicht zu vernachlässigen. Bei<br />

kritischen Datenbanken wird daher empfohlen,<br />

eine Replikationssoftware zu nutzen,<br />

die die Änderungen der alten Datenbank<br />

protokolliert <strong>und</strong> nachdem die neue<br />

Datenbank aufgesetzt wurde, in die neue<br />

Datenbank nachträgt. Mit dem Werkzeug<br />

SharePlex for Oracle von Dell (vormals<br />

Quest) wurde so bei einem großen deutschen<br />

Automobilhersteller im Jahr 2010<br />

eine r<strong>und</strong> 10 Terabyte große Datenbank<br />

<strong>mit</strong> einer Auszeit von weniger als zwei<br />

St<strong>und</strong>en migriert, <strong>und</strong> 2011 wurde eine<br />

kleinere Datenbank, die allerdings höchst<br />

kritisch war, ohne jede Downtime von<br />

einem ISO-Zeichensatz auf Unicode umgestellt.<br />

Bei beiden Datenbanken gab es<br />

zudem den Nebeneffekt, dass man noch<br />

mehrere Wochen zum alten System hätte<br />

zurückkehren können. (jcb)<br />

n<br />

Abbildung 3: Export eines Datenbankschemas als ASCII-Datei.<br />

Der Autor<br />

Johannes Ahrends beschäftigt sich seit r<strong>und</strong> 20<br />

Jahren <strong>mit</strong> der Oracle Datenbank <strong>und</strong> den zugehörigen<br />

Tools. Seit 2011 hat er sein eigenes Unternehmen:<br />

CarajanDB – spezialisiert auf Themen<br />

r<strong>und</strong> um Oracle. Johannes Ahrends ist Co-Autor<br />

des Standardwerks „Oracle für den DBA“ <strong>und</strong><br />

wurde <strong>mit</strong> dem Oracle ACE Award geehrt.<br />

66 Ausgabe 06-2012 Admin www.admin-magazin.de


LINUX & DATENBANK<strong>ADMIN</strong>ISTRATOR (M/W)<br />

XYRALITY gehˆ rt seit Verˆ ffentlichung seiner MMOGs Ñ Lords & Knightsì <strong>und</strong> Ñ Crazy Tribesì zu den erfolgreichsten <strong>und</strong> am<br />

schnellsten wachsenden Mobile Games Studios in Europa. Bereits heute arbeiten mehr als 50 engagierte Mitarbeiter an<br />

der nachhaltigen Weiterentwicklung unseres Gameportfolios.<br />

Zum n‰ chstmˆ glichen Zeitpunkt suchen wir einen Linux & Datenbankadministrator (m/w) in Vollzeit.<br />

Zu Ihren Aufgaben z‰ hlen<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Anforderungen<br />

<br />

<br />

<br />

<br />

<br />

Wir bieten<br />

<br />

<br />

<br />

<br />

Dann nutzen Sie die Chance <strong>und</strong> bewerben Sie sich jetzt unter jobs@xyrality.com<br />

<br />

www.xyrality.com/jobs


Know-how<br />

Windows-Lizenzen<br />

© Andrew Neilan, 123RF, 123RF<br />

Windows Server 2012 lizenzieren<br />

Dschungelcamp<br />

Mit Windows 2012 hat Microsoft eine neue Version seines Server-Betriebssystems vorgelegt. Mit mehreren Editionen<br />

<strong>und</strong> unterschiedlichen Zugriffslizenzen ist die Lizenzierungspolitik aber <strong>und</strong>urchsichtig. Ein Versuch, den<br />

Dschungel etwas zu lichten. Thomas Joos<br />

Mit seinen neuen Server-Produkten System<br />

Center 2012, SQL Server 2012 <strong>und</strong><br />

auch Windows Server 2012 ändert Microsoft<br />

teilweise deutlich seine Lizenzierungspolitik.<br />

Unternehmen sollten jetzt<br />

umso mehr darauf achten, welche Edition<br />

sie einsetzen wollen. So verfügen<br />

zum Beispiel die Editionen Standard <strong>und</strong><br />

Datacenter über den gleichen Funktionsumfang,<br />

<strong>und</strong> eine Enterprise-Edition oder<br />

Web-Server-Edition gibt es nicht mehr.<br />

Editionen <strong>und</strong> Lizenzen im<br />

Vergleich<br />

Die wichtigste Veränderung bei Windows<br />

Server 2012 (Abbildung 1) besteht darin,<br />

dass es nur noch die Editionen Standard,<br />

Datacenter, Essentials <strong>und</strong> Fo<strong>und</strong>ation<br />

gibt. Das Betriebssystem ist, wie bereits<br />

der Vorgänger, nur noch als 64-Bit-Software<br />

erhältlich. Für Unternehmen sind<br />

vor allem die Editionen Standard <strong>und</strong> Datacenter<br />

interessant, die genau den gleichen<br />

Funktionsumfang bieten. Es lassen<br />

sich also auch <strong>mit</strong> der Standard Edition<br />

eigene Cluster <strong>und</strong> andere Dinge betreiben,<br />

die bisher den Editionen Enterprise/​<br />

Datacenter in Windows Server 2008 R2<br />

vorbehalten waren. Die Editionen Standard<br />

<strong>und</strong> Datacenter unterscheiden sich<br />

bei Windows Server 2012 lediglich in der<br />

Lizenzierung.<br />

Microsoft bezeichnet Windows Server<br />

2012 als Cloud-Betriebssystem, das insbesondere<br />

auf Virtualisierung <strong>und</strong> die<br />

Cloud-Anbindung spezialisiert ist. Auf<br />

Servern <strong>mit</strong> Windows Server 2012 Standard<br />

dürfen Unternehmen zwei virtuelle<br />

Server pro Lizenz installieren. Sollen auf<br />

einem Hyper-V-Host mehr virtuelle Server<br />

im Einsatz sein, sind mehrere Lizenzen<br />

für die Standard-Edition notwendig<br />

oder eben eine Datacenter-Lizenz.<br />

Die Datacenter-Edition erlaubt den Betrieb<br />

beliebig vieler virtueller Server auf<br />

einem Host. Beide Editionen decken außerdem<br />

immer nur zwei Prozessoren des<br />

Hosts ab. Die erforderliche Anzahl von<br />

Betriebssystem-Lizenzen für jeden Server<br />

wird durch die Anzahl der physischen<br />

Prozessoren des Hosts bestimmt, sowie<br />

die Anzahl virtueller Server, die Sie auf<br />

dem Hyper-V-Host installieren.<br />

Setzen Unternehmen also Server <strong>mit</strong><br />

mehreren Prozessoren ein, ist pro Prozessorpaar<br />

(nicht Kern) eine Lizenz notwendig,<br />

egal welche Edition im Einsatz<br />

ist. Die Datacenter-Edition soll etwa 4800<br />

US-Dollar kosten, eine Standard-Edition-<br />

Lizenz 880 Dollar. Windows Server 2012<br />

Essentials soll etwa 500 Dollar kosten.<br />

Clientzugriffslizenzen<br />

beachten<br />

Clientzugrifflizenzen (CALs) <strong>und</strong> Remotedesktop-Clientzugrifflizenzen<br />

(RD-<br />

CALs) sind auch in Windows Server 2012<br />

weiterhin notwendig, aber nur bei den<br />

Editionen Standard <strong>und</strong> Datacenter (Abbildung<br />

2). Auch hier gibt es zukünftig<br />

Geräte-Lizenzen oder Benutzer-Lizenzen<br />

für den Zugriff.<br />

Sie müssen bereits bei der Bestellung der<br />

Lizenzen bedenken, welchen Lizenztyp<br />

Sie einsetzen wollen. Sie können auch<br />

die verschiedenen Lizenzen <strong>mit</strong>einander<br />

mischen. Es ist jedoch nicht erlaubt,<br />

die einzeln erhältlichen Lizenzpacks<br />

in Geräte- <strong>und</strong> Benutzer-Lizenzen aufzusplitten.<br />

Sie dürfen also ein 5er-Pack<br />

Geräte-Lizenzen <strong>und</strong> ein 5er-Pack Benutzerlizenzen<br />

für einen Server kaufen <strong>und</strong><br />

lizenzieren. Es ist aber nicht erlaubt, dass<br />

Sie diese Pakete aufsplitten <strong>und</strong> zum Beispiel<br />

als 2er-Geräte-Lizenz <strong>und</strong> 8er-Be-<br />

68 Ausgabe 06-2012 Admin www.admin-magazin.de


Windows-Lizenzen<br />

Know-how<br />

Abbildung 1: Der neue Server-Manager in Windows Server 2012. Abbildung 2: Geräte-CALs <strong>und</strong> Benutzer-CALs in Windows Server 2012.<br />

nutzerlizenz verwenden. Es ist ebenfalls<br />

nicht erlaubt, <strong>mit</strong> CALs von Vorgängerversionen<br />

auf Server <strong>mit</strong> Windows Server<br />

2012 zuzugreifen.<br />

Wenn Sie <strong>mit</strong> Geräte-CALs lizenzieren,<br />

müssen Sie für jeden PC, der auf diesen<br />

Server zugreift, eine Lizenz kaufen,<br />

unabhängig davon, wie viele Benutzer<br />

an diesem PC arbeiten. Wenn Sie PCs<br />

betreiben, zum Beispiel im Schichtbetrieb,<br />

an denen zu unterschiedlichen Zeiten<br />

unterschiedliche Benutzer arbeiten,<br />

benötigen Sie für diese PCs nur jeweils<br />

eine Geräte-CAL. Im umgekehrten Fall,<br />

wenn also ein Benutzer <strong>mit</strong> mehreren<br />

PCs, Notebook oder Smartphones auf<br />

den Server zugreift, benötigen Sie für<br />

diesen Benutzer mehrere Geräte-CALs,<br />

da dieser Benutzer <strong>mit</strong> mehreren PCs auf<br />

den Server zugreift. Alternativ können<br />

Sie auch eine Benutzer-CAL kaufen.<br />

Jeder Benutzer <strong>mit</strong> einer Benutzer-CAL<br />

kann an beliebig vielen PCs eine Verbindung<br />

<strong>mit</strong> einem Server aufbauen. Benutzer-Lizenzen<br />

müssen den jeweiligen Benutzern<br />

zugewiesen werden, die <strong>mit</strong> dem<br />

Server arbeiten. Es genügt also nicht,<br />

<strong>ADMIN</strong><br />

Netzwerk & Security<br />

Online-Archiv<br />

R<strong>und</strong> 2.000 Seiten Artikel,<br />

Studien <strong>und</strong> Workshops aus<br />

fünf Jahren Technical Review<br />

+<br />

nur<br />

4,-e*<br />

im Monat<br />

Onlinezugriff auf<br />

Heftartikel aus dem<br />

<strong>ADMIN</strong>-<strong>Magazin</strong> von<br />

2009 bis 2012!<br />

Volltextsuche<br />

Praxisrelevante Themen<br />

für alle IT-Administratoren<br />

* Angebot gültig nur<br />

für Abonnenten eines<br />

Print- oder vollen<br />

digitalen <strong>ADMIN</strong> Abos<br />

Bestellen Sie unter: www.admin-magazin.de/archiv


Know-how<br />

Windows-Lizenzen<br />

sich beim Lizenzkauf auf eine maximale<br />

Zahl gleichzeitig arbeitender Benutzer zu<br />

beschränken.<br />

Ebenso ist es nicht erlaubt, auf einem<br />

Server Lizenzen von Windows 2012<br />

Standard <strong>und</strong> Datacenter zu mischen.<br />

Sie dürfen eine Lizenz auch nicht auf<br />

mehrere Server aufsplitten, zum Beispiel<br />

eine Lizenz auf zwei Server <strong>mit</strong> einzelnen<br />

Prozessoren. Mehr zur Lizenzierung finden<br />

Sie über den Link [1].<br />

Ein konkretes Beispiel: In einer Firma<br />

sind 100 Mitarbeiter beschäftigt, von<br />

denen jedoch lediglich 63 <strong>mit</strong> PCs am<br />

Server arbeiten. Wenn Sie Geräte-CALs<br />

kaufen, wird jede gekaufte Lizenz einem<br />

bestimmten PC zugeordnet. Mit diesen<br />

PCs können sich jetzt beliebig viele Mitarbeiter<br />

<strong>mit</strong> dem Server verbinden, wenn<br />

sich diese PCs im Schichtbetrieb teilen.<br />

Wenn neue PCs hinzukommen, müssen<br />

Sie für diese PCs weitere Geräte-Lizenzen<br />

kaufen. Ein anderer Fall wäre etwa eine<br />

IT-Firma aus, in der 40 Mitarbeiter beschäftigt<br />

sind. Von diesen 40 Mitarbeitern<br />

arbeiten 25 <strong>mit</strong> der Windows-Domäne.<br />

Jeder dieser Mitarbeiter hat einen PC <strong>und</strong><br />

ein Notebook, <strong>mit</strong> denen er am Server<br />

arbeitet. Obwohl in diesem Unternehmen<br />

nur 40 Mitarbeiter beschäftigt sind,<br />

verbinden sich also insgesamt 50 PCs <strong>mit</strong><br />

dem Server. Es müssten in diesem Beispiel<br />

daher 50 Geräte-Lizenzen erworben<br />

werden. Wenn das Unternehmen seine<br />

Lizenzen jedoch als Benutzer-Lizenz erwirbt,<br />

braucht es nur 25 Lizenzen, da nur<br />

25 Benutzer <strong>mit</strong> Server arbeiten.<br />

Windows Server 2012 für<br />

kleine Unternehmen<br />

Sehr kleine Unternehmen können auf<br />

Windows Server 2012 Essentials setzen.<br />

Dabei handelt es sich um den Nachfolger<br />

von Small Business Server 2012 Essentials<br />

ohne Exchange <strong>und</strong> SQL Server.<br />

Einen Nachfolger für SBS 2012 Standard<br />

<strong>mit</strong> Exchange <strong>und</strong> einem SQL-Server<br />

wird es nicht mehr geben. Unternehmen,<br />

die Exchange betreiben wollen, müssen<br />

auf Office 365 setzen oder Exchange auf<br />

einer eigenen Servermaschine getrennt<br />

lizenzieren.<br />

Windows Server 2012 Essentials verfügt<br />

über eine eigene Verwaltungsoberfläche,<br />

Dashboard genannt. Mit diesem lassen<br />

sich Clientcomputer <strong>und</strong> Benutzer auch<br />

ohne IT-Kenntnisse zentral verwalten.<br />

Der Server erlaubt die Anbindung von<br />

maximal 25 Benutzern <strong>und</strong> 50 PCs. Wenn<br />

mehr im Einsatz sind, müssen Unternehmen<br />

auf die Standard-Edition von Windows<br />

Server 2012 erhöhen. CALs sind für<br />

die Benutzer nicht notwendig.<br />

Fo<strong>und</strong>ation oder Essentials?<br />

Die kleinste Edition von Windows Server<br />

2012 firmiert unter dem Namen Fo<strong>und</strong>ation.<br />

Diese stellt Microsoft nur für OEMs<br />

zur Verfügung. Der Server verfügt über die<br />

Standardverwaltungstools von Windows<br />

Server 2012, also kein eigenes Dashboard<br />

wie Essentials. Dafür lassen sich an Windows<br />

Server 2012 Fo<strong>und</strong>ation nur maximal<br />

15 Benutzer anbinden. Client-Zugrifflizenzen<br />

sind in diesem Fall ebenfalls nicht<br />

notwendig. Zusätzliche Zugriffslizenzen<br />

(Client Access License, CALs) sind für<br />

Fo<strong>und</strong>ation nicht erforderlich.<br />

Windows Server 2012 Essentials <strong>und</strong><br />

Fo<strong>und</strong>ation werden in einem prozessorbasierenden<br />

Lizenzmodell lizenziert.<br />

Fo<strong>und</strong>ation ist beschränkt auf Server <strong>mit</strong><br />

einem Prozessor. Windows Server 2012<br />

Essentials ist auf Server <strong>mit</strong> bis zu zwei<br />

Prozessoren beschränkt, benötigt dafür<br />

aber auch keine CALs. Virtualisierung<br />

<strong>mit</strong> Hyper-V ist nur <strong>mit</strong> den beiden Editionen<br />

Windows Server 2012 Standard<br />

<strong>und</strong> Datacenter möglich. Hyper-V-Hosts<br />

unterstützen bis zu 160 logische Prozessoren<br />

<strong>und</strong> 2 TByte Arbeitsspeicher; Gäste<br />

unterstützen bis zu 32 virtuelle Prozessoren<br />

<strong>und</strong> 1 TByte Arbeitsspeicher. Ansonsten<br />

orientiert sich Windows Server<br />

2012 an den Systemvoraussetzungen für<br />

Windows Server 2008 R2. Für Windows<br />

Server 2012 hat Microsoft derzeit noch<br />

keine offiziellen Systemvoraussetzungen<br />

zur Verfügung gestellt.<br />

K<strong>und</strong>en <strong>mit</strong> Software-Assurance-Vertrag<br />

kommt Microsoft bei der Umstellung<br />

etwas entgegen. Unternehmen, die derzeit<br />

die Enterprise-Edition von Windows<br />

Server 2008 R2 einsetzen, dürfen zwei<br />

Lizenzen <strong>mit</strong> der Standard-Edition einsetzen.<br />

Durch diese Lizenzgewährung erhalten<br />

Unternehmen also eine zusätzliche<br />

Windows Server 2012 Standard Edition.<br />

Das Recht zum Verwenden einer bestehenden<br />

Lizenz von Windows Server HPC<br />

Edition, Microsoft HPC Pack Enterprise<br />

oder Web Server bleibt erhalten.<br />

Unternehmen <strong>mit</strong> Windows Server<br />

HPC Edition <strong>und</strong> Microsoft HPC<br />

Pack Enterprise erhalten Windows Server<br />

2012 Standard im Verhältnis 2:1.<br />

Beim Einsatz von Windows Server<br />

2008 R2 können sie bis zur nächsten<br />

ganzen Zahl aufr<strong>und</strong>en, um die entsprechende<br />

Berechtigung zu bestimmen. Es<br />

ist erlaubt, <strong>mit</strong> Windows-Server-2012-<br />

Lizenzen auch ältere Versionen zu installieren,<br />

zum Beispiel Windows Server<br />

2008/​2008 R2.<br />

Windows 8-Editionen im<br />

Überblick<br />

Auch in Windows 8 ändert Microsoft vieles<br />

ab. Es gibt die Editionen Windows 8,<br />

Windows 8 Pro <strong>und</strong> Windows 8 Enterprise.<br />

Unternehmen die Active Directory-<br />

Domänen betreiben, müssen Pro oder<br />

Enterprise einsetzen. Außerdem gibt es<br />

weiterhin 32-Bit- <strong>und</strong> 64-Bit-Versionen.<br />

Im Handel sind nur die beiden Editionen<br />

Windows 8 <strong>und</strong> Windows 8 Pro zu finden,<br />

wobei Windows 8 das System für<br />

Privathaushalte ist.<br />

Wer Funktionen wie Windows-To-Go<br />

oder andere Szenarien nutzen will, benötigt<br />

Windows 8 Enterprise. Für Tablets<br />

gibt es dann noch Windows RT. Diese<br />

Edition erlaubt aber weder eine Anbindung<br />

an Active-Directory-Domänen noch<br />

Business-Funktionen wie Gruppenrichtlinien.<br />

Windows 8 Pro erbt die Funktionen<br />

von Windows 7 Ultimate <strong>und</strong> ist da<strong>mit</strong><br />

die Version, die so gut wie alle Funktionen<br />

von Windows 8 enthält, außer den<br />

Funktionen für sehr große Unternehmen.<br />

Diese Edition lässt sich an Domänen anbinden<br />

<strong>und</strong> per virtuelle Festplatte (VHD)<br />

booten. (ofr)<br />

n<br />

Infos<br />

[1] Licensing FAQ: [http:// download. microsoft.​<br />

com/ download/ 4/ D/ B/ 4DB352D1‐C610‐4<br />

66A‐9AAF‐EEF4F4CFFF27/ WS2012_Licensing‐Pricing_FAQ.<br />

pdf]<br />

Der Autor<br />

Thomas Joos ist freiberuflicher IT-Consultant <strong>und</strong><br />

seit über 20 Jahren in der IT tätig. Neben seinen<br />

Projekten schreibt er praxisnahe Fachbücher<br />

<strong>und</strong> Fachartikel r<strong>und</strong> um Windows <strong>und</strong> andere<br />

Microsoft-Themen. Online trifft man ihn unter<br />

[http:// thomasjoos. spaces. live. com].<br />

70 Ausgabe 06-2012 Admin www.admin-magazin.de


Mit Experten lernen.<br />

IT-Trainings<br />

am Standort<br />

München.<br />

MEDIALINX<br />

IT-ACADEMY<br />

Workshops App-Entwicklung<br />

Android-App-Entwicklung<br />

<strong>mit</strong> David Wiesner,<br />

App-Entwickler, apphoria<br />

Mi, 28.11. - Fr, 30.11.2012<br />

Effiziente BASH-Skripte<br />

<strong>mit</strong> Klaus Knopper,<br />

Gründer der Knoppix-Distribution<br />

Mo, 3.12. - Mi, 5.12.2012<br />

www.medialinx-shop.de/academy<br />

iOS-App-Entwicklung<br />

<strong>mit</strong> Jonas Pencke,<br />

App-Entwickler, apphoria<br />

in Vorbereitung<br />

WP8-App-Entwicklung<br />

<strong>mit</strong> Andreas Thenn,<br />

App-Entwickler, apphoria<br />

in Vorbereitung


Know-how<br />

Open Stack<br />

© Jean-Marie Guyon, 123RF<br />

Open Stack-Workshop, Teil 1: Einführung in Open Stack<br />

Selbstbedienung<br />

Pünktlich wie ein Schweizer Uhrwerk veröffentlichten die Entwickler von Open Stack die neue Version 2012.2<br />

ihres Schützlings, Codename „Folsom“. Was kann sie tatsächlich, <strong>und</strong> was unterscheidet sie von anderen Clouds?<br />

Eine Einführung. Martin Loschwitz<br />

Ende September knallten beim Open-<br />

Stack-Projekt die Sektkorken: Es veröffentlichte<br />

eine neue Version der Cloud-<br />

Umgebung <strong>und</strong> entließ viele Features in<br />

die Produktion, die in den Monaten zuvor<br />

entwickelt wurden. Open Stack ist sehr<br />

zuverlässig darin, den selbst auferlegten<br />

Release-Zyklus einzuhalten: Alle sechs<br />

Monate erscheint – jeweils im Oktober<br />

<strong>und</strong> im April – eine neue Version.<br />

Dass Release-Zyklus <strong>und</strong> -Datum <strong>mit</strong> denen<br />

von Ubuntu ziemlich gut zusammen<br />

passen, ist kein Zufall: Mark Shuttleworth<br />

selbst hat erklärt, dass die Projekte eng<br />

<strong>mit</strong>einander verzahnt sein sollen <strong>und</strong><br />

sind. Daher setzt das gesamte Open-<br />

Stack-Projekt auf die Tools von Canonical<br />

<strong>und</strong> entwickelt fast ausschließlich in<br />

Launchpad (Abbildung 1). Als Ubuntu<br />

die Sache dann quasi offiziell machte<br />

<strong>und</strong> sich im Mai 2011 von Eucalyptus als<br />

Cloud-Lösung zugunsten von Open Stack<br />

verabschiedete, ging ein Raunen durch<br />

die Entwicklergemeinde.<br />

Eins, zwei, drei …<br />

Manchem Beobachter schien die ganze<br />

Sache damals eher merkwürdig: Weshalb<br />

schickt Canonical eine gut funktionierende<br />

Lösung in die Wüste <strong>und</strong> ersetzt<br />

sie durch eine Umgebung, die zum damaligen<br />

Zeitpunkt kaum „Enterprise-ready“<br />

war? Und überhaupt: Worin lag die Motivation<br />

der Open Stack-Entwickler, sich<br />

in einen Markt zu begeben, den andere<br />

Projekte wie Eucalyptus <strong>und</strong> OpenNebula<br />

eigentlich bereits unter sich aufgeteilt<br />

hatten? Brauchte es wirklich einen<br />

weiteren Big Player?<br />

Die Antworten auf all diese Fragen sind<br />

spätestens seit April 2012 ganz offensichtlich:<br />

Canonical positionierte Ubuntu<br />

12.04 als erste Enterprise-Distribution<br />

<strong>mit</strong> Langzeitunterstützung am Markt,<br />

die eine gut integrierte Cloud-Lösung<br />

<strong>mit</strong>bringt. Und weil man bei der Open-<br />

Stack-Entwicklung von Anfang an dabei<br />

war, konnte man auf viele richtungsweisende<br />

Entwicklungen Einfluss nehmen.<br />

Ubuntu hat auf diese Weise seine eigene<br />

Rolle im Cloud-Geschäft definiert: Wer<br />

eine Cloud <strong>mit</strong> Linux will, kriegt derzeit<br />

nur bei Ubuntu das gesamte System samt<br />

Support aus einer Hand.<br />

Der direkte Vergleich der Entwicklungsmodelle<br />

von Eucalyptus, Open Nebula<br />

<strong>und</strong> Open Stack fördert indes die größten<br />

Unterschiede zwischen den Projekten<br />

zutage: Während hinter Eucalyptus <strong>und</strong><br />

Open Nebula einzelne Unternehmen stehen,<br />

die zwar eine Community um ihr<br />

Produkt aufgebaut haben, ansonsten aber<br />

eher im stillen Kämmerlein an ihren Werken<br />

arbeiten, war die Open-Stack-Wolke<br />

von Anfang an als kollaboratives Projekt<br />

angelegt, für alle offen. Und während<br />

Spötter behaupten, dass die drei Umgebungen<br />

letztlich das Gleiche tun, kann<br />

nur Open Stack behaupten, in den letzten<br />

zwei Jahren weit über 180 offizielle Unterstützer<br />

aus der Industrie gef<strong>und</strong>en zu<br />

haben – darunter übrigens prominente<br />

Namen wie Dell oder die Deutsche Telekom.<br />

Aus dem ursprünglichen Projekt<br />

von GitHub <strong>und</strong> der US-amerikanischen<br />

Weltraumbehöre NASA ist also durchaus<br />

ein erfolgreiches Projekt geworden.<br />

Was die Cloud braucht<br />

Fest steht da<strong>mit</strong>: Open Stack ist aus der<br />

Riege der Cloud-Umgebungen nicht mehr<br />

wegzudenken. Aber wie gut kann Open<br />

Stack derzeit überhaupt Cloud? Diese<br />

Frage lässt sich nur sinnvoll beantworten,<br />

wenn klar ist, was denn die Cloud<br />

eigentlich leisten soll. Denn gerade weil<br />

der Begriff seit mehr als zwei Jahren im<br />

IT-Kontext Alltag ist, ist er kaum noch ein-<br />

72 Ausgabe 06-2012 Admin www.admin-magazin.de


Open Stack<br />

Know-how<br />

deutig definiert. Die meisten Infrastrukturanbieter<br />

wollen durch die Einführung<br />

einer Cloud-Umgebung zwei Dienstleistungen<br />

an die K<strong>und</strong>schaft bringen: Auf<br />

der einen Seite Rechenleistung in Form<br />

virtueller Maschinen <strong>und</strong> auf der anderen<br />

Seite Online-Speicherplatz für Daten im<br />

Netz. Schwerer wiegt dabei das Thema<br />

Virtualisierung, für das sich hierzulande<br />

die Anbieter deutlich mehr interessieren<br />

als für Speicherangebote à la Dropbox.<br />

Allerdings ist eine Virtualisierungslösung<br />

alleine noch keine Cloud.<br />

Automatisierung soll die benutzte Umgebung<br />

nämlich in den Augen der ISPs<br />

auch bieten: Einmal vom Anbieter aufgesetzt,<br />

rufen K<strong>und</strong>en die Dienstleistung<br />

selbstständig ab, ohne dass irgendeine<br />

weitere Intervention des Dienstleisters<br />

nötig ist. Dazu braucht die Umgebung<br />

eine Nutzerschnittstelle, die auch Nicht-<br />

IT-Profis zu bedienen in der Lage sind.<br />

Solche Self-Servicing-Portale bilden wohl<br />

den größten Unterschied zwischen klassischen<br />

Virtualisierungsumgebungen wie<br />

VMware & Co. <strong>und</strong> Cloud-Software wie<br />

Open Stack, auch wenn Lösungen wie<br />

oVirt von Red Hat verdeutlichen, dass die<br />

Grenzen hier ebenso verschwimmen.<br />

Welche Lösungen haben sich die Open-<br />

Stack-Entwickler also für die genannten<br />

Herausforderungen ausgedacht?<br />

Open Stack ist modular<br />

Gr<strong>und</strong>sätzlich gilt: Die Open-Stack-Architektur<br />

ist modular, jeder Aufgabe ist eine<br />

einzelne Komponente zugeordnet, die die<br />

jeweiligen Funktionen bereitstellt. Laut<br />

offizieller Sprachregelung unterscheidet<br />

Open Stack dabei zwischen den tatsächlichen<br />

Kern-Komponenten der Software<br />

<strong>und</strong> Zusatz-Werkzeugen. Jene kümmern<br />

sich um Funktionen, die für einzelne Bedarfsfälle<br />

gebraucht werden, das Gros der<br />

Benutzer aber nicht interessieren. Der<br />

Name Open Stack subsummiert die Kern-<br />

Komponenten.<br />

Zusätzlich gibt es noch die Kategorie der<br />

Incubated Projects: Das ist Software, die<br />

in absehbarer Zeit zur Kern-Komponente<br />

werden soll, aber deren Entwicklung noch<br />

nicht so weit ist, dass sie die Klasssifizierung<br />

„stable“ bereits verdient. In Folsom<br />

hat die Zahl der Kern-Komponenten zugenommen:<br />

Neben Keystone (Autentifizierung),<br />

Glance (Images), Nova (Cloud<br />

Controller), Dashboard (Webinterface,<br />

Abbildung 2 <strong>und</strong> 3) <strong>und</strong> Swift (Storage)<br />

gehört jetzt auch Quantum dazu, das sich<br />

umfassend um das Netz in der Cloud<br />

kümmert, so wie Cinder, das virtuellen<br />

Maschinen Speicher in Form von Block-<br />

Storage zur Verfügung stellt. Doch was<br />

tun die einzelnen Teile von Open Stack<br />

eigentlich genau?<br />

Keystone: Sag mir,<br />

wer du bist<br />

Den Anfang im Reigen macht Keystone:<br />

Es bietet innerhalb von Open Stack ein<br />

standardisiertes Interface zur Authentifizierung.<br />

Dass innerhalb einer Wolke <strong>und</strong><br />

der dazu gehörenden Infrastruktur ein<br />

möglichst feingranulares System der Benutzerverwaltung<br />

nötig ist, leuchtet ein<br />

– einerseits gibt es Admins des Cloud-<br />

Betreibers, die sich um den administrativen<br />

Alltag kümmern <strong>und</strong> die Cloud nötigenfalls<br />

warten. Auf der anderen Seite<br />

stehen die K<strong>und</strong>en, die ihre virtuellen<br />

Systeme <strong>und</strong> ihren Online-Speicher autonom<br />

verwalten sollen. Beide Gruppen<br />

sind bei Open Stack in zwei Kategorien<br />

eingeteilt: Die Mandanten (englisch Tenants)<br />

bilden in diesem System die Unternehmen,<br />

die Dienste einer Cloud in<br />

Anspruch nehmen. Die Benutzer (User)<br />

gehören zu einem oder mehreren Tenants<br />

<strong>und</strong> können dabei unterschiedliche Rollen<br />

haben. So ist es beispielsweise möglich,<br />

dass ein Benutzer für einen Tenant<br />

als Administrator fungiert <strong>und</strong> im Namen<br />

dieses Tenants neue virtuelle Systeme erstellen<br />

kann, während ein anderer User<br />

desselben Tenants nur sehen darf, welche<br />

virtuellen Systeme bereits laufen. Die<br />

Analogie zu anderen Rollenmodellen auf<br />

Linux-Systemen ist dabei zulässig <strong>und</strong><br />

hilft, das System der Rechtevergabe von<br />

Open Stack besser zu verstehen.<br />

Keystone ist für alle anderen Dienste<br />

die zentrale Anlaufstelle, wenn es um<br />

Benutzerauthentifizierung geht. Um <strong>mit</strong><br />

Keystone reden zu dürfen, müssen sich<br />

allerdings auch alle anderen Open Stack-<br />

Komponenten erst gegenüber Keystone<br />

<strong>mit</strong> einem Passwort authentifizieren. Das<br />

»Admin Token«, das direkt in der Keystone-Konfigurationsdatei<br />

»keystone.conf«<br />

festzulegen ist, ist der Zentralschlüssel<br />

zur Wolke – wer es kennt, kann in der<br />

Cloud tun <strong>und</strong> lassen, was er will.<br />

Die Keystone-Entwickler haben sich bei<br />

ihrer Arbeit übrigens auch Gedanken<br />

über die Anbindung an bestehende Systeme<br />

zur Benutzerverwaltung gemacht.<br />

Dabei spielt LDAP eine wichtige Rolle:<br />

Wenn ein Unternehmen bereits eine komplette<br />

LDAP-Autorisierung nutzt, lässt<br />

sich Keystone an diese anbauen. Danach<br />

lassen sich Benutzer Berechtigungen über<br />

entsprechende LDAP-Flags zuweisen.<br />

Übrigens: In Open Stack hat jedes Core-<br />

Projekt gr<strong>und</strong>sätzlich zwei Namen. Der<br />

eine Name ist der offizielle Projektname,<br />

der die Funktion der Komponente beschreibt<br />

<strong>und</strong> im Falle von Keystone »Identity«<br />

lautet. Der andere ist der Codename,<br />

eben »Keystone«. Wer im Netz nach Informationen<br />

über eine der Open-Stack-<br />

Komponenten sucht, ist aber gut beraten,<br />

nach dem Codename Ausschau zu halten:<br />

Diese sind deutlich weiter verbreitet,<br />

als die offiziellen Namen.<br />

Glance: „Mit allem <strong>und</strong><br />

scharf“<br />

Wer schon mal eine virtuelle Maschine<br />

unter Linux „zu Fuß“ eingerichtet hat,<br />

weiß, dass diese Aufgabe mühselig ist<br />

Abbildung 1: Die gesamte Open-Stack-Entwicklung findet in Canonicals Launchpad statt, sodass schon von<br />

Anfang an für eine enge Verzahnung <strong>mit</strong> Ubuntu quasi automatisch gesorgt ist.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

73


Know-how<br />

Open Stack<br />

<strong>und</strong> im Gr<strong>und</strong>e identisch da<strong>mit</strong>, ein OS<br />

auf echtem Blech zu installieren. Das kollidiert<br />

<strong>mit</strong> dem Anspruch, dass es auch<br />

weniger erfahrenen Benutzern möglich<br />

sein soll, sich neue virtuelle Systeme per<br />

Webinterface zusammenzuklicken, um<br />

sie anschließend in der Wolke zu nutzen.<br />

Abhilfe schaffen die Betreiber von<br />

Clouds, indem sie den Nutzern fertige<br />

Abbilder von Betriebssystemen zur Nutzung<br />

in der Umgebung zur Verfügung<br />

stellen. Möchte ein Nutzer dann per Webinterface<br />

eine neue VM starten, wählt er<br />

nur noch das passende Betriebssystem-<br />

Image aus <strong>und</strong> loggt sich kurz darauf in<br />

seinem neuen System ein.<br />

Glance übernimmt bei Open Stack die<br />

Aufgabe, Betriebssystem-Abbilder zur<br />

Verfügung zu stellen. Es besteht aus<br />

zwei Teilen nämlich »glance‐api« <strong>und</strong><br />

»glance‐registry«. Die API ist das Interface<br />

zur Außenwelt während sich<br />

»glance‐registry« darum kümmert, vorhandene<br />

Images zu <strong>und</strong> die dazugehörige<br />

Datenbank zu verwalten. Glance<br />

beherrscht eine Vielzahl von Optionen,<br />

was das Speichern von Images angeht:<br />

Neben der lokalen Ablage auf dem System,<br />

auf dem Glance läuft, unterstützt<br />

es als Storage-Backend auch Open Stack<br />

Swift, Ceph sowie alles, was kompatibel<br />

zu Amazons S3 ist.<br />

Ein echtes Multitalent ist Glance im Hinblick<br />

auf die Image-Formate, die es unterstützt:<br />

Neben den klassischem KVM-<br />

Format »qcow« kommt Glance ab Werk<br />

auch <strong>mit</strong> Images für VMWare zurecht.<br />

Gr<strong>und</strong>sätzlich kann als Image für ein Betriebssystem<br />

alles herhalten, was sich auf<br />

einem echten x86-Server booten ließe.<br />

Voraussetzung dafür ist lediglich, dass<br />

das Image ein echtes Abbild einer Festplatte<br />

inklusive Master-Boot-Record ist.<br />

Wer schon Images für Amazons AWS gebaut<br />

hat, kann diese ebenfalls in Glance<br />

verwenden <strong>und</strong> auch das Feature nutzen,<br />

unterschiedliche Disk-Images <strong>mit</strong> jeweils<br />

anderen Kerneln zu booten – zumindest<br />

bei Linux-Images.<br />

Netzwerkmanagement<br />

Abbildung 2: Das Dashboard ist die zentrale Benutzerschnittstelle. Vorhandene VMs, die hier Instanzen<br />

heißen, lassen sich löschen <strong>und</strong> starten.<br />

Seit dem Folsom-Release ist das Netzwerkmanagement<br />

in Open Stack der Job<br />

von Quantum. Bis einschließlich Open<br />

Stack 2012.1 („Essex“) galt Quantum als<br />

Incubated Project, nun halten die Entwickler<br />

es reif für den Einsatz in Produktionsumgebungen.<br />

Quantum kümmert<br />

sich um verschiedene Probleme, die im<br />

Kontext der Servervirtualisierung hinsichtlich<br />

des Netzwerks durch den ISP<br />

zu lösen sind. So wird eine neue virtuelle<br />

Maschine üblicherweise eine IP-Adresse<br />

brauchen, wobei es sich entweder um<br />

eine private oder um eine öffentliche IP-<br />

Adresse handeln kann. Überdies ist es<br />

wünschenswert, einzelne Tenants voneinander<br />

beispielsweise durch VLANs<br />

zu trennen. Da<strong>mit</strong> ist sichergestellt, dass<br />

eine Firma jeweils nur Zugriff auf ihre<br />

eigenen VMs bekommt <strong>und</strong> nicht etwa<br />

auf die VMs anderer Unternehmen, die<br />

auf demselben Virtualisierungsknoten<br />

laufen. Quantum kümmert sich um eben<br />

diese Aufgaben.<br />

Es ersetzt da<strong>mit</strong> die alte Netzwerkimplementation<br />

»nova‐network«, die zur<br />

Computing-Komponente Nova gehörte<br />

(Abbildung 4, hierzu später mehr). Technisch<br />

ist die Lösung ausgefuchst: Quantum<br />

macht sich neue Technologien wie<br />

Openvswitch [1] zunutze, um die physische<br />

Netzwerkkonfiguration komplett<br />

von der virtuellen Netzwerkkonfiguration<br />

zu trennen. Auf jedem Hypervisor läuft<br />

ein entsprechendes Quantum-Plugin,<br />

das <strong>mit</strong> der Quantum-Server-Instanz von<br />

Open Stack kommuniziert <strong>und</strong> von dort<br />

seine Konfiguration erhält. Zum Virtualisierer<br />

hin verhält sich jenes Plugin<br />

wie ein echter Switch: VMs, deren Netzwerkinterface<br />

<strong>mit</strong> solch einem virtuellen<br />

Switch verb<strong>und</strong>en ist, lassen sich über<br />

verschiedene Hypervisor-Knoten hinweg<br />

beliebig verbinden. Auch eine virtuelle<br />

VLAN-Konfiguration ist möglich, wenn<br />

K<strong>und</strong>en ihre eigene Netzwerktopologie<br />

implementieren möchten. War zuvor lediglich<br />

die Trennung in unterschiedliche<br />

VLANs auf Hardware-Ebene machbar,<br />

um K<strong>und</strong>en voneinander zu trennen,<br />

so übernimmt jetzt diese gesamte Konfiguration<br />

Quantum. Und Openvswitch<br />

ist nicht das einzige von Quantum unterstützte<br />

Protokoll: Auch Ciscos UCS/<br />

Nexus-Implementierung kennt der Dienst<br />

bereits, sodass er zusammen <strong>mit</strong> passender<br />

Hardware deren Fähigkeiten voll<br />

ausnutzen kann.<br />

Cinder: Ein Blockspeicher<br />

für VMs<br />

Virtuelle Maschinen innerhalb einer<br />

Cloud-Umgebung benötigen persistenten<br />

Speicher in Form von Blockdevices, die<br />

als Festplatten dienen. Allerdings läuft die<br />

typische Architektur von Storage der Idee<br />

hinter einer Wolke im Gr<strong>und</strong>e komplett<br />

zuwider. Denn während in einem Cloud-<br />

Setup eine große Zahl gleichwertiger<br />

Knoten vorhanden ist, ist Storage meist<br />

an einer Stelle zentral zusammengefasst.<br />

An dieser Stelle kommt Cinder ins Spiel:<br />

Es sorgt dafür, das zentral verwalteter<br />

Speicher portitioniert als Festplatte bei<br />

den virtuellen Maschinen innerhalb der<br />

Wolke ankommt. Auch Cinder war in<br />

der Vorgängerversion „Essex“ noch fixer<br />

Bestandteil der Computing-Komponente<br />

Nova <strong>und</strong> hat erst in Folsom den Einzug<br />

als Core-Projekt in Open Stack geschafft.<br />

Es kommt <strong>mit</strong> mehreren Storage-<br />

Backends zurecht: Block-Speicher, der<br />

Teil einer LVM-Volume-Group ist, stellt<br />

die Standard-Konfiguration dar; das deckt<br />

insbesondere per Fibre Channel angeb<strong>und</strong>ene<br />

SANs oder DRBD-Setups ab. Diese<br />

74 Ausgabe 06-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 />

Open Stack<br />

rauf hinaus, dass Open Stack sich an<br />

vorhandene Billing-Systeme nahtlos anschließen<br />

lässt, um die durch Benutzer in<br />

Anspruch genommenen Dienstleistungen<br />

automatisch zu verrechnen.<br />

Object Storage <strong>mit</strong> Swift<br />

Abbildung 3: Das Dashboard bietet auch eine Kurzübersicht über die Ressourcen, die ein Benutzer innerhalb<br />

eines definierten Zeitraums verwendet hat.<br />

Die schönste Cloud-Umgebung ist nichts<br />

wert, wenn Nicht-Nerds sie nicht bedienen<br />

können. Das Open-Stack-Dashboard,<br />

Codename Horizon, kümmert sich genau<br />

darum: Es ist bietet ein Self-Service-Portal,<br />

das genauso wie alle anderen Open<br />

Stack-Teile in Python geschrieben ist<br />

(Stichwort Django) <strong>und</strong> den Benutzern<br />

einer Open-Stack-Installation den Start<br />

von VMs per Mausklick aus dem Webbrowser<br />

ermöglicht. Voraussetzung dafür<br />

ist lediglich ein WSGI-fähiger Webserver,<br />

beispielsweise Apache <strong>mit</strong> geladenem<br />

»mod_wsgi«.<br />

Ebenfalls sinnvoll ist die Kombination des<br />

Dashboards <strong>mit</strong> »memcached«, um Performance-Engpässen<br />

vorzubeugen. Aus<br />

Nutzersicht lassen sich <strong>mit</strong> dem Dashboard<br />

nicht bloß VMs starten <strong>und</strong> stoppen,<br />

sondern auch Images in Glance von<br />

laufenden VMs anlegen <strong>und</strong> Hardware-<br />

Profile für virtuelle Systeme verwalten.<br />

Auch eine rudimentäre Statistik-Funktion<br />

ist vorhanden, deren Ausbau zu einer<br />

vollständigen Billing-API zur Diskussion<br />

steht. Letztlich läuft die Entwickler dawerden<br />

<strong>mit</strong>tels iSCSI vom Storage-Host<br />

zu den Computing-Nodes verb<strong>und</strong>en,<br />

wo sie über KVMs Hotplug-Funktion<br />

dann zum Bestandteil einer virtuellen<br />

Maschine werden. Wer stattdessen lieber<br />

auf Ceph setzt, bekommt ein natives<br />

Ceph-Interface <strong>mit</strong>geliefert. Cinder ist<br />

auch eines der Projekte in Open Stack,<br />

deren Funktionsumfang in den nächsten<br />

Monaten beträchtlich wachsen wird,<br />

um weitere Storage-Backends nativ zu<br />

unterstützen. So ist beispielsweise eine<br />

direkte Fibre Channel-Anbindung in der<br />

Diskussion, die sich den Umweg über<br />

den Blockdevice-Layer spart.<br />

Das Hirn der Wolke: Nova<br />

Open Stack Compute, Codename Nova,<br />

ist die zentrale Computing-Komponente.<br />

Weil Cinder (vormals »nova‐volume«)<br />

<strong>und</strong> Quantum (als Ersatz für »nova‐network«)<br />

seit der Folsom-Release in ihre<br />

eigenen Projekte ausgelagert sind, kann<br />

Nova sich ausschließlich darum kümmern,<br />

die virtuellen Systeme innerhalb<br />

einer Openstack-Umgebung zu verwalten.<br />

Es spannt den Bogen um alle anderen<br />

Komponenten <strong>und</strong> kümmert sich darum,<br />

das virtuelle Maschinen in der Wolke<br />

gestartet <strong>und</strong> gestoppt werden, wenn Benutzer<br />

entsprechende Befehle per Kommandozeile<br />

oder Webinterface geben.<br />

Der Dienst ist modular: Neben »nova‐api«<br />

als Frontend gehört auch die eigentliche<br />

Computing-Komponente »nova‐compute«<br />

direkt zu Nova. »nova‐compute« läuft auf<br />

jedem Virtualisierungsknoten <strong>und</strong> wartet<br />

auf entsprechende Anweisungen von<br />

der API-Komponente. Teil von Nova ist<br />

überdies der Scheduler »nova‐schedule«,<br />

der weiß, welche Hypervisor-Knoten<br />

vorhanden sind, <strong>und</strong> welche VMs wo<br />

in der Wolke laufen. Soll eine neue VM<br />

hinzukommen, entscheidet eben dieser<br />

Scheduler, auf welchem Host sie laufen<br />

soll. Übrigens: »nova‐compute« setzt im<br />

Hintergr<strong>und</strong> auf die erprobte »libvirt«,<br />

um virtuelle Systeme zu verwalten. Es ist<br />

den Open Stack-Entwicklern hoch anzurechnen,<br />

dass sie das Rad an dieser Stelle<br />

nicht neu erf<strong>und</strong>en haben <strong>und</strong> stattdessen<br />

auf bewährte Technologien setzen.<br />

Das Dashboard<br />

Die sechs zuvor beschriebenen Komponenten<br />

bilden den Kern von Open Stack,<br />

der sich um das Thema Virtualisierung<br />

kümmert. Wie eingangs erwähnt ist aber<br />

auch der Faktor Storage durchaus von<br />

Interesse: Speicherlösungen wie Dropbox<br />

oder Amazons EC2 gehören ebenso zur<br />

Cloud wie virtuelle Maschinen. In Open<br />

Stack kümmert sich um diesen Teil Swift.<br />

Swift stammt ursprünglich von Rackspace<br />

<strong>und</strong> ist der Part, den der amerikanische<br />

Riesenhoster – als Heimat von Github<br />

bekannt – in das Projekt eingebracht hat.<br />

Bei Rackspace ist Swift bereits seit einiger<br />

Zeit produktiv im Einsatz, sodass es vielen<br />

Entwicklern bis heute als die ausgereifteste<br />

Open-Stack-Komponente gilt.<br />

Unter der Haube funktioniert Swift dabei<br />

ganz ähnlich wie Ceph: Sämtliche<br />

Dateien, die in Swift abgelegt sind, wandelt<br />

das Programm in binäre Objekte<br />

um, die dann über einen großen Cluster<br />

von Storage-Knoten verteilt <strong>und</strong> dabei<br />

inhärent repliziert werden. Weil Swift ein<br />

Kompatibilitätsinterface für Amazons S3-<br />

Protokoll hat, funktionieren alle für S3<br />

entwickelten Tools ebenfalls <strong>mit</strong> Swift.<br />

Wer also in Open-Stack-Manier Online-<br />

Speicher anbieten möchte, bekommt vom<br />

Open-Stack-Projekt das richtige Werkzeug<br />

an die Hand: Swift.<br />

Was es sonst noch braucht<br />

Zu jeder Open-Stack-Installation gehören<br />

zwei Komponenten, die nicht un<strong>mit</strong>telbar<br />

Teil von Open Stack sind: MySQL <strong>und</strong><br />

RabbitMQ. MySQL setzen sämtliche Open<br />

Stack-Komponenten <strong>mit</strong> Ausnahme von<br />

Swift ein, um ihre internen Datenbanken<br />

zu pflegen. Weil alle Open-Stack-Komponenten<br />

in Python geschrieben sind,<br />

haben die Entwickler auf das Python-<br />

Modul »sqlalchemy« gesetzt, um die Datenbankzugriffe<br />

aus ihren Applikationen<br />

heraus umzusetzen. Zwar unterstützt<br />

»sqlalchemy« auch andere Datenbanken<br />

wie PostgreSQL, nahezu sämtliche Open-<br />

Stack-Installation dürften gegenwärtig<br />

76 Ausgabe 06-2012 Admin www.admin-magazin.de


Computerwissen für Praktiker<br />

Bekannt für Qualität<br />

Christoph Willer<br />

PC-Forensik<br />

Daten suchen <strong>und</strong> wiederherstellen<br />

Lehr- <strong>und</strong> Arbeitsbuch zur Analyse<br />

von PCs <strong>mit</strong> Windows- <strong>und</strong> Linux-<br />

Werkzeugen.<br />

• 510 Seiten • ISBN 978-3-936546-60-6<br />

• EUR 49,90 (D)<br />

Thomas Werth<br />

Penetrations-Tests<br />

Angriffe auf Dienste, Programme<br />

<strong>und</strong> Netzwerke<br />

Firewalls überwinden, SAP-Systeme<br />

kompro<strong>mit</strong>tieren, Webbrowser<br />

überlisten <strong>und</strong> Backdoors<br />

implementieren.<br />

• 703 Seiten<br />

• ISBN 978-3-936546-70-5<br />

• EUR 49,90 (D)<br />

Michael Van Canneyt et al.<br />

Lazarus<br />

Klassenbibliothek <strong>und</strong> IDE<br />

Plattformübergreifende GUI-Entwicklung<br />

für Windows, Mac <strong>und</strong><br />

Linux <strong>mit</strong> Pascal.<br />

• 768 Seiten<br />

• ISBN 978-3-936546-63-7<br />

• EUR 49,90 (D)<br />

Dr. Rolf Freitag<br />

Die Kunst des Verdeckens<br />

Daten verschleiern, verschlüsseln,<br />

zerstören<br />

Alle clientseitigen Maßnahmen, den<br />

Computer <strong>und</strong> seine Inhalte vor<br />

Diebstahl <strong>und</strong> Spionage zu schützen.<br />

• 366 Seiten<br />

• ISBN 978-3-936546-65-1<br />

• EUR 29,90 (D)<br />

Probekapitel <strong>und</strong> Inhaltsverzeichnisse finden Sie auf www.cul.de. Falls das gewünschte Buch in<br />

der Buchhandlung gerade nicht vorrätig ist, bestellt sie es portofrei innerhalb von 24 St<strong>und</strong>en.<br />

Jörg Braun<br />

Das VirtualBox-Buch<br />

Hosts <strong>und</strong> Gäste<br />

Korrekte Integration <strong>und</strong> direkter<br />

Datenaustausch für MacOS-,<br />

Windows- <strong>und</strong> Unix-Gäste.<br />

• 368 Seiten • CD-ROM<br />

• ISBN 978-3-936546-71-2<br />

• EUR 34,90 (D)<br />

Unser Gesamtprogramm<br />

finden Sie unter:<br />

Computer & Literatur Verlag<br />

C&L-Bücher erhalten Sie im gut sortierten Buch- <strong>und</strong> Fachhandel oder über<br />

www.cul.de<br />

HAWA & NÖH


Know-how<br />

Open Stack<br />

Abbildung 4: Nova besteht nicht nur aus »nova‐api« <strong>und</strong> »nova‐compute«, sondern aus einer ganzen Reihe von Zusatzdiensten.<br />

allerdings auf MySQL bauen – was der<br />

offiziellen Dokumentation entspricht.<br />

RabbitMQ ist der Teil des Setups, der<br />

insbesondere Nova <strong>und</strong> Quantum dazu<br />

dient, die Kommunikation über alle Knoten<br />

des Virtualisierungsetups hinweg zu<br />

realisieren. Wer Erlang nicht mag oder<br />

<strong>mit</strong> RabbitMQ bereits schlechte Erfahrungen<br />

gemacht hat, kann alternativ auch<br />

auf eine andere Umsetzung des AMQP-<br />

Standards vertrauen: Auch <strong>mit</strong> Qpid<br />

funktioniert Open Stack sehr gut.<br />

Das leidige Thema<br />

Hochverfügbarkeit<br />

Die vorangegangene Aufzählung hat bewiesen:<br />

Sämtliche Komponenten, die in<br />

einer modernen Wolke nötig sind, bietet<br />

Open Stack gr<strong>und</strong>sätzlich an. Ein Test des<br />

Autors dieses Artikels im Linux-<strong>Magazin</strong><br />

12/​11 [2] förderte damals jedoch einen<br />

echten Makel zutage. Denn im Hinblick<br />

auf Hochverfügbarkeit schlug die junge<br />

Cloud-Umgebung sich alles andere als<br />

wacker. Faktisch fehlten nutzbare HA-<br />

Lösungen für Open Stack damals vollständig:<br />

Ein abgestürzter Hypervisor, der<br />

etliche VMs <strong>mit</strong> in den Abgr<strong>und</strong> gerissen<br />

hat, war der Umgebung seinerzeit<br />

genauso gleichgültig wie die Tatsache,<br />

dass eine der Kernkomponenten – Nova,<br />

Glance, Keystone & Co. – das Zeitliche<br />

gesegnet hatten.<br />

Dabei sind brauchbare Werkzeuge vorhanden,<br />

um auf Linux-Systemen Hochverfügbarkeit<br />

zu gewährleisten. In Form<br />

des Linux-HA Cluster-Stacks steht ein<br />

kompletter HA-Werkzeugkasten parat,<br />

der im Kontext von Open Stack nur auf<br />

seinen Einsatz wartete.<br />

Ein knappes Jahr nach dem ersten Test<br />

stellt sich die Situation dann auch nicht<br />

mehr ganz so trist dar: Spezifische Resource<br />

Agents, die die einzelnen Open-<br />

Stack-Teile in Pacemaker nutzbar machen,<br />

stehen <strong>mit</strong>tlerweile in Form des<br />

»openstack‐resource‐agents«-Repositories<br />

zur Verfügung [3].<br />

Dem Aufruf des Autors dieses Artikels,<br />

der die ersten Agents für »keystone«<br />

<strong>und</strong> die beiden Teile von Glance entwarf<br />

[4], folgten insbesondere die beiden aus<br />

Frankreich stammenden Entwickler Emilien<br />

Macchi <strong>und</strong> Sebastien Han, die nach<br />

<strong>und</strong> nach Agents für die anderen Dienste<br />

beisteuerten. So ist es nun kein Problem<br />

mehr, alle Kern-Dienste von Open Stack<br />

durch Pacemaker verwalten <strong>und</strong> überwachen<br />

zu lassen (Abbildung 5). Hinzu<br />

kommt die Tatsache, dass die einzelnen<br />

Dienste durchaus auch verteilt laufen<br />

können: Nicht alle Kern-Komponenten<br />

müssen auf dem gleichen System wohnen,<br />

solange sie per Netzwerk <strong>mit</strong>einander<br />

verb<strong>und</strong>en sind. Theoretisch wäre<br />

es sogar denkbar, Instanzen aller Kern-<br />

Projekte auf jedem Knoten einer Open<br />

Stack-Wolke zubetreiben, solange diese<br />

auf dieselbe hochverfügbare MySQL-<br />

Datenbank <strong>und</strong> auf denselben RabbitMQ<br />

Zugriff haben.<br />

Noch nicht ganz so rosig verhält es sich<br />

hingegen <strong>mit</strong> Hochverfügbarkeit für virtuelle<br />

Maschinen. Bei dieser Frage prallen<br />

zwei Philosophien hart aufeinander,<br />

nämlich die amerikanische <strong>und</strong> die europäische<br />

Idee dessen, wofür eine Cloud<br />

eigentlich gut ist.<br />

Denn in Amerika gilt die Wolke vor allem<br />

als Werkzeug zum Schaffen von massiv<br />

skalierenden IT-Setups. Ein klassisches<br />

Beispiel ist der berühmte Versandhändler,<br />

der zur Weihnachtszeit deutlich mehr<br />

Last abfedern muss, als während des<br />

übrigen Jahres. Wenn er <strong>mit</strong> mehr Last<br />

zurechtkommen muss, startet er einfach<br />

neue virtuelle Maschinen, auf die weitere<br />

Last verteilt wird. Die Voraussetzung dafür,<br />

dass dieses Prinzip funktioniert, ist,<br />

dass einzelne VMs keine veränderlichen<br />

Daten enthalten, sondern dass sämtliche<br />

virtuellen Instanzen stets aus dem<br />

gleichen Image stammen. Und wenn, so<br />

die Logik, alle VMs aus dem gleichen<br />

Image bestehen, dann fällt es nicht weiter<br />

ins Gewicht, wenn eine einzelne virtuelle<br />

Maschine den Geist aufgibt. Denn<br />

im Handumdrehen lässt sich ja aus dem<br />

laufenden Betrieb heraus eine neue VM<br />

schaffen, welche die alte, nun ausgefallene<br />

VM vollständig ersetzt.<br />

Abbildung 5: Neben den Agents für Keystone <strong>und</strong> Glance stehen <strong>mit</strong>tlerweile auch für alle anderen Open-<br />

Stack-Komponenten Resource Agents für Pacemaker bereit.<br />

78 Ausgabe 06-2012 Admin www.admin-magazin.de


Im europäischen Kontext liegen die Dinge<br />

anders. Hierzulange verbinden Anbieter<br />

von IT-Infrastruktur <strong>mit</strong> der Einführung<br />

einer Cloud-Lösung fast immer das<br />

Stichwort Rechenzentrumskonsolidierung.<br />

Gemeint ist, das viel Blech durch<br />

weniger Blech ersetzt wird, das die vormals<br />

physischen Systeme dann in Form<br />

virtueller Maschinen weiter betreibt.<br />

Die vormals erwähnte Scale-Out-Logik<br />

funktioniert hier nicht mehr: Spezifische<br />

K<strong>und</strong>en-Systeme sind nicht generisch,<br />

enthalten veränderliche Daten <strong>und</strong> lassen<br />

sich nicht zu einem späteren Zeitpunkt<br />

problemlos durch eine neue Instanz aus<br />

dem frischen Image ersetzen. In diesem<br />

Szenario schmerzt der Ausfall einer VM<br />

oder eines Hypervisors <strong>mit</strong> vielen VMs<br />

deutlich heftiger.<br />

VM-HA? Cinder zur Hilfe<br />

Auch beim Thema Hochverfügbarkeit<br />

virtueller Maschinen steht die Zeit zum<br />

Glück nicht still, <strong>und</strong> ein großer Pferdefuß<br />

bei der Implementation einer entsprechenden<br />

Routine – die nicht-HA-fähige<br />

Implementierung des alten »nova‐volume«<br />

– ist im Begriff zu verschwinden:<br />

Cinder soll einige der konzeptionellen<br />

Schwierigkeiten seines Vorgängers ausbügeln<br />

<strong>und</strong> es so sehr viel einfacher gestalten,<br />

Storage-Volumes hochverfügbar<br />

zu machen.<br />

Bisher scheiterten hochverfügbare Volumes<br />

bereits daran, dass sich »nova‐volume«<br />

nicht flexibel auf dem einen oder<br />

dem anderen Knoten eines Clusters starten<br />

ließ, weil in der zu Nova gehörenden<br />

MySQL-Datenbank der Hostname des exportierenden<br />

Servers vermerkt war. Wenn<br />

ein Volume also erstmals von »server1«<br />

exportiert worden war, konnte »nova‐volume«<br />

das gleiche Volume nicht von »server2«<br />

exportieren, selbst wenn die Daten<br />

durch ein SAN oder ein DRBD-Laufwerk<br />

lokal durchaus vorhanden waren.<br />

Cinder wird dieses Problem wohl spätestens<br />

bis zur nächsten Open-Stack-Version<br />

namens »Grizzly« behoben haben. Wer<br />

statt einer Blockdevice-basierten Methode<br />

auf Ceph als Storage-Backend für<br />

»Cinder« setzt, hat das Problem schon<br />

seit einigen Monaten ohnehin nicht<br />

mehr. Letztlich fehlt also bloß noch der<br />

Teil in »nova‐compute«, der sich darum<br />

kümmert, das VMs von einem ausgefal-<br />

lenen Hypervisor auf einem anderen neu<br />

gestartet werden. Es steht zu vermuten,<br />

dass die Open Stack-Entwickler auch<br />

dieses Problem während des nächsten<br />

Release-Zyklus angehen werden.<br />

Ein Ausblick für Open Stack<br />

Während die <strong>ADMIN</strong>-Redaktion im Oktober<br />

<strong>mit</strong> der Produktion dieses Heftes<br />

beschäftigt war, trafen sich in San Diego<br />

die Open-Stack-Entwickler, um den Startschuss<br />

für den nächsten Release-Zyklus<br />

zu geben. Open Stack ist im Augenblick<br />

sicher von allen Cloud-Umgebungen im<br />

FOSS-Umfeld am aktivsten: Das Projekt<br />

ist praktisch ständig in den einschlägigen<br />

Foren als Thema <strong>und</strong> als Beschäftigungsfeld<br />

präsent.<br />

Dass es im Aufwind ist, zeigt auch die<br />

erst vor ein paar Wochen erfolgte Gründung<br />

der Open Stack Fo<strong>und</strong>ation: Sie<br />

soll Open Stack einerseits einen formaleren<br />

Rahmen als bisher geben, andererseits<br />

aber auch den Gr<strong>und</strong>stein für<br />

ein Sponsoring-Programm legen. Dieses<br />

soll über Mitgliedschaften große Unternehmen<br />

dazu bringen, im Tausch gegen<br />

Bares eine hervorgehobene Position in<br />

der Open-Stack-Entwicklung zu erhalten.<br />

Das so eingenommene Geld soll freilich<br />

der Entwicklung <strong>und</strong> weiteren Promotion<br />

von Open Stack zugute kommen. Wer in<br />

der Open-Stack-Szene aktiv ist, wird also<br />

auch in naher Zukunft einige aufregende<br />

Ereignisse erleben. (jcb)<br />

n<br />

Infos<br />

[1] Ralf Spenneberg, „Schaltstelle“, Virtueller<br />

Switch <strong>mit</strong> Openvswitch, <strong>ADMIN</strong> 02/2011<br />

[2] Martin Loschwitz, „Dunkle Wolken“: Linux-<br />

<strong>Magazin</strong> 12/​11, S. 22<br />

[3] Das Openstack-Resource-Agents-<br />

Repository: [https:// github. com/ madkiss/​<br />

openstack‐resource‐agents]<br />

[4] Resource-Agent-Announcement von Martin<br />

Loschwitz: [http:// www. hastexo. com/​<br />

blogs/ martin/ 2012/ 04/ 03/ bringing‐high‐av<br />

ailability‐openstack‐keystone‐and‐glance]<br />

Der Autor<br />

Martin Gerhard Loschwitz arbeitet als Principal<br />

Consultant bei hastexo. Er beschäftigt sich dort<br />

intensiv <strong>mit</strong> Hochverfügbarkeitslösungen <strong>und</strong><br />

pflegt in seiner Freizeit den Linux-Cluster-Stack<br />

für Debian GNU/​Linux.<br />

Linux-<strong>Magazin</strong><br />

ACADEMY<br />

Online-Training<br />

Prüfungsvorbereitung<br />

für LPIC 1 & 2<br />

Besorgen Sie sich<br />

Brief <strong>und</strong> Siegel<br />

für Ihr Linux-<br />

Knowhow <strong>mit</strong> der<br />

LPI-Zertifizierung.<br />

- Training für die Prüfungen LPI<br />

101 <strong>und</strong> 102<br />

- Training für die Prüfungen LPI<br />

201 <strong>und</strong> 202<br />

SPAren SIe MIt<br />

PAketPreISen<br />

JETZT MIT NEUEN<br />

LErNZIELEN! *<br />

*ANpAssUNg dEr LErNZIELE 2012<br />

20%<br />

Rabatt für<br />

Abonnenten<br />

Auszug aus dem Inhalt:<br />

❚ Hardware-Einstellungen,<br />

Paketverwaltung<br />

❚ Arbeiten auf der<br />

Kommandozeile<br />

❚ Partitionen <strong>und</strong> Dateisysteme<br />

❚ Shell-Umgebung<br />

❚ Netzkonfiguration <strong>und</strong><br />

-verwaltung<br />

❚ Protokolle<br />

❚ DNS-Server einrichten <strong>und</strong><br />

verwalten<br />

❚ Verschlüsselung <strong>und</strong><br />

Rechteverwaltung<br />

❚ Kernel kompilieren <strong>und</strong><br />

patchen<br />

❚ <strong>RAID</strong>-Konfiguration,<br />

Logical Volume Manager<br />

❚ Web-, Proxy-, Samba-Server<br />

Mit vielen Praxisbeispielen!<br />

www.admin-magazin.de<br />

Information <strong>und</strong> Anmeldung unter:<br />

Ausgabe 06-2012<br />

academy.linux-magazin.de/lpic79


Security<br />

Windows-Firewall<br />

Die erweiterte Sicherheit der Windows-Firewall<br />

Sicher ist <strong>sicherer</strong><br />

Die Windows-Firewall <strong>mit</strong> erweiterter Sicherheit ist seit Vista/​Windows Server 2008 <strong>mit</strong> an Bord <strong>und</strong> standardmäßig<br />

aktiviert. Gegenüber der alten Windows-Firewall bringt sie viele neue Features <strong>und</strong> Möglichkeiten. Was die<br />

neue Windows-Firewall wirklich kann <strong>und</strong> was nicht, klärt dieser Artikel. Eric Amberg<br />

Als Desktop-Firewall hat die Windows-<br />

Firewall die Aufgabe, den eigenen Computer<br />

zu schützen. Darin unterscheidet<br />

sie sich gr<strong>und</strong>sätzlich von Netzwerk-<br />

Firewalls, die den Daten-Verkehr zwischen<br />

Netzwerken kontrollieren. Da<strong>mit</strong><br />

ergeben sich bestimmte Funktionsanforderungen.<br />

Die Hauptaufgabe lautet natürlich,<br />

unerwünschten Daten-Verkehr<br />

von außen zu unterbinden. Diesen Job<br />

erledigte auch die alte Firewall anstandslos.<br />

Darüber hinaus bietet die Windows-<br />

Firewall <strong>mit</strong> erweiterter Sicherheit jedoch<br />

viele neue Funktionen. Zum Beispiel<br />

n Steuerung des ausgehenden Datenverkehrs<br />

n Komplexe Regeln für ein- <strong>und</strong> ausgehenden<br />

Verkehr<br />

n Profilbasiertes Regelwerk<br />

n Signierte <strong>und</strong> verschlüsselte Kommunikation<br />

Der Anwender hat die Wahl zwischen<br />

der einfachen Firewall-Ansicht <strong>und</strong> dem<br />

Snap-In »Windows‐Firewall <strong>mit</strong> erweiterter<br />

Sicherheit«. Die einfache Ansicht<br />

rufen Sie über die Systemsteuerung über<br />

das Symbol »Windows‐Firewall« auf. Hier<br />

werden Sie auch gleich <strong>mit</strong> dem Konzept<br />

der Netzwerkstandorte konfrontiert, da<br />

die Konfiguration der Windows-Firewall<br />

für jeden Standort-Typ einzeln festgelegt<br />

werden kann (Abbildung 1). Weiter unten<br />

werden die Standorte erläutert.<br />

Die Standard-Konfiguration der Windows-<br />

Firewall kann in der einfachen Ansicht<br />

über den Menüpunkt »Ein Programm<br />

oder Feature durch die Windows‐Firewall<br />

zulassen« angepasst werden. Hier klicken<br />

Sie zunächst auf »Einstellungen ändern«.<br />

Nun wird das darunter liegende Auswahlfenster<br />

aktiv, sodass Sie entweder aus<br />

der vorhandenen Liste die gewünschten<br />

Programmme <strong>und</strong> Features durch Setzen<br />

der entsprechenden Häkchen auswählen<br />

oder über den Button »Anderes Programm<br />

zulassen ...« ein Programm auswählen<br />

können, das durch die Windows-Firewall<br />

kommunizieren darf (Abbildung 2). Da<br />

in der Voreinstellung ohnehin jedes Programm<br />

Verbindungsanfragen senden<br />

darf, bezieht sich dieser Punkt insbesondere<br />

auf eingehende Verbindungsanforderungen,<br />

die gr<strong>und</strong>sätzlich nicht erlaubt<br />

sind, bevor keine entsprechende Regel<br />

erstellt wurde.<br />

Sie können in der einfachen Firewall-Ansicht<br />

auch gr<strong>und</strong>sätzlich die Windows-<br />

Firewall ein- <strong>und</strong> ausschalten, auch<br />

jeweils für die Netzwerkstandorte. Die<br />

temporäre Deaktivierung der Firewall ist<br />

insbesondere zu Testzwecken sinnvoll,<br />

wenn Sie beispielsweise ausschließen<br />

möchten, dass eine Kommunikation<br />

durch die Firewall geblockt wird <strong>und</strong> daher<br />

nicht zustande kommt.<br />

Hierzu gibt es übrigens noch einen interessanten<br />

Trick: Möchten Sie er<strong>mit</strong>teln,<br />

ob ein Computer im selben Subnetz nicht<br />

<strong>mit</strong> Ihrem lokalen System kommuniziert,<br />

weil eine Firewall die Kommunikation<br />

blockt, können Sie den gewünschten<br />

Kommunikationspartner kontaktieren,<br />

80 Ausgabe 06-2012 Admin www.admin-magazin.de


Windows-Firewall<br />

Security<br />

zum Beispiel per Ping-Befehl, der gegebenenfalls<br />

nicht beantwortet wird.<br />

Anschließend werfen Sie einen Blick in<br />

den ARP-Cache <strong>mit</strong> »arp ‐a«. Dies zeigt<br />

die Zuordnung der IP-Adressen zu den<br />

entsprechenden MAC-Adressen an. Wird<br />

die MAC-Adresse des Zielsystems korrekt<br />

angezeigt, ist in fast allen Fällen eine<br />

Firewall der Schuldige. Wird die MAC-<br />

Adresse allerdings nicht angezeigt, ist das<br />

Zielsystem vermutlich tatsächlich nicht<br />

aktiv. Dies funktioniert allerdings nur in<br />

lokalen Netzen <strong>und</strong> nicht über Router-<br />

Grenzen hinweg.<br />

Ansichtssache<br />

In der einfachen Ansicht können Sie die<br />

Standard-Konfiguration der Windows-<br />

Firewall wiederherstellen, falls Sie dies<br />

wünschen. Hierzu klicken Sie auf den<br />

entsprechenden Punkt in der Menüleiste.<br />

Dies wirkt sich auf alle Netzwerk-Standorteinstellungen<br />

aus <strong>und</strong> setzt sämtliche<br />

Firewall-Einstellungen wieder auf den<br />

Auslieferungszustand zurück. Außerdem<br />

können Sie die Benachrichtigungseinstellungen<br />

ändern. Klicken Sie auf diesen<br />

Menüpunkt, öffnet sich jedoch dasselbe<br />

Menüfenster, wie unter dem Punkt »Windows-Firewall<br />

ein- oder ausschalten«. Die<br />

einzige Einstellung, die bezüglich der Benachrichtigung<br />

möglich ist, ist die Aktivierung<br />

der Benachrichtigung, wenn ein<br />

neues Programm blockiert wird. Achten<br />

Sie darauf, dass Sie über den Zurück-<br />

Button in die Hauptansicht kommen, da<br />

hier kein separates Fenster geöffnet wird.<br />

Klicken Sie in diesem Untermenü auf<br />

»Schließen«, wird die gesamte Firewall-<br />

Ansicht inklusive der Systemsteuerung<br />

geschlossen.<br />

Zur Windows-Firewall <strong>mit</strong> erweiterter Sicherheit<br />

gelangen Sie entweder über den<br />

Menüpunkt »Erweiterte Einstellungen«<br />

aus der Standard-Ansicht oder Eingabe<br />

von »wf.msc« im Kombinationsfeld des<br />

Startmenüs. Es öffnet sich eine Management-Konsole<br />

(MMC), die die übliche<br />

Dreiteilung aufweist: Links befindet sich<br />

das Menü, rechts die Aktionsmöglichkeiten<br />

<strong>und</strong> in der Mitte das Hauptfenster <strong>mit</strong><br />

den Inhalten entsprechend des Kontextes<br />

(Abbildung 3). Die erste Übersicht zeigt<br />

die Konfiguration der einzelnen Netzwerkstandorte,<br />

die hier als »Profile« bezeichnet<br />

werden.<br />

Netzwerkstandorte <strong>und</strong><br />

Profile<br />

Irritierenderweise werden die Netzwerkstandorte<br />

auch als Netzwerkadressen<br />

bezeichnet, so zum Beispiel in der Windows-Hilfe.<br />

Bei einem Netzwerkstandort<br />

beziehungsweise einer Netzwerkadresse<br />

in diesem Sinne handelt es sich um Sicherheitseinstellungen,<br />

die automatisch<br />

aktiv werden, wenn der Computer an<br />

ein Netzwerk angeschlossen wird. Dabei<br />

werden vier Netzwerkstandorte unterschieden:<br />

n Heimnetzwerk: Diese Konfiguration<br />

sollte nur in sehr vertrauenswürdigen<br />

Umgebungen aktiviert werden. Hier<br />

kann eine Heimnetzgruppe erstellt<br />

werden, die weitgehend ungeschützten<br />

Zugang zu persönlichen Ordnern<br />

auf anderen Computern derselben<br />

Heimnetzgruppe ermöglicht. Die<br />

Heimnetzgruppe ist eine Art Minidomäne<br />

für zu Hause.<br />

n Arbeitsplatznetzwerk: Für kleine<br />

Firmennetzwerke gedacht, ist diese<br />

Standort-Konfiguration ebenfalls für<br />

vertrauenswürdige Umgebungen geeignet.<br />

Der Zugriff auf Freigaben ist<br />

möglich, die Mechanismen der Netzwerkerkennung<br />

sind aktiv, sodass<br />

der Computer im Netzwerk gef<strong>und</strong>en<br />

werden <strong>und</strong> andere Computer finden<br />

kann.<br />

n Öffentliches Netzwerk: Befindet sich<br />

der Computer in einem ungeschützten,<br />

öffentlichen Netzwerk, ist diese<br />

Standort-Konfiguration sinnvoll, um<br />

den Zugriff von außen auf den Computer<br />

effektiv zu unterbinden. Hier ist<br />

die Netzwerkerkennung deaktiviert,<br />

<strong>und</strong> Zugriffsversuche von außen sind<br />

unterb<strong>und</strong>en.<br />

n Domäne: Diese Netzwerk-Konfiguration<br />

wird automatisch aktiviert, wenn<br />

der Computer einer Active Directory-<br />

Domäne beitritt. Sie wird vom Administrator<br />

der Domäne gesteuert <strong>und</strong><br />

kann nicht ausgewählt werden.<br />

Die Auswahl des gewünschten Netzwerkstandorts<br />

geschieht über das Netzwerk<strong>und</strong><br />

Freigabecenter. Hier ist es möglich,<br />

unter »Aktive Netzwerke anzeigen« den<br />

Netzwerktyp anzupassen. Während die<br />

Netzwerkstandort-Einstellungen diverse<br />

Mechanismen umfassen, bezeichnet das<br />

Profil der Firewall die Einstellungen der<br />

Windows-Firewall.<br />

Alle Regeln lassen sich separat für einzelne<br />

Profile aktivieren oder deaktivieren.<br />

Hierbei werden die Einstellungen für<br />

das Heimnetzwerk <strong>und</strong> das Arbeitsplatz-<br />

Abbildung 1: Die Konfiguration der Windows-Firewall kann für jeden Standort-Typ<br />

festgelegt werden, etwa das »Heim‐ oder Arbeitsplatznetzwerk«.<br />

Abbildung 2: Die Kommunikation <strong>mit</strong> der Außenwelt lässt sich auf Basis von<br />

Protokollen <strong>und</strong> Programmen steuern.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

81


Security<br />

Windows-Firewall<br />

Abbildung 3: Die Management-Konsole zeigt hier die Regeln für den eingehenden Datenverkehr.<br />

netzwerk allerdings als »Privates Profil«<br />

zusammengefasst.<br />

Das Gr<strong>und</strong>verhalten der Windows-<br />

Firewall lässt sich über die Eigenschaften<br />

für jedes Profil einstellen. Hierzu wählen<br />

Sie im Kontextmenü des obersten<br />

Symbols aus dem Menü links den Punkt<br />

»Eigenschaften« aus. In den Gr<strong>und</strong>einstellungen<br />

können Sie zum Beispiel festlegen,<br />

wie sich die Firewall verhält, wenn<br />

ein- oder ausgehende Verbindungen nicht<br />

von einer Regel explizit erfasst wurden.<br />

Dies wird auch als »Standardregel« bezeichnet.<br />

Standardmäßig werden alle eingehenden<br />

Verbindungen gr<strong>und</strong>sätzlich<br />

geblockt, während ausgehende Verbindungen<br />

erlaubt sind (Abbildung 4).<br />

Abbildung 4: In den Gr<strong>und</strong>einstellungen erlaubt die<br />

Firewall ausgehende Verbindungen <strong>und</strong> blockiert alle<br />

eingehenden.<br />

Es gibt gr<strong>und</strong>sätzlich drei Bereiche, in<br />

denen Sie die Firewall-Regelwerkseinstellungen<br />

ändern können:<br />

n Eingehende Regeln: Diese Regeln beziehen<br />

sich auf alle Kommunikationsanfragen<br />

von außen.<br />

n Ausgehende Regeln: Diese Regeln<br />

steuern, welche Kommunikation vom<br />

Rechner ausgehen darf.<br />

n Verbindungssicherheitsregeln: Dieser<br />

Bereich ermöglicht Einstellungen für<br />

Kommunikation, die authentisiert<br />

<strong>und</strong>/​oder verschlüsselt werden soll.<br />

Das Hauptfenster zeigt alle vorhandenen<br />

Regeln an, die für den entsprechenden Bereich,<br />

zum Beispiel »Eingehende Regeln«,<br />

erstellt wurden. Dabei existieren diverse<br />

Abbildung 5: Bestehende Regeln lassen sich <strong>mit</strong><br />

einem Klick aktivieren, wie hier die Firewall für den<br />

Branche-Cache.<br />

von Windows bereits vorgefertigte Regeln.<br />

Die Übersicht enthält ziemlich viele<br />

Spalten, die die Einstellungen für jede<br />

einzelne Regel bereits in der Übersicht<br />

zeigen. Die Aktion einer Regel besteht<br />

aus einer der folgenden Möglickeiten:<br />

n zulassen<br />

n blockieren<br />

n zulassen, wenn sie sicher ist<br />

Welche Aktion vorgesehen ist, zeigt das<br />

Symbol in der ersten Spalte vor dem Regelnamen.<br />

Dabei wird zwischen aktiven<br />

<strong>und</strong> nicht aktiven Regeln unterschieden.<br />

Bei nicht aktivierten Regeln ist das Symbol<br />

ausgegraut. Gerade hiervon existieren<br />

in der Gr<strong>und</strong>einstellung etliche Regeln<br />

für diverse Einsatzzwecke, die Sie bei<br />

Bedarf aktivieren können. Dazu klicken<br />

Sie doppelt auf die Regel <strong>und</strong> setzen das<br />

Häkchen vor »Aktiviert« (Abbildung 5).<br />

Programme können bei der Installation<br />

eigene Regeln einfügen. So fügen zum<br />

Beispiel Spiele regelmäßig diverse Regeln<br />

zum Regelwerk für eingehende Regeln<br />

hinzu. Auf Windows-Servern werden<br />

Regeln bei der Installation der verschiedenen<br />

Server-Dienste hinzugefügt. Da<strong>mit</strong><br />

ist es je nach Szenario <strong>und</strong> Umgebung<br />

möglich, dass Sie als Admininstrator nur<br />

sehr selten tatsächlich manuell Regeln<br />

hinzufügen müssen.<br />

Eine neue Regel erstellen<br />

Um zum Beispiel eine eingehende Regel<br />

hinzuzufügen, wählen Sie im Kontextmenü<br />

des Menüpunktes »Eingehende<br />

Regeln« den Punkt »Neue Regel«. Gr<strong>und</strong>sätzlich<br />

können Sie entscheiden, ob sich<br />

die Regel auf das Zulassen oder Blocken<br />

eines Programms oder eines Ports beziehen<br />

soll. Ein zugelassenes Programm darf<br />

sich an beliebige Ports binden <strong>und</strong> von<br />

außen über beliebige Wege angesprochen<br />

werden.<br />

Alternativ dazu können Sie auch aus einer<br />

Liste vordefinierter Regeln eine passende<br />

auswählen (Abbildung 6). Dies<br />

ist zum Beispiel bei der Aktivierung des<br />

Branch-Cache-Features sinnvoll. Auf alle<br />

Konfigurationsmöglichkeiten können Sie<br />

allerdings nur zugreifen, wenn Sie »Benutzerdefiniert«<br />

auswählen. Hier können<br />

Sie zunächst auswählen, ob sich die Regel<br />

auf ein bestimmtes Programm beziehen<br />

oder programmunabhängig sein soll.<br />

Als Nächstes wählen Sie entweder einen<br />

82 Ausgabe 06-2012 Admin www.admin-magazin.de


Windows-Firewall<br />

Security<br />

Protokolltyp (zum Beispiel TCP, UDP<br />

oder ICMP) aus oder belassen den Protokolltyp<br />

auf »Alle«. Je nach Auswahl aktiviert<br />

oder deaktiviert die Eingabemaske<br />

die protokollspezifischen Informationen.<br />

So können Sie im Protokoll ICMP natürlich<br />

keine Ports auswählen. Umgekehrt<br />

können Sie keine ICMP-Einstellungen für<br />

TCP oder UDP vornehmen.<br />

IPv4 <strong>und</strong> IPv6<br />

Das nächste Dialogfenster ermöglicht die<br />

Auswahl von Quell- <strong>und</strong> Zieladressen, die<br />

hier als »lokal« <strong>und</strong> »remote« bezeichnet<br />

werden. In der Regel ist nur die Einschränkung<br />

der Remote-Adressen relevant.<br />

In das Eingabefeld können sowohl<br />

IPv4- als auch IPv6-Adressen eingetragen<br />

werden. Dabei kann es sich um eine<br />

Hostadresse oder eine Netzadresse handeln.<br />

Auch Adressbereiche sind möglich.<br />

Beispiele sind unter dem Eingabefeld<br />

angezeigt. Schließlich muss die Aktion<br />

(siehe oben) festgelegt werden. Die Regel<br />

benötigt nun noch eine Zuordnung zu<br />

den Profilen <strong>und</strong> einen Namen. Anschließend<br />

erscheint die fertige Regel in der<br />

Regelliste ganz oben. Dies ist jedoch nur<br />

jetzt der Fall.<br />

Sobald das Snap-In erneut aufgerufen<br />

beziehungsweise nach einer Spalte<br />

sortiert wird, ordnet sich die Regel entsprechend<br />

ein. Im Übrigen gibt es für<br />

vordefinierte Windows-Regeln eine Gruppenzuordnung,<br />

die in der zweiten Spalte<br />

erscheint. Da<strong>mit</strong> können Sie zum einen<br />

zusammengehörige Regeln entsprechend<br />

nach der Gruppe sortiert anzeigen lassen<br />

<strong>und</strong> zum anderen Regeln einer Gruppe<br />

einfach steuern, zum Beispiel <strong>mit</strong>hilfe<br />

der Netshell (»netsh«) aktivieren oder deaktivieren.<br />

Erstellte Regeln sind übrigens<br />

sofort aktiv. Einen Speichern-Button gibt<br />

es hier nicht.<br />

Die Eigenschaften vorhandener Regeln<br />

können Sie per Doppelklick oder Auswahl<br />

von »Eigenschaften« aus dem Kontextmenü<br />

einer Regel ansehen. Handelt es<br />

sich um eine vordefinierte Regel, können<br />

Sie die Eigenschaften nicht ändern. Bei<br />

allen anderen Regeln dürfen Sie jeden Parameter<br />

einer Regel auch im Nach hinein<br />

anpassen.<br />

Ausgehende Regeln<br />

Im Bereich »Ausgehende Regeln« sind<br />

ebenfalls diverse Regeln vordefiniert.<br />

Viele von diesen Regeln sind deaktiviert,<br />

einzelne Regeln, für die als Aktion »zulassen«<br />

definiert ist, aber bereits aktiviert.<br />

Diese Regeln sind allerdings erst dann<br />

wirklich relevant, wenn die Standardregel<br />

des aktiven Profils auf »blocken« steht,<br />

was per Default nicht der Fall ist. Im<br />

Normalfall erlaubt die Windows-Firewall<br />

jede ausgehende Kommunikation, die<br />

nicht explizit geblockt wird. Solange<br />

die Standardregel für ausgehende Verbindungen<br />

auf »zulassen« steht, ergeben<br />

bei den ausgehenden Regeln nur diejenigen<br />

Regeln Sinn, die entweder eine bestimmte<br />

Kommunikation blocken oder<br />

aber sichere Verbindungen voraussetzen.<br />

Windows kennt eine Reihe von Regel-<br />

typen. Neben den bisher vorgestellten<br />

gibt es zum Beispiel noch die Windows-<br />

Diensthärtung, Verbindungssicherheitsregeln<br />

<strong>und</strong> Regeln zur authentifizierten<br />

Umgehung. Die Reihenfolge der internen<br />

Abarbeitung funktioniert in der folgenden<br />

Art <strong>und</strong> Weise:<br />

1. Windows-Diensthärtung<br />

2. Verbindungssicherheitsregeln<br />

3. Authentifizierte Umgehungsregeln<br />

4. Sperrregeln<br />

5. Zulassungsregeln<br />

6. Standardregeln<br />

Mit diesem Ansatz geht die Windows-<br />

Firewall etwas andere Wege als andere<br />

Firewalls, die das Regelwerk in der Reihenfolge<br />

der einzelnen Regeln abarbeiten.<br />

Bei der Erstellung der Regeln müssen<br />

Sie dies berücksichtigen.<br />

Nur abgesicherte Verbindungen<br />

erlaubt<br />

Während die normalen Regeln Verbindungen<br />

zulassen oder blockieren, ergänzen<br />

die Verbindungssicherheitsregeln<br />

dieses Regelwerk. Wählen Sie in einer<br />

Regel aus, dass nur sichere Verbindungen<br />

erlaubt sein sollen, muss die Kommunikation<br />

einer der hier erstellten Regeln<br />

entsprechen. Anders als bei den ein- oder<br />

ausgehenden Regeln existieren hier keine<br />

Default-Regeln.<br />

Die Erstellung einer Verbindungssicherheitsregel<br />

erfolgt in derselben Art <strong>und</strong><br />

Weise, wie die Erstellung ein- <strong>und</strong> ausgehender<br />

Regeln. Nach Auswahl von<br />

»Neue Regel« im Kontextmenü können<br />

Abbildung 6: Beim Hinzufügen von Regeln bietet die Windows Firewall eine<br />

vordefinierte Auswahl an.<br />

Abbildung 7: Im restriktivsten Modus ist für eingehende wie auch ausgehende<br />

Verbindungen eine Authentifizierung nötig.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

83


Security<br />

Windows-Firewall<br />

Sie zwischen verschiedenen Regeltypen<br />

wählen:<br />

n Isolierung: schränkt die Verbindungen<br />

anhand bestimmter Authentifizierungsregeln<br />

ein.<br />

n Authentifizierungsausnahme: definiert<br />

Computer, von denen keine Verbindungen<br />

angenommen werden.<br />

n Server-zu-Server: Verbindungen zwischen<br />

den in der Regel angegebenen<br />

Computern werden authentifiziert.<br />

n Tunnel: Bezieht sich auf Gateway-Computer<br />

als Tunnelendpunkte. Wählen<br />

Sie »Isolierung«, wird der Computer<br />

gegen nicht authentifizierte Computer<br />

isoliert. Auf der nächsten Dialogseite<br />

können wiederum verschiedene Möglichkeiten<br />

ausgewählt werden:<br />

n Authentifizierung für eingehende <strong>und</strong><br />

ausgehende Verbindungen anfordern:<br />

Obwohl die Authentifizierung generell<br />

angefordert wird, ist sie bei diesem<br />

Typ nicht erforderlich.<br />

n Authentifizierung ist für eingehende<br />

Verbindungen erforderlich <strong>und</strong> muss<br />

für ausgehende Verbindungen angefordert<br />

werden: Hier sind eingehende<br />

Verbindungen nur dann erlaubt, wenn<br />

sie authentifiziert werden können.<br />

Ausgehende Verbindungen werden<br />

zwar nach Möglichkeit authentifiziert,<br />

aber auch zugelassen, wenn die Authentifizierung<br />

nicht erfolgreich war.<br />

n Authentifizierung ist für eingehende<br />

<strong>und</strong> ausgehende Verbindungen erforderlich:<br />

Diese Einstellung ist die restriktivste<br />

von allen <strong>und</strong> erlaubt sowohl<br />

bei ein- als auch bei ausgehenden Verbindungen<br />

nur authentifizierte Kommunikation<br />

(Abbildung 7).<br />

Als Nächstes wird die Authentifizierungsmethode<br />

festgelegt. Hierbei können<br />

Sie wählen, ob die IPsec-Einstellungen<br />

verwendet werden sollen, oder ob über<br />

Kerberos authentifiziert werden soll.<br />

Letzeres erfordert die Mitgliedschaft in<br />

einer Domäne. Nachdem die Regel einen<br />

Namen erhalten hat, ist sie erstellt <strong>und</strong><br />

erscheint im Hauptfenster. Achtung: Die<br />

Regel ist auch sofort aktiv! Haben Sie<br />

eine entsprechend restriktive Regel erstellt,<br />

wird der Computer isoliert, wenn<br />

die Remote-Systeme nicht ebenfalls entsprechend<br />

konfiguriert sind. Möchten<br />

Sie die Verbindung über eine bestimmte<br />

ein- oder ausgehende Regel nur dann<br />

zulassen, wenn sie gesichert ist, können<br />

Abbildung 8: Mit dieser Einstellung erlaubt die<br />

Windows-Firewall Verbindungen nur dann, wenn sie<br />

entsprechend geschützt sind.<br />

Sie die entsprechende Aktion in den Eigenschaften<br />

der Regel auswählen (Abbildung<br />

8). In diesem Fall können Sie über<br />

den Button »Anpassen« weitere Einstellungen<br />

für die Sicherung der Kommunikation<br />

auswählen <strong>und</strong> so zum Beispiel<br />

eine Verschlüsselung erzwingen.<br />

Steuerung per Netshell<br />

<strong>und</strong> Powershell<br />

Die Windows-Firewall lässt sich bequem<br />

über die grafische Oberfläche konfigurieren.<br />

Unter »Computerkonfiguration/<br />

Windows‐Einstellungen/Sicherheitseinstellungen<br />

| Windows‐Firewall <strong>mit</strong> erweiterter<br />

Sicherheit« hilft der bekannte<br />

Dialog-Assistent dabei, bestimmte Regeln<br />

für ein- <strong>und</strong> ausgehenden Netzwerkverkehr<br />

<strong>und</strong> die Verbindungssicherheitsregeln<br />

zu erstellen.<br />

Doch auch auf der Kommandozeile lässt<br />

sich die Windows-Firewall auslesen <strong>und</strong><br />

konfigurieren, zum Beispiel <strong>mit</strong> der Netshell.<br />

So können Sie zum Beispiel alle<br />

Regeln der Firewall <strong>mit</strong> dem folgenden<br />

Befehl auslesen:<br />

netsh advfirewall firewall show rule U<br />

name=all<br />

Möchten Sie die Firewall deaktivieren,<br />

können Sie dies <strong>mit</strong> dem folgenden Befehl<br />

für sämtliche Profile tun: »netsh advfirewall<br />

set allprofiles state off«. Die Reaktivierung<br />

erfolgt <strong>mit</strong> demselben Befehl,<br />

nur dass am Ende »state on« angegeben<br />

wird. Um beispielsweise eine Regel zu erstellen,<br />

die Ping eingehend erlaubt, lautet<br />

der Befehl folgendermaßen:<br />

netsh advfirewall firewall add rule nameU<br />

="ICMPv4 eingehend" dir=in action=allow U<br />

protocol=icmpv4<br />

Die Regel ist aktiv <strong>und</strong> wird auch im<br />

Regelwerk unter »Eingehende Regeln«<br />

angezeigt.<br />

Auch die Powershell ermöglicht eine<br />

Konfiguration der Windows-Firewall. Allerdings<br />

ist dies nicht ganz trivial <strong>und</strong><br />

bei Weitem nicht so gradlinig wie die<br />

Netshell-Befehle. Die Interaktion <strong>mit</strong> der<br />

Windows-Firewall geschieht über das<br />

COM-Objekt »HNetCFG.FWPolicy2«. Die<br />

Konfiguration erfordert einige Skripting-<br />

Kenntnisse.<br />

Tipps <strong>und</strong> Fazit<br />

Die Windows-Firewall <strong>mit</strong> erweiterter Sicherheit<br />

bietet die Möglichkeit, sowohl<br />

eingehende als auch ausgehende Verbindungen<br />

zu kontrollieren. Sie unterscheidet<br />

dabei einzelne Netzwerkstandorte,<br />

die als Profile hinterlegt sind. Dabei ist zu<br />

beachten, dass ausgehende Verbindungen<br />

gr<strong>und</strong>sätzlich durch die Standardregel<br />

für alle Profile erlaubt sind. Andererseits<br />

arbeitet die Firewall „stateful“, das<br />

heißt sie lässt Antwortpakete durch, ohne<br />

dass hierfür explizite Regeln erforderlich<br />

sind.<br />

Die Windows-Firewall ermöglicht es dem<br />

Administrator, im Gegensatz zu Netzwerk-Firewalls,<br />

für einzelne Programme<br />

festzulegen, ob ihnen die Kommunikation<br />

erlaubt oder verboten ist. Zusätzlich<br />

ist es möglich, die Kommunikation via<br />

IPsec abzusichern. Hierzu lässt sich die<br />

Windows-Firewall sowohl für Authentifizierung<br />

wie auch für Verschlüsselung<br />

konfigurieren. (ofr)<br />

n<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 />

<strong>und</strong> Consultant tätig <strong>und</strong> 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 />

84 Ausgabe 06-2012 Admin www.admin-magazin.de


VIRTUAL POWER &<br />

VOLLER ROOT-ZUGRIFF<br />

Virtual Server 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 Server-Administration.<br />

Virtual Server Linux<br />

Betriebssyteme<br />

Garantierte CPU-Power<br />

Garantiertes RAM<br />

Speicherplatz (<strong>RAID</strong>10)<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 <strong>und</strong> PHP5 sind für Sie<br />

bereits vorinstalliert.<br />

Host Europe SSL-Zertifikat gratis**<br />

Mehr Sicherheit inklusive: Bei der Bestellung<br />

eines Virtual Server erhalten Sie das Zertifikat<br />

Host Europe SSL kostenlos.<br />

Virtual Server 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 Server <strong>mit</strong> Linux-Betriebssystem kostenlos hinzubuchen.


Security<br />

Fail2ban<br />

© Javier Brosch, 123RF<br />

Brute-Force-Angriffe <strong>mit</strong> Fail2ban verhindern<br />

Haus <strong>mit</strong><br />

Hüter<br />

Wer denkt, <strong>mit</strong> dem Schließen aller Ports außer SSH wäre es getan, irrt.<br />

Brute-Force-Angriffe darauf sind trivial <strong>und</strong> gelingen häufig in kurzer Zeit.<br />

Fail2ban schiebt einen Riegel vor. Chris Binnie<br />

Es gibt nur wenige kleine Skripte, die<br />

sich so f<strong>und</strong>amental auf den Betrieb eines<br />

Servers auswirken wie Fail2ban. Deshalb<br />

haben vermutlich auch die meisten<br />

schon einmal davon gehört. Wer Fail2ban<br />

nicht kennt, beschäftigt sich vermutlich<br />

eher <strong>mit</strong> anderen Bereichen der Systemadministration<br />

oder ist ein relativer Neueinsteiger.<br />

Die Skriptsammlung arbeitet <strong>mit</strong> den üblichen<br />

Firewall-Paketen zusammen <strong>und</strong><br />

sperrt IP-Adressen nach einigen gescheiterten<br />

Login-Versuchen aus. Das klingt<br />

vielleicht nicht besonders aufregend,<br />

aber die W<strong>und</strong>er dieses leistungsfähigen<br />

Tools stecken im Detail.<br />

Ich selbst habe Fail2ban vorwiegend für<br />

fehlgeschlagene SSH-Logins verwendet,<br />

was vermutlich die häufigste Anwendung<br />

ist, bevor ich davon genervt war, dass die<br />

Webserver-Logfiles voll <strong>mit</strong> den Spuren<br />

von Angriffsversuchen waren. Überall<br />

fanden sich Spuren davon, versteckte<br />

Verzeichnisse oder verw<strong>und</strong>bare Content-<br />

Management-Systeme zu finden. Außerdem<br />

hatte ich einige Mailserver, die das<br />

Relaying <strong>mit</strong> SASL-Passwort-Authentifizierung<br />

[1] gegen Benutzer-Accounts per<br />

PAM erlaubten. Die SASL-Accounts waren<br />

so eingerichtet, dass man sich da<strong>mit</strong><br />

nicht auf dem System einloggen konnte,<br />

aber trotzdem barg die Authentifizierung<br />

noch ein Restrisiko. Mit Fail2ban konnte<br />

ich einfach die betreffende IP-Adresse<br />

sperren, wenn ein Username dreimal das<br />

falsche Passwort verwendete.<br />

Transparenz<br />

Wie Fail2ban [2] arbeitet, ist leicht erklärt.<br />

Es beobachtet die Logdateien <strong>und</strong><br />

führt eine vordefinierte Aktion aus, wenn<br />

es ein bestimmtes Muster findet. Wie<br />

man diese Filter <strong>und</strong> Aktionen definiert,<br />

wird schnell klar, wenn Fail2bain installiert<br />

ist.<br />

Der erwähnte Einsatz von Fail2ban,<br />

Brute-Force-Attacken auf SSG zu stoppen,<br />

ist auf jeden Fall sehr sinnvoll. Er<br />

reduziert nicht nur das Rauschen in den<br />

Log-Dateien, es ist auch ein Sicherheitsrisiko,<br />

beliebig viele Versuche bei einem<br />

solchen Login zu erlauben. Viele Angriffe<br />

durch Bots lassen sich zusätzlich<br />

verhindern, wenn man den Port ändert,<br />

auf dem SSH läuft. Wer es sich erlauben<br />

kann, etwa weil Anwender immer dieselben<br />

IP-Adressen verwenden, sichert SSH<br />

zusätzlich ab, indem er das Login per<br />

TCP-Wrapper auf bestimmte IP-Adressen<br />

beschränkt [3]. Man sollte daran denken,<br />

dass automatisierte Angriffe äußerst<br />

effizient ablaufen <strong>und</strong> einige Male pro<br />

Sek<strong>und</strong>e ablaufen können. Da<strong>mit</strong> können<br />

Angreifer in wenigen Minuten eine ganze<br />

Menge populärer Passwörter ausprobieren.<br />

Abbildung 1 zeigt eine Logdatei, die<br />

fehlgeschlagene Logins wiedergibt.<br />

Glücklicherweise gibt es bereits einigen<br />

nützliche Skripts, die bei der Installation<br />

von Fail2ban auf der Festplatte landen.<br />

Dabei gibt es einige Abkürzungen, sogenannte<br />

Tags, die man in eigenen Skripts<br />

verwenden kann, zum Beispiel »HOST«.<br />

Das folgende Fragment trifft auf ein fehlgeschlagenes<br />

SSH-Login zu <strong>und</strong> findet<br />

sich auf einem Debian-Rechner in »/etc/<br />

fail2ban/filter.d/sshd.conf«:<br />

failregex = ^%(__prefix_line)sFailed U<br />

(?:password|publickey) for .* from U<br />

(?: port \d*)?(?: ssh\d*)?$<br />

Die Regular Expression trifft auf Zeilen<br />

zu, wie sie in Abbildung 1 zu sehen sind<br />

<strong>und</strong> passt gleichermaßen auf fehlgeschlagene<br />

Logins per Username/​Passwort <strong>und</strong><br />

Public/​Private Key. Die dritte Zeile macht<br />

von dem erwähnten Host-Tag Gebrauch.<br />

Was die Logfile-Einträge betrifft, die sich<br />

von System zu System zum Teil erheblich<br />

unterscheiden, ist Fail2ban recht flexibel.<br />

Selbst in der Standard-Konfigurationsdatei<br />

für SSH haben die Fail2ban-Entwickler<br />

eine ganze Reihe von Formulierungen für<br />

die »failregex« vorgesehen, von denen<br />

eine für den jeweiligen Einsatzort passen<br />

sollte. Die Beispiel in Listing 1 sind normalerweise<br />

auskommentiert.<br />

Regulär geprüft<br />

Wie erwähnt, kann Fail2ban auch Angriffe<br />

auf den Mailserver abwehren, etwa<br />

Login-Versuchen per SASL. Die Failregex<br />

dafür in »/etc/fail2ban/filter.d/sasl.conf«<br />

sieht etwa so aus:<br />

failregex = (?i): warning: U<br />

[‐._\w]+\[\]: SASL (U<br />

?:LOGIN|PLAIN|(?:CRAM|DIGEST)‐MD5) U<br />

authentication failed: U<br />

authentication failure<br />

Diese Regular Expression trifft auf die<br />

fehlgeschlagenen SASL-Logins zu, die<br />

im Logfile »/var/log/mail.log« so auftauchen.<br />

Der Ausdruck »(?i)« weist Fail2ban<br />

an, nicht auf die Groß- <strong>und</strong> Kleinschrei-<br />

86 Ausgabe 06-2012 Admin www.admin-magazin.de


Fail2ban<br />

Security<br />

Die eigentliche Blockade wird von der<br />

jeweiligen Firewall-Software ausgeführt,<br />

im Beispiel-Fall ist dies Linux-IPTables.<br />

In der Datei »/etc/fail2ban/action.d/<br />

iptables‐multiport.conf« finden sich dafür<br />

die Einstellungen:<br />

Actionban: actionban = iptables U<br />

‐I fail2ban‐Name 1 ‐s IP ‐j DROP<br />

Actionunban: actionunban = iptables U<br />

‐D fail2ban‐Name ‐s IP ‐j DROP<br />

Abbildung 1: So tauchen fehlgeschlagene Login-Versuche in einer Logdatei auf.<br />

bung der Strings zu achten (case insensitive).<br />

Die Syntax gehorcht den Regeln der<br />

Python Regular Expressions.<br />

Layout<br />

Die bisher erwähnten Konfigurationsdateien<br />

liegen im Unterverzeichnis<br />

»filter.d«, wo sich auch noch eine Reihe<br />

weiterer Anwendungen findet. Wenn sie<br />

nicht h<strong>und</strong>ertprozentig auf das eigene<br />

Betriebssystem zutreffen, muss man sie<br />

gegebenenfalls anpassen. Auf der Fail-<br />

2ban-Site gibt es für einige Services noch<br />

spezifische Howto-Dokumente, die weiterhelfen.<br />

Die Haupt-Konfigurationsdatei heißt »jail.<br />

conf« <strong>und</strong> enthält viele nützliche Hinweise.<br />

So lässt sich <strong>mit</strong> »ignoreip« eine IP-<br />

Adresse oder eine ganzes Netz einstellen,<br />

das von der Blockade ausgenommen ist,<br />

da<strong>mit</strong> sich der Admin nicht versehentlich<br />

selbst aussperrt. Außerdem enthält die<br />

Datei Default-Einstellungen, die für alle<br />

Dienste gelten, solange diese sie nicht<br />

überschreiben, etwa:<br />

bantime = 3600<br />

maxretry = 3<br />

Hier<strong>mit</strong> hat jeder Anwender drei Versuche<br />

frei, sein Glück zu versuchen. Das<br />

ist recht restriktiv <strong>und</strong> vielleicht zu restriktiv<br />

für viele Situationen. Die »bantime«<br />

legt in Sek<strong>und</strong>en fest, wie lange eine IP-<br />

Adresse ausgesperrt bleibt.<br />

Auch der Backend-Daemon, der die Logdateien<br />

überprüft, lässt sich festlegen.<br />

Hier ist »gamin« eine gute Wahl, denn<br />

hier<strong>mit</strong> wird Fail2ban über Änderungen<br />

unterrichtet <strong>und</strong> das System so<strong>mit</strong> weniger<br />

belastet als durch eine ständige Überprüfung.<br />

Laut Fail2ban-Dokumentation<br />

ist diese Einstellung auf Fedora- <strong>und</strong> Red-<br />

Hat-Systemen sogar obligatorisch, weil<br />

der Logscanner sonst in Konflikt <strong>mit</strong> SE-<br />

Linux gerät.<br />

Im Verzeichnis »actions.d« sind schließlich<br />

die Maßnahmen aufgeführt, die Fail-<br />

2ban ergreift. Der Rest der Datei »jails.<br />

conf« besteht aus jeweils einer kurzen<br />

Defintion für den zu überwachenden<br />

Dienst, der sich über die Anweisung<br />

»enabled« ein- <strong>und</strong> ausschalten lässt:<br />

[sasl]<br />

enabled<br />

port<br />

filter<br />

logpath<br />

= true<br />

= smtp<br />

= sasl<br />

= /var/log/mail.log<br />

Statt konkrete Gegenmaßnahmen zu starten,<br />

kann Fail2ban auch nur einen Trigger<br />

auslösen. Die komplette Breitseite feuert<br />

dagegen Listing 2 ab, das den mutmaßlichen<br />

Angreifer blockiert <strong>und</strong> eine E-Mail<br />

<strong>mit</strong> den Logdaten <strong>und</strong> einem Whois-Auszug<br />

der IP-Adresse verschickt.<br />

Listing 1: Failregex-Beispiele<br />

Listing 2: Aktionen: Sperren <strong>und</strong> Mailen<br />

Mit der ersten Zeile wird ein Eintrag in<br />

der Firewall vorgenommen, der die IP-<br />

Adresse »IP« sperrt, die aus dem Muster<br />

der Failregex stammt.<br />

Fazit<br />

Fail2ban kann helfen, Brute-Force-Attacken<br />

auf alle möglichen Dienste zu verhindern<br />

oder zumindest wesentlich zu<br />

bremsen. Vorausgesetzt wird vernünftiges<br />

Logging des jeweiligen Service <strong>und</strong><br />

Kenntnisse von Regular Expressions<br />

auf Seiten des Administrators. Nach der<br />

Installation sollte man gelegentlich einen<br />

Blick in »/var/log/fail2ban.log« werfen<br />

<strong>und</strong> die Erfolgsquote des neuen Wächters<br />

überprüfen. (ofr)<br />

n<br />

Infos<br />

[1] SASL: [http:// en. wikipedia. org/ wiki/ Simple_<br />

Authentication_and_Security_Layer]<br />

[2] Fail2ban: [http:// www. fail2ban. org/]<br />

[3] TCP-Wrapper: [http:// en. wikipedia. org/​<br />

wiki/ TCP_Wrapper]<br />

01 failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from \s*$<br />

02 ^%(__prefix_line)s(?:error: PAM: )?User not known to the <strong>und</strong>erlying authentication module<br />

for .* from\s*$<br />

03 ^%(__prefix_line)sFailed (?:password|publickey) for .* from (?: port \d*)?(?:<br />

ssh\d*)?$<br />

04 ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s*$<br />

05 ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from \s*$<br />

06 ^%(__prefix_line)sUser .+ from not allowed because not listed in AllowUsers$<br />

07 ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S*<br />

rhost=(?:\s+user=.*)?\s*$<br />

08 ^%(__prefix_line)srefused connect from \S+ \(\)\s*$<br />

09 ^%(__prefix_line)sAddress .* POSSIBLE BREAK‐IN ATTEMPT!*\s*$<br />

10 ^%(__prefix_line)sUser .+ from not allowed because none of user's groups are listed<br />

in AllowGroups\s*$<br />

01 # ban the IP & send an e‐mail with whois report and include relevant log lines to the destemail<br />

02 action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]<br />

03 %(mta)s‐whois‐lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

87


Basics<br />

Ausführungspläne<br />

© Gunnar Pippel, 123RF<br />

Datenbank-Ausführungspläne lesen <strong>und</strong> verstehen<br />

Alles nach Plan<br />

Will man das Optimierungspotenzial von SQL-Abfragen oder ihren zukünftigen Ressourcenbedarf abschätzen,<br />

braucht man einen Blick unter die Haube. Den erlauben die Ausführungspläne der Datenbank. Wer sie versteht,<br />

hält den Schlüssel für effektives SQL in der Hand. Markus Winand<br />

Der sogenannte Ausführungsplan (execution<br />

plan, oft auch explain plan oder<br />

query execution plan) enthält die einzelnen<br />

Schritte, die eine Datenbank beim<br />

Abarbeiten einer SQL-Anweisung ausführt.<br />

Ausführungspläne geben zum Beispiel<br />

Aufschluss darüber, welche Indizes<br />

benutzt werden, in welcher Reihenfolge<br />

die Zugriffe auf die verschiedenen Tabellen<br />

erfolgen, <strong>und</strong> welche Algorithmen für<br />

Join-, Sortier- <strong>und</strong> Gruppier-Operationen<br />

zum Zuge kommen.<br />

Im Vergleich <strong>mit</strong> anderen Programmiersprachen<br />

entspricht der Ausführungsplan<br />

ungefähr dem Bytecode von<br />

Scriptsprachen wie Perl oder Python –<br />

er wird intern bei der Ausführung der<br />

SQL-Anweisung verwendet. Aufgr<strong>und</strong><br />

dieser Analogie wird das Erstellen eines<br />

Ausführungsplanes manchmal auch als<br />

Kompilieren bezeichnet. Gebräuchlicher<br />

ist aber die Bezeichnung Prepare für<br />

diese Phase (siehe Abbildung 1). Da die<br />

entsprechende Datenbank-Komponente<br />

Optimizer oder Query Planner heißt, sind<br />

auch die Begriffe Optimieren <strong>und</strong> Planen<br />

gebräuchlich.<br />

Ausführungspläne sind in erster Linie ein<br />

internes Mittel zum Zweck. Der Admin<br />

kann sie aber dennoch einsehen. Weil der<br />

Ausführungsplan die Abläufe auf einer<br />

ähnlichen Abstraktionsebene darstellt<br />

wie SQL, kann man einen Ausführungsplan<br />

sehr schnell lesen – durch die einheitliche<br />

Formatierung oft sogar schneller<br />

als die ursprüngliche SQL-Anweisung.<br />

Kein übergreifender Standard<br />

Einheitlich ist die Formatierung von Ausführungsplänen<br />

aber nur innerhalb einer<br />

Datenbank. Einen herstellerübergreifenden<br />

Standard gibt es dafür nicht. Tatsächlich<br />

sehen die Ausführungspläne einer<br />

MySQL-Datenbank völlig anders aus als<br />

zum Beispiel bei Microsofts SQL Server.<br />

Genauso unterschiedlich sind die Methoden<br />

zur Anzeige eines Ausführungsplanes.<br />

Während es bei PostgreSQL <strong>und</strong><br />

MySQL genügt, der SQL-Anweisung das<br />

Schlüsselwort »explain« voranzustellen,<br />

muss man bei Oracle das Kommando<br />

»xplain plan for« <strong>mit</strong> dem Funktionsaufruf<br />

»DBMS_XPLAN.DISPLAY« kombinieren<br />

(siehe Beispiel 1).<br />

Grafische Benutzeroberflächen bieten<br />

dafür entsprechende Schaltflächen oder<br />

Menüpunkte. Dieser Artikel legt den<br />

Schwerpunkt auf MySQL, Hinweise zu<br />

anderen Produkten finden sich hier [1].<br />

Der Rest dieses Beitrags wird zeigen, wie<br />

der Admin die wichtigsten Informationen<br />

aus Ausführungsplänen herausliest <strong>und</strong><br />

häufige Fehlinterpretationen vermeidet.<br />

Der Cost-Wert<br />

Der Cost-Wert ist ein Benchmark, der<br />

vom Optimizer benutzt wird, um den<br />

besten Ausführungsplan für eine SQL-<br />

Anweisung zu finden. Grob gesprochen<br />

könnte man sagen, dass der Cost-Wert ein<br />

Maßstab für die Ausführungsgeschwindigkeit<br />

ist. Genau betrachtet gilt das aber<br />

nur für jeweils eine SQL-Anweisung un-<br />

88 Ausgabe 06-2012 Admin www.admin-magazin.de


Ausführungspläne<br />

Basics<br />

ter bestimmten Rahmenbedingungen, zu<br />

denen etwa die Tabellengröße gehört.<br />

Das heißt, der Cost-Wert ist gr<strong>und</strong>sätzlich<br />

nicht geeignet, um die Performance<br />

verschiedener SQL-Anweisungen <strong>mit</strong>einander<br />

zu vergleichen.<br />

Natürlich kann der Cost-Wert dennoch<br />

ein grobes Gefühl für die Ausführungsgeschwindigkeit<br />

liefern. So kann ein Wert<br />

in den Milliarden durchaus den Rückschluss<br />

zulassen, dass die Ausführung<br />

ewig dauern wird. Der Cost-Wert ist dafür<br />

aber lediglich der Indikator, nicht die Ursache,<br />

denn auf die Execute-Phase wirkt<br />

er sich nicht aus.<br />

Etwas Ähnliches gilt <strong>mit</strong> Blick auf die Optimizer-Statistiken.<br />

Weil diese Statistiken<br />

die Gr<strong>und</strong>lage für die Berechnung des<br />

Cost-Wertes sind, verändert ein Update<br />

auch den Cost-Wert. Dennoch wird sich<br />

die Geschwindigkeit der SQL-Abfrage<br />

nicht ändern, wenn der Ausführungsplan<br />

ansonsten unverändert bleibt – das heißt,<br />

wenn dieselben Operationen nach wie<br />

vor in derselben Reihenfolge abgearbeitet<br />

werden.<br />

Index-Nutzung<br />

Eine andere Fehlinterpretation von Ausführungsplänen<br />

hat <strong>mit</strong> der Verwendung<br />

von Indizes zu tun. Hier herrscht<br />

oft die Vorstellung, dass ein Index die<br />

Ausführung prinzipiell beschleunigt.<br />

Das ist aber nur die halbe Wahrheit. Es<br />

gibt Fälle, in denen ein Index die Aus-<br />

SQL-Anweisung<br />

SELECT ...<br />

FROM ...<br />

WHERE ...<br />

Optimizer<br />

Ausführungsplan<br />

Execution<br />

Engine<br />

Ergebnis<br />

QTY PRICE DATE<br />

1 29.95 2012-11-08<br />

3 9.95 2012-11-07<br />

}<br />

Phase:<br />

execute<br />

Abbildung 1: Phasen der SQL-Ausführung.<br />

}<br />

Phase:<br />

prepare<br />

führung tatsächlich bremsen kann. Das<br />

sind vor allem Abfragen, die einen verhältnismäßig<br />

großen Teil einer Tabelle<br />

lesen. Ein Indexzugriff würde dabei sehr<br />

viele Lesezugriffe auf kleine Datenblöcke<br />

verursachen. Wenn die Datenbank<br />

die Tabelle stattdessen vollständig liest,<br />

kann sie größere Datenblöcke auf einmal<br />

anfordern <strong>und</strong> dadurch die Anzahl der<br />

Leseoperationen verringern. Das kann einen<br />

Performance-Vorteil bringen, weil bei<br />

Speichersystemen neben dem Durchsatz<br />

auch die IOPS (Input/​Output Operations<br />

per Second) begrenzt sind. Für die Entscheidung,<br />

ob es hilft oder schadet, einen<br />

Index zu nutzen, wird übrigens der Cost-<br />

Wert verwendet: Die Datenbank bewertet<br />

Beispiel 1: Oracle-Ausführungsplan erklärt<br />

01 SQL> explain plan for 1<br />

02 2> SELECT *<br />

03 3> FROM sales s<br />

04 4> JOIN employees e ON (s.employee_id = e.employee_id)<br />

05 5> WHERE s.sale_date > trunc(sysdate) ‐ INTERVAL '6' MONTH<br />

06 6> AND s.eur_value >= 10;<br />

07 Explained.<br />

08 <br />

09 SQL> select * from table(dbms_xplan.display 2 );<br />

10 <br />

11 <br />

12 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 3 ‐‐‐‐‐‐ 4 ‐‐<br />

13 | Id | Operation | Name | Bytes | Cost |<br />

14 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

15 | 0 | SELECT STATEMENT | 3130K | 833 |<br />

16 |* 1 | HASH JOIN | 3130K | 833 |<br />

17 |* 2 | TABLE ACCESS BY INDEX ROWID | SALES | 566K | 355 |<br />

18 |* 3 | INDEX RANGE SCAN | SALES_DATE | | 26 |<br />

19 | 4 | TABLE ACCESS FULL | EMPLOYEES | 9M | 478 |<br />

20 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

21 <br />

22 Predicate Information (identified by operation id):<br />

23 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

24 1 ‐ access("S"."EMPLOYEE_ID"="E"."EMPLOYEE_ID")<br />

25 2 ‐ filter 5 ( "S"."EUR_VALUE">=10)<br />

26 3 ‐ access 6 ( "S"."SALE_DATE">TRUNC(SYSDATE@!)<br />

27 ‐INTERVAL'+00‐06' YEAR(2) TO MONTH)<br />

da<strong>mit</strong> beide Ausführungsplan-Varianten<br />

<strong>und</strong> wählt letztendlich den <strong>mit</strong> dem besseren<br />

Cost-Wert.<br />

Aus einem Ausführungsplan kann man<br />

aber nicht nur ablesen, welcher Index benutzt<br />

wird, sondern auch etwas über die<br />

Effektivität des Indexzugriffes erfahren.<br />

Die hängt hauptsächlich davon ab, welche<br />

Teile der Where-Klausel durch den<br />

Index abgedeckt werden. Das kann man<br />

bei manchen Datenbanken anhand der<br />

sogenannten Filterprädikate direkt aus<br />

dem Ausführungsplan ablesen. Taucht<br />

ein solches Filterprädikat beim Tabellenzugriff<br />

auf, kann das ein Hinweis sein,<br />

dass diese Spalte im Index fehlt (Beispiel<br />

1 <strong>und</strong> Beispiel 3). E<br />

1 Das Kommando »explain plan for« speichert den Ausführungsplan lediglich in der »PLAN_TABLE«<br />

ab.<br />

2 Das Package DBMS_XPLAN bietet einige Funktionen zum Darstellen eines Ausführungsplanes.<br />

3 Die Bytes-Spalte zeigt die verarbeitete Datenmenge bei jeder Operation an. Dabei sind zwei<br />

Dinge zu beachten: Erstens handelt es sich dabei lediglich um eine Schätzung des Optimizers.<br />

Zweitens: Nur wenige Operationen müssen diese Daten zwischenspeichern. In diesem Beispiel<br />

muss der Hash-Join nur die kleinere Tabelle (566K) temporär im Arbeitsspeicher ablegen.<br />

4 Die Cost-Werte werden für jeden Teil-Baum des Ausführungsplanes angezeigt. Die Gesamtkosten<br />

sind auf der obersten Ebene zu finden.<br />

5 Das Filterprädikat zur Operation <strong>mit</strong> der Id 2 (»TABLE ACCESS BY INDEX ROWID«) ist ein Hinweis,<br />

dass die Spalte »EUR_VALUE« nicht im Index »SALE_DATE« ist (Operation Id 3).<br />

6 Das Zugriffsprädikat »access« beim Indexzugriff zeigt, dass der Index nur für die Bedingung<br />

auf SALE_DATE effizient genutzt wird.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

89


Basics<br />

Ausführungspläne<br />

Bei einem Indexzugriff können Filterprädikate<br />

auch ein Zeichen für eine falsche<br />

Spaltenreihenfolge sein (Beispiel 2).<br />

Nur wenn als Zugriffsprädikat die Werte<br />

»access« oder »seek predicate« angezeigt<br />

werden, nutzt die Abfrage den Index optimal<br />

aus.<br />

Beispiel 3: Ausführungsplan einer PostgreSQL-Datenbank<br />

01 postgres=# EXPLAIN 1<br />

02 postgres‐# SELECT *<br />

03 postgres‐# FROM sales s<br />

04 postgres‐# JOIN employees e ON (s.employee_id = e.employee_id)<br />

Filter- <strong>und</strong> Zugriffsprädikate können<br />

sinngemäß auch bei der Suche in einem<br />

gedruckten Telefonbuch vorkommen,<br />

wenn man zum Beispiel nur den Nachnamen<br />

<strong>und</strong> die Anschrift der gesuchten<br />

Person kennt. Dabei ist der erste Schritt,<br />

etwa alle Einträge für „Müller“ zu finden,<br />

05 postgres‐# WHERE s.sale_date > CURRENT_DATE ‐ INTERVAL '6' MONTH<br />

06 postgres‐# AND s.eur_value >= 10;<br />

07 <br />

Beispiel 2: SQL Server-Ausführungsplan erklärt<br />

Hier kann man sich über die Schaltfläche »Display<br />

Estimated Execution Plan« den Ausführungsplan<br />

anzeigen lassen. Bewegt man den<br />

Mauszeiger über eine Operation, öffnet sich<br />

ein Tool-Tip <strong>mit</strong> zusätzlichen Informationen. Der<br />

Cost-Wert der einzelnen Operation wird gleich<br />

dreimal angezeigt: zuerst aufgeteilt nach I/​<br />

O- <strong>und</strong> CPU-Cost, dann die Gesamtkosten. Zuletzt<br />

wird auch der Cost-Wert des gesamten<br />

08 QUERY PLAN<br />

09 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

10 Hash Join ( 2 cost=3091.01..13119.07 rows=59654 width=1286)<br />

11 Hash Cond: (s.employee_id = e.employee_id)<br />

12 ‐> Index Scan using sale_date on sales s (cost=0.01..3893.82 rows=59654 width=251)<br />

13 Index Cond: (sale_date > (('now'::text)::date ‐ '6 mons'::interval month))<br />

14 3 Filter: (eur_value >= 10::numeric)<br />

15 ‐> Hash (cost=1672.00..1672.00 4 rows=10000 width=1035)<br />

Teil-Baumes angezeigt. Die Gesamtkosten findet<br />

man im Tool-Tip auf oberster Ebene. Das<br />

Filterprädikat (»Predicate«) ist ein Hinweis,<br />

dass die Spalte »EUR_VALUE« nicht an einer<br />

geeigneten Index-Position für eine effiziente<br />

Nutzung steht. Das Zugriffsprädikat (»YSeek<br />

Predicate«) beim Indexzugriff zeigt, dass der<br />

Index nur für die Bedingung auf »SALE_DATE«<br />

effizient genutzt wird.<br />

16 ‐> Seq Scan on employees e (cost=0.00..1672.00 rows=10000 width=1035)<br />

1 Durch das Voranstellen von explain vor die SQL-Abfrage wird der Ausführungsplan angezeigt.<br />

2 Die Cost-Werte werden für jeden Teil-Baum des Ausführungsplanes angezeigt. PostgreSQL zeigt<br />

dabei jeweils zwei Werte an: zuerst die Setupkosten, dann die Gesamtkosten.<br />

3 Das Filterprädikat beim Indexzugriff ist bei PostgreSQL ein Hinweis, dass die Spalte EUR_VALUE<br />

nicht im Index SALE_DATE vorhanden ist.<br />

4 Durch die rows- <strong>und</strong> width-Werte beim Hash-Zweig der Join-Operation kann man auf den Speicherbedarf<br />

schließen. Dadurch wird auch deutlich, dass der Speicherbedarf nicht nur von den Zeilen,<br />

sondern auch von den selektierten Spalten – der Zeilenlänge – abhängig ist. Selektiert man<br />

weniger Spalten, reduziert sich der Speicherbedarf.<br />

sehr rasch erledigt. Aufgr<strong>und</strong> der Sortierung<br />

des Telefonbuches kann man sich<br />

durch Vor- <strong>und</strong> Zurückblättern schnell<br />

an „Müller“ annähern. Genau genommen<br />

führt man dabei eine binäre Suche durch,<br />

deren Aufwand nur logarithmisch <strong>mit</strong> der<br />

Größe des Telefonbuches wächst. Anders<br />

gesagt, wenn das Telefonbuch zehnmal<br />

so groß ist, dauert die Suche deswegen<br />

nicht auch gleich zehnmal so lange.<br />

In einer Datenbank wäre die Bedingung<br />

NACHNAME=’MÜLLER’ daher ein Zugriffsprädikat.<br />

Hat man die „Müllers“<br />

gef<strong>und</strong>en, bleibt noch die Eingrenzung<br />

<strong>mit</strong> der bekannten Adresse. Ohne den<br />

Vornamen zu kennen, kann man aber<br />

die Sortierung des Telefonbuches nicht<br />

weiter nutzen. Es bleibt einem also nichts<br />

anderes übrig, als alle „Müllers“ durchzugehen.<br />

In einer Datenbank wäre diese<br />

Bedingung daher ein Filterprädikat. Die<br />

Suchdauer steigt linear <strong>mit</strong> der Anzahl<br />

der „Müllers.“<br />

Filtern dauert viel länger<br />

Der Unterschied zwischen Zugriffs- <strong>und</strong><br />

Filterprädikaten wird häufig unterschätzt,<br />

kann aber durchaus beachtlich sein. Abbildung<br />

2 stellt den Performance-Unterschied<br />

dar. Im Idealfall – wenn zum<br />

Beispiel nur Zugriffsprädikate verwendet<br />

werden – kann die Geschwindigkeit auch<br />

bei einer stark wachsenden Tabelle nahezu<br />

konstant bleiben (grün dargestellt).<br />

Je mehr Filterprädikate verwendet werden,<br />

desto größer wird der Einfluss der<br />

Tabellengröße auf die Geschwindigkeit<br />

(rot dargestellt). Anders ausgedrückt<br />

kann man durch die Filter- <strong>und</strong> Zugriffsprädikate<br />

eine Prognose über die Geschwindigkeit<br />

bei wachsendem Datenvolumen<br />

anstellen <strong>und</strong> dadurch Probleme<br />

im Vorhinein erkennen. Die Ursache des<br />

eklatanten Performance-Unterschiedes<br />

in der Abbildung ist übrigens, dass die<br />

zweite <strong>und</strong> dritte Spalte im Index vertauscht<br />

wurden.<br />

Bei der Indizierung einer Datenbank<br />

muss man aber unbedingt ganzheitlich<br />

vorgehen. Insbesondere das Ändern der<br />

Spaltenreihenfolge ist gefährlich, weil<br />

es den Index für andere Abfragen unbrauchbar<br />

machen kann. Indexänderungen<br />

muss man daher ausgiebig testen,<br />

sorgfältig planen <strong>und</strong> natürlich <strong>mit</strong> dem<br />

Applikationshersteller abklären.<br />

90 Ausgabe 06-2012 Admin www.admin-magazin.de


Ausführungspläne<br />

Basics<br />

Weniger bekannt, aber nicht weniger<br />

nützlich ist, dass man aus Ausführungsplänen<br />

auch etwas über den Speicherbedarf<br />

einer SQL-Abfrage erfahren kann<br />

– also darüber, wie viel Hauptspeicher<br />

während der Ausführung benötigt wird.<br />

Speicherbedarf<br />

Dafür kann man die Operationen, die im<br />

Ausführungsplan angezeigt werden, in<br />

zwei Kategorien unterteilen:<br />

n jene, die generell nur einen geringen<br />

Speicherbedarf haben <strong>und</strong><br />

n jene, die ein Zwischenergebnis im Arbeitsspeicher<br />

ablegen müssen <strong>und</strong> da<strong>mit</strong><br />

einen potenziell großen Speicherbedarf<br />

haben.<br />

Bei der Ressourcenplanung braucht man<br />

sich freilich nur um die zweite Kategorie<br />

kümmern. Das sind vor allem Sortier- <strong>und</strong><br />

Gruppieroperationen aber auch sämtliche<br />

Operationen, die einen Hash-Algorithmus<br />

verwenden – etwa der Hash-Join. Obwohl<br />

die Namen dieser Operationen in<br />

den verschiedenen Datenbank-Produkten<br />

abweichen, verraten sich die Speicherintensiven<br />

meist durch „Sort“, „Group“<br />

oder „Hash“ im Namen. Dennoch gibt<br />

es auch Spezialfälle wie die Operation<br />

»SORT GROUP BY NOSORT« der Oracle<br />

Beispiel 4: MySQL-Ausführungsplan erklärt<br />

01 sqyl> EXPLAIN 1<br />

02 ‐> SELECT *<br />

03 ‐><br />

04 FROM sales s<br />

05 ‐><br />

06 JOIN employees e ON (s.employee_id = e.employee_id)<br />

07 ‐><br />

08 WHERE s.sale_date > CURRENT_DATE ‐ INTERVAL '6' MONTH<br />

09 ‐><br />

10 AND s.eur_value >= 10;<br />

Datenbank: Sie führt keine Sortierung,<br />

sondern ein Group-by auf vorsortierten<br />

Daten durch.<br />

Das Gute an Ausführungsplänen ist, dass<br />

sie auch implizite Sortierungen explizit<br />

anzeigen. Wenn man zum Beispiel zwei<br />

Tabellen versehentlich <strong>mit</strong>tels UNION<br />

verbindet, zeigt der Ausführungsplan<br />

auch die Operation zum Deduplizieren<br />

der Ergebnisse an (Ausnahme: MySQL).<br />

Wenn aber aufgr<strong>und</strong> der Daten ohnehin<br />

keine Duplikate vorkommen können, <strong>und</strong><br />

da<strong>mit</strong> ein UNION ALL genügt, verschwindet<br />

diese Operation <strong>und</strong> da<strong>mit</strong> auch der<br />

entsprechende Speicherbedarf.<br />

Ebenso wird bei einem DISTINCT eine<br />

entsprechende Gruppier- oder Hash-Operation<br />

angezeigt, die wiederum <strong>mit</strong> einem<br />

gewissen Speicherbedarf einhergeht.<br />

11 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

12 | id | table | type | key | key_len | rows | Extra |<br />

13 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

14 | 1 | s | range | sale_date | 3 | 81858 | Using index condition; |<br />

2<br />

15 <br />

Using where ‚ |<br />

16 | 1 | e | ALL | NULL | NULL | 10031 | Using where; |<br />

17 Using join buffer 3 |<br />

(Block Nested Loop) |<br />

18 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

1 Durch das Voranstellen von explain vor die SQL-Abfrage wird der Ausführungsplan angezeigt.<br />

2 »Using Where« in der Spalte »Extra« zeigt an, dass sich nicht alle Bedingungen über den Index<br />

auflösen lassen. Aus dem Ausführungsplan alleine kann man aber nicht erkennen, welche Bedingungen<br />

das sind.<br />

3 MySQL verwendet einen Block-Nested-Loops-Join, der einen Speicherbedarf ähnlich einem Hash-<br />

Join hat.<br />

Antwortzeit [sec]<br />

1.2<br />

1.0<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0.0<br />

Filterprädikate<br />

Umgekehrt gibt es auch Fälle, in denen<br />

Datenbanken eine scheinbar notwendige<br />

Sortieroperation unterlassen. So kann es<br />

vorkommen, dass trotz Order-by-Klausel<br />

in der SQL-Abfrage keine Sortieroperation<br />

im Ausführungsplan erscheint. Dies<br />

ist meist auf eine gewiefte Indizierung<br />

zurückzuführen, die dafür sorgt, dass der<br />

Index die Daten bereits in der gewünschten<br />

Reihenfolge liefert. Diese Technik<br />

wird oft <strong>mit</strong> Li<strong>mit</strong>- oder Top-Klauseln<br />

kombiniert <strong>und</strong> führt im Idealfall dazu,<br />

dass der Ressourcenbedarf fast völlig von<br />

der Tabellengröße entkoppelt ist. So kann<br />

die Geschwindigkeit einer Abfrage, die<br />

keine Where-Klausel hat, sogar unabhängig<br />

von der Tabellengröße sein, wenn ein<br />

passender Index im Spiel ist. Der SQL-<br />

Abfrage selbst ist das nicht anzusehen.<br />

Im Ausführungsplan erkennt man diese<br />

Technik aber durch die fehlende Sortieroperation.<br />

Fazit<br />

Zugriffsprädikate<br />

0.0<br />

0 20 40 60 80 100<br />

Tabellengröße [x3000 Zeilen]<br />

Abbildung 2: Bei steigender Tabellengröße offenbart sich die ineffektive Indexnutzung.<br />

1.2<br />

1.0<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

Antwortzeit [sec]<br />

Ausführungspläne gehören alleine wegen<br />

der Fakten, die sie uns über die Datenbank<br />

verraten, in das Repertoire aller<br />

Datenbank-Adminstratoren <strong>und</strong> SQL-<br />

Entwickler. Sie können helfen, die Ursache<br />

von Performance-Problemen klar zu<br />

erkennen <strong>und</strong> zu beheben. (jbr) n<br />

Infos<br />

[1] Ausführungspläne: [http:// use‐​the‐index‐​<br />

luke. com/ de/ sql/ ausfuehrungsplaene]<br />

Der Autor<br />

Markus Winand hat sich als Autor, Trainer <strong>und</strong><br />

Coach darauf spezialisiert, Entwicklern bei Problemen<br />

<strong>mit</strong> der SQL-Performance zu helfen. Er hat<br />

das Buch „SQL Performance Explained“ veröffentlicht<br />

<strong>und</strong> twittert seine besten Performance-<br />

Tipps als @SQLPerfTips.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

91


Basics<br />

Whenjobs<br />

© stillfx, 123RF<br />

Die einfachere Alternative zu Cron: Whenjobs<br />

Neue Zeitrechnung<br />

Cronjobs sind bei der Administration von Linux- <strong>und</strong> Unix-Systemen unverzichtbar.<br />

Allerdings ist die Syntax sehr beschränkt <strong>und</strong> fehleranfällig.<br />

Ein moderner Cron-Ersatz will <strong>mit</strong> diesen Schwächen aufräumen. Oliver Frommel<br />

Eines der vielen Erbstücke aus den Urzeiten<br />

von Unix (seit V7 Unix, um genau<br />

zu sein) ist der Cron-Daemon, der auch<br />

auf heutigen Linux- <strong>und</strong> BSD-Systemen<br />

regelmäßige Jobs ausführt. Zwar haben<br />

sich im Lauf der Zeit einige Alternativen<br />

entwickelt, wie etwa Fcron [1] <strong>und</strong> Anacron[2],<br />

doch am Gr<strong>und</strong>prinzip hat sich<br />

wenig geändert.<br />

Der Red-Hat-Programmierer Richard W.M.<br />

Jones hat nun unter dem Namen „Whenjobs“<br />

in Eigenregie eine Cron-Alternative<br />

entwickelt, die alte Zöpfe abschneidet. Im<br />

Wesentlichen bietet Whenjobs [3] gegenüber<br />

Cron zwei Vorteile: eine einfachere<br />

Syntax, um Jobs <strong>und</strong> Ausführungszeitpunkte<br />

festzulegen <strong>und</strong> ein System, das<br />

es ermöglicht, Abhängigkeiten zwischen<br />

Jobs zu definieren.<br />

Für Fedora 17 gibt es bereits fertige Pakete<br />

von Whenjobs, Benutzer anderer<br />

Distributionen müssen das Tool selbst<br />

übersetzen. Zur Installation können Sie<br />

Whenjobs aus dem Git-Repository auschecken.<br />

Einfacher ist es allerdings, das<br />

neueste Tarfile herunterzuladen, denn so<br />

müssen Sie sich wenigstens nicht noch<br />

<strong>mit</strong> Autoconf <strong>und</strong> Automake herumschlagen.<br />

Weil Whenjobs in der funktionalen<br />

Programmiersprache Ocaml geschrieben<br />

ist, brauchen Sie den entsprechenden<br />

Compiler <strong>und</strong> noch ein paar Pakete, die<br />

sich zum Beispiel auf Ubuntu 12.10 <strong>mit</strong><br />

dem folgenden Befehl installieren lassen:<br />

sudo apt‐get install ocaml ocaml‐findlibU<br />

libcalendar‐ocaml libcalendar‐ocaml‐dev U<br />

camlp4‐extra libocamlnet‐ocaml‐bin<br />

Der Befehl »./configure« startet die Konfiguration,<br />

die verrät, ob alle nötigen<br />

Pakete installiert sind. Im Test trat bei<br />

der darauf folgenden Übersetzung per<br />

»make« der Fehler »Error: Unbo<strong>und</strong> value<br />

Xdr.safe_add« auf, der sich dadurch<br />

beheben ließ, die erzeugten Dateien<br />

»lib/whenproto_aux.ml« <strong>und</strong> »lib/whenproto_aux.mli«<br />

zu löschen. Ein Aufruf<br />

von »make install« installiert Whenjobs<br />

anschließend systemweit.<br />

Mit der Option »‐‐help« gestartet, gibt<br />

»whenjobs« einen kurzen Hilfetext aus,<br />

der die verfügbaren Optionen <strong>und</strong> Parameter<br />

anzeigt (Abbildung 1). Mit<br />

»whenjobs ‐e« startet das Programm einen<br />

Editor, der beim ersten Start schon<br />

ein Whenjobs-File enthält, das allerdings<br />

nur aus einem Kommentar besteht (Abbildung<br />

2). Wie der Vi-Editor in der<br />

Abbildung zeigt, handelt es sich dabei<br />

um die Datei ».$HOME/whenjobs/jobs.<br />

ml«. Bei Syntax-Fehlern im Jobs-File reagiert<br />

Whenjobs recht unwirsch <strong>und</strong> gibt<br />

einfach eine Compiler-Fehlermeldung<br />

aus, speichert die Datei aber trotzdem.<br />

Statt der einen Datei dürfen auch mehrere<br />

Dateien <strong>mit</strong> der Endung ».ml« in<br />

».whenjobs« abgelegt werden, allerdings<br />

muss man sie dann von Hand editieren.<br />

Außerdem müssen die Dateinamen den<br />

Ocaml-Regeln entsprechen, dürfen also<br />

keinen Bindestrich enthalten.<br />

Die Gr<strong>und</strong>lagen der Whenjobs-Dateien<br />

sind in diesem Kommentar erklärt. Kommentare<br />

beginnen <strong>mit</strong> »(*« <strong>und</strong> enden<br />

<strong>mit</strong> »*)« – was ein dezenter Hinweis<br />

darauf ist, dass es sich bei Whenjobs-<br />

Files selbst um Ocaml-Dateien handelt<br />

– normalerweise muss man sich <strong>mit</strong> der<br />

Programmiersprache aber bei der Whenjobs-Benutzung<br />

nicht beschäftigen. Eine<br />

Zeitangabe startet <strong>mit</strong> dem Schlüsselwort<br />

»every« <strong>und</strong> endet <strong>mit</strong> einem Doppelpunkt,<br />

zum Beispiel:<br />

every 10 minutes:<br />

Die Zeichen »« abschließen.<br />

Variabel<br />

Das Beispiel in den Kommentaren illustriert<br />

einige Whenjobs-Features, zum<br />

Beispiel das Setzen von Variablen. Dazu<br />

bietet das Tool die Option »‐‐set«, die sich<br />

etwa durch die Angabe des Variablentyps<br />

<strong>mit</strong> »‐‐type« ergänzen lässt. Der folgende<br />

Code führt also erst das Stat-Kommando<br />

aus <strong>und</strong> weist dessen Ergebnis der Shell-<br />

Variablen »free« zu. Die zweite Zeile<br />

liest diese Variable aus <strong>und</strong> weist sie der<br />

Whenjobs-Variablen »free_space« vom<br />

Typ Integer zu, die später anderen Jobs<br />

zur Verfügung steht.<br />

92 Ausgabe 06-2012 Admin www.admin-magazin.de


Whenjobs<br />

Basics<br />

free=`stat ‐f ‐c %b /home`<br />

whenjobs ‐‐set ‐‐type int free_space=$free<br />

Der untere Code-Abschnitt in Abbildung<br />

1 zeigt, wie man <strong>mit</strong> Whenjobs abhängig<br />

von bestimmten Werten neue Jobs ausführen<br />

kann. Die Syntax hierzu lautet:<br />

when Bedingung : Job‐Code<br />

Mit der Whenjobs-Funktion »changes«<br />

lässt sich beispielsweise überwachen,<br />

wann sich eine Variable ändert. So<strong>mit</strong><br />

lässt sich <strong>mit</strong> der obigen Variablen die<br />

Bedingung formulieren „ändert sich free_<br />

space <strong>und</strong> ist der Wert kleiner als 10000<br />

(Blocks)“:<br />

when changes free_space && free_space


Virtualisierung<br />

VNC <strong>und</strong> Spice<br />

© Oleg Doroshin, 123RF<br />

Virtuelle Maschinen <strong>mit</strong>tels VNC <strong>und</strong> Spice bedienen<br />

Nachgewürzt<br />

Das Grafiksystem virtueller Maschinen wird unter Linux standardmäßig<br />

per VNC an den Virtual Machine Manager oder einen VNC-Client übertragen.<br />

Eine Alternative dazu ist Spice: Sofern im Gastsystem der QXL-Treiber<br />

läuft, überzeugt es nicht nur durch schnelle Grafik, sondern gibt auch<br />

Audio-Daten weiter. Michael Kofler<br />

1600 Pixel). Die Grafikkarte wird unter<br />

Windows auf Anhieb korrekt erkannt.<br />

Bei vielen Linux-Distributionen ist<br />

hingegen manuelle Konfigurationsarbeit<br />

erforderlich: In xorg.conf muss<br />

explizit der Vesa-Treiber eingestellt<br />

werden (Listing 1)<br />

n »vmvga«: Die Grafikkarte wird seit<br />

geraumer Zeit von diversen VMware-<br />

Produkten eingesetzt. Die dazu passenden<br />

Open-Source-Grafiktreiber<br />

werden bei einigen Linux-Distributionen<br />

standardmäßig <strong>mit</strong>geliefert.<br />

Unter dieser Voraussetzung ist die<br />

VMware-Grafikkarte eine gute Wahl:<br />

Sie unterstützt ohne großen Konfigurationsaufwand<br />

hohe Auflösungen in<br />

der virtuellen Maschine.<br />

n »qxl«: Diese Grafikkarte kann nur in<br />

Kombination <strong>mit</strong> Spice eingesetzt werden<br />

(siehe unten).<br />

Im Virtual Machine Manager stellen Sie<br />

den gewünschten Grafikadapter in der<br />

Detailansicht der virtuellen Maschine im<br />

Dialogblatt »Video« ein. Der Grafikadapter<br />

»xen« kann unter KVM nicht verwendet<br />

werden. (Der Virtual Machine Manager<br />

eignet sich aber auch zur Administration<br />

von virtuellen Xen-Maschinen, die diesen<br />

Grafikadapter unterstützen.) Der Grafikadapter<br />

»qxl« steht nur zur Auswahl,<br />

wenn zuvor im Dialogblatt »Anzeige« das<br />

Protokoll »Spice« aktiviert wird.<br />

VNC-Desktop<br />

Da<strong>mit</strong> Grafik in virtuellen Maschinen<br />

funktioniert, müssen mehrere Puzzlestücke<br />

ineinandergreifen: Zum einen muss<br />

KVM beziehungsweise das zugr<strong>und</strong>e<br />

liegende QEMU-System der virtuellen<br />

Maschine einen Grafikadapter zur Verfügung<br />

stellen. Standardmäßig wird hierfür<br />

eine (uralte!) Cirrus-Grafikkarte emuliert.<br />

Wenn Sie höhere Auflösungen als 1024<br />

mal 768 Pixel wünschen, stehen auch andere<br />

virtuelle Grafikkarten zur Auswahl,<br />

die aber in Linux-Gästen oft eine manuelle<br />

X-Konfiguration voraussetzen.<br />

Zu guter Letzt stellt sich noch die Frage,<br />

über welches Protokoll die Grafikdaten<br />

von der virtuellen Maschine zum Client-<br />

Rechner kommen. Üblich ist hierfür das<br />

Protokoll VNC, das über die Linux-Welt<br />

hinaus weite Verbreitung findet <strong>und</strong> in<br />

der Praxis die geringsten Probleme bereitet.<br />

Alternativ dazu verspricht das neue<br />

Protokoll Spice eine höhere Geschwindigkeit<br />

<strong>und</strong> einige weitere Zusatzfunktionen.<br />

Der virtuelle Grafikadapter<br />

Da<strong>mit</strong> die virtuelle Maschine ein Grafiksystem<br />

sieht, emuliert QEMU eine Grafikkarte.<br />

Im Zusammenspiel <strong>mit</strong> KVM<br />

stehen dabei vier Modelle zur Auswahl:<br />

n »cirrus«: Diese Grafikkarte wird von<br />

nahezu allen Gastsystemen korrekt<br />

erkannt <strong>und</strong> funktioniert ohne Konfigurationsarbeiten<br />

in einer akzeptablen<br />

Geschwindigkeit. Die maximale Auflösung<br />

beträgt allerdings magere 1024<br />

mal 768 Pixel.<br />

n »vga«: Der Vorteil dieser virtuellen<br />

Grafikkarte besteht darin, dass sie<br />

wesentlich höhere Auflösungen unterstützt<br />

(getestet bis zu 2560 mal<br />

VNC steht für Virtual Network Computing<br />

<strong>und</strong> ermöglicht es, den Bildschirminhalt<br />

eines anderen, auch virtuellen Rechners<br />

in einem Fenster (dem VNC-Viewer oder<br />

VNC-Client) darzustellen. Gleichzeitig<br />

werden per VNC lokale Tastatur- <strong>und</strong><br />

Mauseingaben an die virtuelle Maschine<br />

weitergegeben.<br />

Da<strong>mit</strong> eine virtuelle Maschine per<br />

VNC gesteuert werden kann, führt<br />

»qemu‐kvm« einen VNC-Server aus <strong>und</strong><br />

macht da<strong>mit</strong> den Inhalt des virtuellen<br />

Grafikadapters im Netzwerk zugänglich.<br />

Der VNC-Server kann aus Sicherheitsgründen<br />

standardmäßig nur über die<br />

Adresse 127.0.0.1 angesprochen werden.<br />

Der Virtual Machine Manager berücksichtigt<br />

die Einstellungen der Libvirt-<br />

Konfigurationsdatei, in der auch ein<br />

VNC-Passwort angegeben werden kann<br />

– dennoch ist VNC ein relativ unsicheres<br />

94 Ausgabe 06-2012 Admin www.admin-magazin.de


VNC <strong>und</strong> Spice<br />

Virtualisierung<br />

Protokoll, die Verwendung eines VNC-<br />

Passworts ändert daran nicht viel.<br />

# Datei /etc/libvirt/qemu.conf<br />

...<br />

vnc_listen = "127.0.0.1"<br />

vnc_password = "strengGeheim"<br />

Zur Steuerung der virtuellen Maschine<br />

muss auf dem lokalen Rechner ein VNC-<br />

Client ausgeführt werden. In der Regel<br />

werden Sie dazu einfach das Konsolenfenster<br />

des Virtual Machine Managers<br />

verwenden. Alternativ kommen<br />

aber auch die Programme »vncviewer«,<br />

»vinagre« oder »virt‐viewer« infrage.<br />

Standardmäßig verwendet die erste gestartete<br />

virtuelle Maschine den Port 5900,<br />

die nächste 5901 <strong>und</strong> so weiter. Wenn Sie<br />

nicht <strong>mit</strong> dem Virtual Machine Manager<br />

arbeiten, können Sie die Display-Nummer<br />

<strong>mit</strong> dem Virsh-Kommando »vncdisplay«<br />

er<strong>mit</strong>teln. Den dazu passenden Port<br />

erhalten Sie, indem Sie 5900 addieren:<br />

root# virsh list<br />

Id Name<br />

Status<br />

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

7 centos laufend<br />

8 fedora laufend<br />

root# virsh vncdisplay 8<br />

:1<br />

Der in den Virtual Machine Manager beziehungsweise<br />

in den »virt‐viewer« inte-<br />

Das Simple Protocol for Independent<br />

Computing Environments (kurz Spice) ist<br />

ein neues Protokoll, um das Grafiksystem<br />

einer virtuellen Maschine über ein Netzwerk<br />

effizient zu bedienen. Spice unterstützt<br />

die Komprimierung von Bildern,<br />

das Streaming von Videos, die Übertragrierte<br />

VNC-Client überträgt Tastatureingaben<br />

in Form von RAW-Codes. Sofern<br />

im Host- <strong>und</strong> im Gastsystem dasselbe<br />

Tastaturlayout eingestellt ist, werden Sie<br />

keine Probleme <strong>mit</strong> dem Tastaturlayout<br />

haben.<br />

Andere VNC-Clients übertragen Tastatureingaben<br />

hingegen immer gemäß dem<br />

US-Layout. Um die daraus resultierenden<br />

Probleme zu lösen, kann in der Detailansicht<br />

des Virtual Machine Managers<br />

(Dialogblatt »Anzeige«) das gewünschte<br />

Tastaturlayout angegeben werden. Es ist<br />

in der XML-Datei der virtuellen Maschine<br />

gespeichert (Attribut »keymap«):<br />

# in /etc/libvirt/qemu/vmname.xml<br />

...<br />

<br />

VNC im Netzwerk<br />

Standardmäßig ist der VNC-Server von<br />

»qemu‐kvm« nur auf dem KVM-Host<br />

erreichbar. Um eine virtuelle Maschine<br />

auf einem anderen Rechner zu bedienen,<br />

gibt es verschiedene Möglichkeiten. Die<br />

eine Variante besteht darin, den VNC-<br />

Server an die Adresse 0.0.0.0 zu binden<br />

(»vnc_listen=0.0.0.0« in »/etc/libvirt/<br />

qemu.conf«). Diese simple Lösung soll-<br />

ten Sie aus Sicherheitsgründen aber nur<br />

in einem abgesicherten Testnetz einsetzen.<br />

Unter Fedora <strong>und</strong> RHEL verhindert<br />

zudem die standardmäßig aktive Firewall<br />

VNC-Verbindungen von außen.<br />

Port Forwarding<br />

Wesentlich besser ist es, die Voreinstellungen<br />

der VNC-Konfiguration zu belassen.<br />

Um dennoch von einem externen<br />

Rechner via VNC auf die virtuelle<br />

Maschine zuzugreifen, verwenden Sie<br />

SSH-Port-Forwarding. Diese Vorgehensweise<br />

erspart auch Firewall-Änderungen<br />

auf dem Host-Rechner. Die einzige Voraussetzung<br />

besteht darin, dass auf dem<br />

KVM-Host ein SSH-Server läuft. Diese Variante<br />

kommt standardmäßig im Virtual<br />

Machine Manager zur Anwendung, wenn<br />

Sie virtuelle Maschinen steuern, die auf<br />

einem anderen Host laufen.<br />

Unter Fedora (merkwürdigerweise aber<br />

nicht unter RHEL) wird SSH-Port-Forwarding<br />

durch eine SELinux-Regel blockiert.<br />

Wenn Sie also Fedora als KVM-Host einsetzen<br />

<strong>und</strong> Ihre virtuellen Maschinen<br />

auf einem anderen Rechner via SSH plus<br />

VNC steuern möchten, müssen Sie auf<br />

dem KVM-Host das Port-Forwarding explizit<br />

erlauben. Dazu führen Sie dieses<br />

Kommando aus:<br />

root# setsebool ‐P sshd_forward_ports 1<br />

Eine dritte Variante besteht darin, die<br />

VNC-Kommunikation über die Konfigurationsdatei<br />

»/etc/libvirt/qemu.conf« <strong>mit</strong><br />

TSL zu verschlüsseln. Das setzt allerdings<br />

TSL-kompatible VNC-Viewer voraus.<br />

Tipps zur richtigen Konfiguration finden<br />

Sie unter [1].<br />

Spice<br />

Abbildung 1: Die Grafikeinstellungen im Virtual Machine Manager sind über zwei Dialogblätter verteilt.<br />

Listing 1: Vesa-Konfiguration<br />

01 Section "Device"<br />

02 Identifier "device0"<br />

03 Driver "vesa"<br />

04 EndSection<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

95


Virtualisierung<br />

VNC <strong>und</strong> Spice<br />

gung von Audio-Daten, die Verschlüsselung<br />

(OpenSSL) <strong>und</strong> einiges mehr. Die<br />

Kommunikation zwischen dem Host- <strong>und</strong><br />

Gastsystem erfolgt über sogenannte Virtual<br />

Device Interfaces (VDIs). Gleichzeitig<br />

ermöglicht der Einsatz von Spice<br />

nahezu beliebig hohe Grafikauflösungen<br />

innerhalb der virtuellen Maschine.<br />

Spice bringt So<strong>und</strong><br />

Im Vergleich zu VNC ist Spice nicht nur<br />

effizienter, sondern hat zudem den Vorteil<br />

der Audio-Unterstützung. Wenn Sie<br />

die Audio-Ausgaben einer virtuellen Maschine<br />

hören möchten, führt an Spice<br />

momentan kein Weg vorbei. VNC sieht<br />

zwar auch die Weitergabe von Audio-<br />

Daten vor, die unter Linux verfügbaren<br />

VNC-Clients sind aber dazu nicht in der<br />

Lage.<br />

Spice wurde ursprünglich wie KVM von<br />

der Firma Qumranet entwickelt. Nachdem<br />

Red Hat 2008 Qumranet erworben<br />

hatte, gab es Spice Ende 2009 als Open-<br />

Source-Projekt frei. Das Spice-Projekt ist<br />

prinzipiell unabhängig von KVM, kommt<br />

momentan aber nur in Kombination <strong>mit</strong><br />

KVM beziehungsweise QEMU zur Anwendung.<br />

Technologisch weist Spice<br />

Ähnlichkeiten zu den Virtio-Treibern<br />

auf: Auch Spice setzt voraus, dass in den<br />

virtuellen Maschinen paravirtualisierte<br />

Treiber zum Einsatz kommen.<br />

Schichtweise<br />

Spice besteht aus drei Komponenten:<br />

n Der Spice-Server ist direkt in QEMU/​<br />

KVM integriert. Er ist für die Kommunikation<br />

nach außen zuständig,<br />

also für die Steuerung der<br />

virtuellen Maschine durch<br />

den Benutzer über eine<br />

Netzwerk-Verbindung. Für<br />

die virtuelle Maschine sieht<br />

der Spice-Server wie eine<br />

VGA-Grafikkarte aus.<br />

n Der Spice-Client (bei aktuellen<br />

Distributionen das<br />

Kommando spicy aus dem<br />

Paket »spice‐gtk‐tools«, bei<br />

älteren Distributionen das<br />

Kommando spicec aus dem<br />

Paket »spice‐client«) ist ein<br />

<strong>mit</strong> einem VNC-Viewer<br />

vergleichbares Programm,<br />

das das Grafiksystem der virtuellen<br />

Maschine in einem Fenster anzeigt.<br />

Aktuelle Versionen des Virtual Machine<br />

Managers, von »virt‐viewer«<br />

beziehungsweise von »vinagre« sind<br />

ebenfalls Spice-kompatibel. Der Spice-<br />

Client ist auch als Windows-Programm<br />

verfügbar.<br />

n Der QXL-Treiber wird in der virtuellen<br />

Maschine installiert <strong>und</strong> stellt<br />

sicher, dass die virtuelle Maschine<br />

das Grafiksystem effizient <strong>und</strong> in hohen<br />

Auflösungen benutzen kann. Der<br />

QXL-Treiber steht momentan sowohl<br />

für das X-System (Linux) als auch für<br />

Windows zur Verfügung. Spice funktioniert<br />

prinzipiell auch ohne den QXL-<br />

Treiber, allerdings sind in der virtuellen<br />

Maschine dann nur Auflösungen<br />

von bis zu 1024 mal 768 Pixel möglich.<br />

Außerdem bietet Spice dann keinen<br />

Geschwindigkeitsvorteil im Vergleich<br />

zu anderen Grafiklösungen.<br />

Mit aktuellen Versionen von RHEL oder<br />

Fedora können Sie Spice direkt <strong>mit</strong> dem<br />

Virtual Machine Manager nutzen: Dazu<br />

stellen Sie im Dialogblatt »Anzeige« der<br />

Detailansicht »Typ = Spice« ein. Außerdem<br />

müssen Sie im Dialogblatt »Video«<br />

die Einstellung »Modell = qxl« vornehmen.<br />

Nach dem Start wird das Grafiksystem<br />

wie bisher im Konsolenfenster<br />

des Virtual Machine Managers angezeigt.<br />

Rein optisch werden Sie also keinen Unterschied<br />

zu VNC bemerken.<br />

Da<strong>mit</strong> QXL vom Gast optimal unterstützt<br />

wird, muss dort ein QXL-Treiber zur Verfügung<br />

stehen. Bei aktuellen Linux-Distributionen<br />

ist dies oft standardmäßig der<br />

Fall. Bei manchen Linux-Distributionen<br />

müssen Sie das QXL-Treiberpaket selbst<br />

Abbildung 2: QXL-Treiberprobleme unter Windows 7.<br />

installieren (Paketname zum Beispiel<br />

»xserver‐xorg‐video‐qxl« beziehungsweise<br />

»xorg‐x11‐drv‐qxl«). Falls der Treiber<br />

beim nächsten Start von X nicht automatisch<br />

aktiviert wird, fügen Sie in »/<br />

etc/X11/xorg.conf« oder »/etc/X11/xorg.<br />

conf.d/spice.conf« des Gasts die folgenden<br />

Zeilen ein:<br />

Section "Device"<br />

Identifier "device0"<br />

Driver "qxl"<br />

EndSection<br />

Im Netzwerk gelten für Spice im Wesentlichen<br />

dieselben Regeln wie für VNC: Libvirt<br />

weist dem Spice-Server neu gestarteter<br />

virtueller Maschinen standardmäßig<br />

den ersten freien Port ab 5900 <strong>und</strong> die<br />

IP-Adresse 127.0.0.1 zu. Diverse globale<br />

Spice-Einstellungen für die Libvirt-Werkzeuge<br />

können Sie in »/etc/libvirt/qemu.<br />

conf« verändern.<br />

Unter Fedora <strong>und</strong> RHEL verhindert die<br />

standardmäßig aktive Firewall Spice-Verbindungen<br />

von außen. Abhilfe: Verwenden<br />

Sie wie bei einer VNC-Verbindung<br />

SSH <strong>mit</strong> Port-Forwarding, oder fügen Sie<br />

der Firewall-Konfiguration eine entsprechende<br />

Ausnahmeregel hinzu. Sie finden<br />

vordefinierte Regeln im Dialogblatt »Andere<br />

Ports« des Firewall-Konfigurationsprogramms.<br />

Ubuntu <strong>mit</strong> Würze<br />

Die beste Spice-Unterstützung bieten Fedora-<br />

<strong>und</strong> RHEL-Distributionen. Ubuntu<br />

stellt ab Version 12.04 immerhin auch<br />

eine Spice-kompatible Version von<br />

QEMU/​KVM zur Verfügung. Die erforderlichen<br />

Pakete müssen aber extra installiert<br />

werden:<br />

apt‐get install qemu‐kvm‐spice U<br />

spice‐client‐gtk<br />

python‐spice‐client‐gtk<br />

Unter Ubuntu 12.04 scheitert<br />

der Einsatz von Spice<br />

im Virtual Machine Manager<br />

leider, weil dieses Programm<br />

nicht die Spice-Variante von<br />

»qemu‐kvm« aufruft. Diese<br />

ist unter Ubuntu in einem<br />

eigenen Programm versteckt<br />

(»qemu‐kvm‐spice«). Sie können<br />

Spice daher nur auf Kommandoebene<br />

nutzen.<br />

96 Ausgabe 06-2012 Admin www.admin-magazin.de


VNC <strong>und</strong> Spice<br />

Virtualisierung<br />

Die Virt-manager-Version unter Ubuntu<br />

12.10 ist in dieser Hinsicht schon besser<br />

vorkonfiguriert, sodass zumindest hostseitig<br />

alles klappt. Der Versuch, Ubuntu<br />

12.10 Beta 2 als Gast in einer virtuellen<br />

Maschine <strong>mit</strong> Spice <strong>und</strong> QXL-Grafik<br />

zu installieren, scheitert aber an einem<br />

Prob lem des QXL-Treibers (der immerhin<br />

automatisch aktiviert wird). Ob dieser<br />

Fehler (Launchpad #1056381) bis zur Fertigstellung<br />

von Ubuntu 12.10 noch behoben<br />

wird, bleibt abzuwarten.<br />

Windows<br />

Die bisherigen Beispiele gingen davon<br />

aus, dass in den virtuellen Maschinen<br />

eine Linux-Distribution läuft. KVM ist<br />

aber auch Windows-kompatibel. Der<br />

Virtual Machine Manager entscheidet<br />

sich bei Windows-Gästen automatisch<br />

für den Grafiktreiber »vga«. Das ist eine<br />

gute Wahl: Sowohl Windows XP als<br />

auch Windows 7 kommen da<strong>mit</strong> prob-<br />

lemlos zurecht <strong>und</strong> unterstützen nahezu<br />

beliebig hohe Auflösungen (getestet bis<br />

2560x1600). Unter Windows 7 müssen<br />

Sie allerdings auf die Aero-Effekte verzichten.<br />

Theoeretisch wäre es auch möglich, Spice<br />

für Windows-Gäste zu verwenden. QXL-<br />

Windows-Treiber finden Sie auf [2] zum<br />

Download (suchen Sie nach ’windows<br />

guest tools’).<br />

In der Praxis scheitert der Einsatz des<br />

QXL-Treibers 0.1 unter Windows 7 leider<br />

an Signaturproblemen. Im Geräte-Manager<br />

ist nachzulesen, dass der Treiber<br />

nicht korrekt signiert sei (Fehler 52).<br />

Fazit<br />

Im Server-Einsatz spielt das Grafiksystem<br />

von virtuellen Maschinen nur eine untergeordnete<br />

Rolle <strong>und</strong> ist primär während<br />

der Installation wichtig. Anders sieht es<br />

aus, wenn KVM für die Desktop-Virtualisierung<br />

eingesetzt wird: Hier bietet das<br />

neue Protokoll Spice klare Vorteile gegenüber<br />

VNC. Leider funktioniert Spice<br />

nicht bei allen Distributionen out of the<br />

box. Besonders gut klappt der Einsatz<br />

von Spice unter Fedora <strong>und</strong> RHEL. An<br />

ihre Grenzen stoßen sowohl VNC als<br />

auch Spice, wenn es um 3D-Grafik geht:<br />

Anders als VMware oder Virtualbox<br />

bietet KVM zur Zeit keine Möglichkeit,<br />

3D-Funktionen an virtuelle Maschinen<br />

weiterzugeben. (ofr)<br />

n<br />

Infos<br />

[1] VNC <strong>mit</strong> TLS:<br />

[http:// wiki. libvirt. org/ page/ VNCTLSSetup]<br />

[2] QXL-Treiber für Windows:<br />

[http:// spice‐space. org/ download. html]<br />

Der Autor<br />

Michael Kofler [http:// kofler. info] arbeitet als<br />

selbstständiger Computerbuch-Autor <strong>und</strong> Trainer.<br />

Zuletzt hat er das Buch „Linux 2013“ im Addison-<br />

Wesley-Verlag veröffentlicht.<br />

Anzeige<br />

Die heute führenden Spezialisten stammen oft aus der "Freie Software-Szene" <strong>und</strong> schulen seit<br />

Jahren im Linuxhotel. Das erklärt die Breite <strong>und</strong> Qualität unseres Schulungsangebotes:<br />

AJAX * Amavis * Android * Angriffstechniken * Apache * Asterisk * BaseX * BayesianAnalysis * Bind * C/C++ * Cassandra *<br />

CiviCRM * Cloud * Cluster * ClusterFS * CouchDB * CSS3 * CUPS * Debian * DHCP * DNS * DNSSEC * Echtzeit Linux *<br />

Embedded Linux * eXist-db * Faces * FAI * Firewall * Forensik * FreeBSD * FreeRADIUS * GeoExt * Git * Grails * GRASS *<br />

Groovy * hadoop * Hochverfügbarkeit * HTML5 * Hudson * iSCSI * IPv6 * ITSM * Java * JavaScript * Jenkins * Kernel * KVM<br />

* LDAP * LibreOffice * Linux * LPI * m23 * MacOSX * MapFish * Mapserver * Maven * Mikrocontroller * MVS/380 * MySQL *<br />

Nagios * Node.js * OpenBSD * OpenLayers * OpenOffice * openQRM * OpenVPN * OPSI * OSGi * OTRS * Perl * PHP *<br />

Postfix * PostgreSQL * Puppet * Python * QuantumGIS * R * Rails * RedHat * Routing * Request-Tracker RT * Ruby * Samba<br />

* SAN * Scala * Scribus * Shell * Sicherheit * SNMP * Spacewalk * Spamfilter * SQL * Struts * Subversion * SuSE * TCP/IP *<br />

Tomcat * Treiber * TYPO3 * Ubuntu * UML * Unix * Univention * Virenfilter * Virtualisierung * VoIP * WebGIS * Webservices *<br />

Windows Autoinstall * Windowsintegration * x2go * xen * XML * Xpath * Xquery * z/OS * Zabbix * Zend<br />

Fast 100% der Teilnehmer empfehlen uns weiter. Siehe www.linuxhotel.de<br />

Ja, wir geben es zu <strong>und</strong> haben überhaupt kein schlechtes Gewissen dabei: Unsere Schulungen machen auch Spaß ;-)<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

97


Virtualisierung<br />

Virtualbox<br />

© Renjith Krishnan, 123RF<br />

PHP-Virtualbox <strong>und</strong> Remotebox im Vergleich<br />

Aus der Ferne<br />

Oracles Virtualbox ist bei Endanwendern eine beliebte Virtualisierungslösung für den Desktop, läuft aber auch<br />

ohne GUI auf dem Server. Das Webinterface PHP-Virtualbox oder die native Perl/​GTK-Oberfläche Remotebox<br />

macht Virtualbox <strong>mit</strong> wenig Aufwand fernsteuerbar. Thomas Drilling<br />

Nicht jeder Admin weiß, dass das eher<br />

für Desktop-Virtualisierung bekannte<br />

Virtualbox auch die Voraussetzungen<br />

für einen Server-Einsatz inklusive Kommandozeilen-Interface<br />

erfüllt. Optional<br />

erschließen zwei in PHP <strong>und</strong> Perl/​GTK<br />

realisierte grafische Benutzeroberflächen<br />

die Server-Funktionen von Virtualbox auf<br />

besonders komfortable Weise, sodass eine<br />

auf PHP-Virtualbox [1] oder Remotebox<br />

[2] basierende Virtualisierungs-Lösung<br />

sowohl strategisch als auch funktional<br />

die Lücke des von VMware vor Jahren<br />

eingestellten VMware-Servers füllt.<br />

Standortbestimmung<br />

Im Bereich professioneller Virtualisierungslösungen<br />

buhlen in der Linux-Welt<br />

neben dem Marktführer VMware vor allem<br />

Citrix Xen-Server <strong>und</strong> Red Hats RHEV<br />

um des Admins Gunst. Darüber hinaus<br />

können versierte Linux-Administratoren<br />

individuelle Lösungen auf Basis von<br />

KVM oder Xen erstellen <strong>und</strong> auf Linux-<br />

Maschinen den auf Libvirt basierenden<br />

Virtmanager als Interface nutzen.<br />

Rein funktional spielt eine auf Basis von<br />

KVM/​Virtmanager realisierte oder erweiterte<br />

Virtualbox-Virtualisierung in der semiprofessionellen<br />

Liga. Sinn <strong>und</strong> Zweck<br />

solcher Setups liegt darin, eine größere<br />

Anzahl virtueller Maschinen zentral<br />

auf einem Server lagern <strong>und</strong> verwalten,<br />

konfigurieren oder steuern zu können.<br />

Zwar lassen sich bei Virtualbox problemlos<br />

Container-Dateien <strong>und</strong> ISO-Files<br />

auf einen Fileserver lagern, der Virtual<br />

Machine Manager von Virtualbox müsste<br />

dann aber auf jedem Host laufen, auf<br />

dem virtuelle Maschinen genutzt werden<br />

sollen.<br />

Auch wenn den einen oder anderen Admin<br />

in kleinen Umgebungen (KMUs)<br />

diese Art Virtualisierung am Desktop zufriedenstellt,<br />

hat ein solches Setup natürlich<br />

trotzdem nichts <strong>mit</strong> Desktop-Virtualisierung<br />

zu tun, weil jedes Image explizit<br />

einer virtuellen Maschine zugeordnet<br />

ist, <strong>und</strong> es kein dynamisches Session-<br />

Broking, also eine dynamische Zuodnung<br />

von Nutzern zu einem aus einem Master-<br />

Image abgeleiteten Desktop gibt.<br />

Fernsteuerung<br />

Virtualbox kennt allerdings auch einen<br />

echten Server-Modus. Der einzige Nachteil<br />

gegenüber dem Virtual Machine<br />

Manager bei der Desktop-Nutzung besteht<br />

dann darin, dass die Anzeige des<br />

Bildschirminhaltes via RDP stattfindet.<br />

Nichtsdestotrotz bietet sich ein Szenario<br />

wie das im Folgenden beschriebene<br />

insbesondere für Admin in kleinen Unternehmen<br />

an, die ihre Testumgebungen<br />

zentral verwalten oder ihren Nutzern auf<br />

einfache Weise virtuelle Maschinen zur<br />

Verfügung stellen wollen, ohne dazu die<br />

Virtualisierungssoftware auf dem Arbeitsplatz<br />

des Nutzer installieren zu müssen.<br />

Handelt es sich dabei wie in vielen Unternehmen<br />

um Mac- oder Windows-Arbeitsplätze,<br />

scheidet eine Linux-basierte<br />

Lösung <strong>mit</strong> KVM <strong>und</strong> Virtmanager aus,<br />

<strong>und</strong> wer kein Geld für VMware oder Citrix<br />

ausgeben kann oder will, sollte sich<br />

Remotebox oder PHP-Virtualbox ansehen.<br />

Ein weiterer Vorteil beider Lösungen<br />

besteht darin, dass der Admin zum<br />

Beispiel <strong>mit</strong> PHP-Virtualbox nicht nur<br />

auf Workstation-Seite plattformunabhängig<br />

ist, sondern auch auf dem Server.<br />

Wir testen die Server-Seite im Folgenden<br />

allerdings nur <strong>mit</strong> einem Linux-Server.<br />

Virtualbox lässt sich von Haus aus auch<br />

als Virtualisierungslösung auf einem<br />

Server einsetzen, denn <strong>mit</strong> dem Installieren<br />

des optionalen Extension Packs<br />

von Oracle stellt Virtualbox den virtu-<br />

98 Ausgabe 06-2012 Admin www.admin-magazin.de


Virtualbox<br />

Virtualisierung<br />

ellen Maschinen unter anderem eine<br />

RDP-Schnittstelle zur Verfügung. Ist<br />

der Extension-Pack installiert, muss der<br />

Admin dazu lediglich in der Konfiguration<br />

der virtuellen Maschine im Bereich<br />

»Anzeige« im Reiter »Fernsteuerung« die<br />

Funktion »Server aktivieren« <strong>mit</strong> dem<br />

gleichnamigen Ankreuzfeld einschalten<br />

<strong>und</strong> gegebenenfalls den Port festlegen.<br />

Fortan kann er <strong>mit</strong> einem beliebigen<br />

RDP-Client wie zum Beispiel den bei KDE<br />

<strong>mit</strong>gelieferten »krdc« auf seine virtuelle<br />

Maschinen zugreifen.<br />

Das klappt allerdings nur für die Bildschirmausgabe<br />

einer laufenden virtuellen<br />

Maschine. Virtualbox bringt jedoch<br />

von Haus aus noch weitere Funktionen<br />

für den Server-Betrieb <strong>mit</strong>, darunter ein<br />

Kommando-Interface <strong>und</strong> eine SOAP-<br />

Schnittstelle zur Steuerung von Virtualbox<br />

über ein API. Beide im Folgenden<br />

vorgestellten Tools machen von SOAP<br />

<strong>und</strong>/​oder Headless-Modus Gebrauch.<br />

Virtualbox startklar<br />

machen<br />

Passende Virtualbox-Pakete für nahezu<br />

alle wichtigen Distributionen <strong>und</strong> Architekturen<br />

finden sich auf Oracles Virtualbox-Seite<br />

[3]. Virtualbox selbst ist seit<br />

der Version 4.0 unter der GPL Version<br />

2 lizensiert. Die zum Testzeitpunkt aktuellste<br />

Version 4.2 dürfte in der Regel<br />

neuer sein als die in den Paketquellen der<br />

meisten Linux-Distributionen enthaltene<br />

Version.<br />

Die Installation wird keinen erfahrenen<br />

Linux-Admin vor Probleme<br />

stellen. Darüber hinaus<br />

bietet die Download-Seite<br />

Installationshinweise für alle<br />

wichtigen Distributionen. Die<br />

Bereitstellung eines RDP-Servers<br />

erfordert darüber hinaus<br />

das Installieren des plattformunabhängigen<br />

Virtualbox-<br />

Extension-Packs, der sich<br />

zwar ebenfalls kostenlos von<br />

der Download-Seite herunterladen<br />

lässt, allerdings der<br />

Oracle-eigenen „Virtualbox<br />

Personal Use and Evaluation<br />

License (PUEL)“ [4] unterliegt<br />

(Abbildung 1). Firmenk<strong>und</strong>en<br />

müssen für das Extensionpack<br />

eine kommerzielle<br />

Lizenz inklusive Support kaufen. Beim<br />

Herunterladen oder Aktualisieren einer<br />

via Paketmanager installierten Version<br />

ist unbedingt darauf zu achten, dass die<br />

Versionsnummer des Extensionpacks <strong>mit</strong><br />

der von Virtualbox übereinstimmt, sonst<br />

lässt er sich nicht installieren.<br />

Das GUI von Virtualbox verwaltet das<br />

Extensionpack unter »Datei | Globale Einstellungen,<br />

Zusatzpakete« <strong>und</strong> lässt sich<br />

von dort aus auch neu installieren oder<br />

beim Upgraden einer vorher installierten<br />

Version aktualisieren.<br />

In Betrieb<br />

PHP-Virtualbox ist eine moderne in PHP<br />

realisierte Weboberfläche, in der die Benutzeroberfläche<br />

von Virtualbox dank<br />

Ajax nachempf<strong>und</strong>en ist. So kann der<br />

Admin <strong>mit</strong> PHP-Virtualbox komfortabel<br />

virtuelle Maschinen auf einem entfernten<br />

Server anlegen, starten <strong>und</strong> beenden. Die<br />

Voraussetzungen auf Server-Seite sind<br />

moderat. Hier muss lediglich ein Apache-<br />

Webserver <strong>mit</strong> PHP laufen. Ein ebenfalls<br />

auf dem Server installiertes Virtualbox<br />

lässt sich dann über das Netz problemlos<br />

fernsteuern.<br />

Die Bildschirmausgabe der virtuellen Maschinen<br />

findet wie gezeigt via RDP statt.<br />

RDP-Clients gibt es für alle Betriebssysteme<br />

in großer Auswahl. Die meisten Linux-Distributionen<br />

liefern »kdrc« oder das<br />

CLI-Tool »rdesktop« <strong>mit</strong>. PHP-Virtualbox<br />

muss als Web-Anwendung nicht installiert<br />

werden. Es genügt, das heruntergeladene<br />

ZIP-Archiv der aktuellen Version<br />

Abbildung 1: Das Installieren des Extensionpacks über die zugehörige GUI ist ein<br />

Kinderspiel, aus lizenrechtlichen Gründen aber notwendig.<br />

4.2.2 im Document-Root des Webservers<br />

zu entpacken. Der Admin muss allerdings<br />

beim Herunterladen von PHP-Virtualbox<br />

darauf achten, dass die gewählte Version<br />

zur installierten Virtualbox-Version passt.<br />

Selbstverständlich muss Apache <strong>mit</strong> PHP-<br />

Unterstützung laufen. Ob das der Fall ist,<br />

lässt sich bei Debian-basierten Distributionen<br />

beispielsweise <strong>mit</strong><br />

sudo apache2 ‐t ‐D DUMP_MODULES<br />

in Erfahrung bringen <strong>und</strong> falls nicht gegebenenfalls<br />

<strong>mit</strong><br />

sudo a2endmod php5<br />

aktivieren. Ist das PHP-Modul nicht installiert,<br />

muss der Admin zuvor noch das<br />

Paket »libapache2‐mod‐php5« nachrüsten<br />

<strong>und</strong> Apache anschließend neu starten.<br />

Danach kann er das Zip-Archiv von PHP-<br />

Virtualbox-4.2.2 ins Document-Root des<br />

des Webservers entpacken, zum Beispiel<br />

nach »/var/www/phpvirtualbox«.<br />

sudo unzip ‐q phpvirtualbox‐4.2.2.zip U<br />

‐d /var/www/<br />

sudo mv /var/www/phpvirtualbox‐4.2.2/ U<br />

/var/www/phpvirtualbox<br />

Zur Konfiguration von PHP-Virtualbox<br />

muss der Admin die <strong>mit</strong>gelieferte Konfigurationsdatei<br />

»/var/www/phpvirtualbox/config.php«<br />

in wenigen Punkten den<br />

eigenen Bedürfnissen anpassen. So stellt<br />

er etwa in Zeilen<br />

var $username = 'vbox';<br />

var $password = 'pass';<br />

var $location = 'http://localhost:18083/';<br />

den Benutzernamen <strong>und</strong><br />

Passwort des Benutzers, unter<br />

dem Virtualbox laufen,<br />

sowie die Serveradresse ein.<br />

Die Account-Daten sollten für<br />

einen ersten Test dem verwendeten<br />

Unix-Account des Linux-Benutzers<br />

entsprechen.<br />

Eigener User<br />

Da das Passwort ohnehin im<br />

Klartext in der Konfigurationsdatei<br />

steht, empfiehlt es<br />

sich, für den Remote-Betrieb<br />

von Virtualbox ein separates<br />

Benutzerkonto einzurichten<br />

<strong>und</strong> die Daten in der Datei<br />

»config.php« anzupassen. Als<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

99


Virtualisierung<br />

Virtualbox<br />

Ver<strong>mit</strong>tler zwischen den PHP-Skripten<br />

von PHP-Virtualbox <strong>und</strong> Virtualbox<br />

selbst fungiert der im Virtualbox enthaltene<br />

Dienst »vboxwebsrv«. Das Binary<br />

landet beim Installieren von Virtualbox<br />

unter »/usr/bin/vboxwebsrv« <strong>und</strong> enthält<br />

die komplette Virtualisierung in der<br />

Server-Version.<br />

VBox-Webserver<br />

Der Admin muss also darauf achten, dass<br />

die lokale GUI-Version von Virtualbox<br />

nicht läuft, weil sich »vboxwebsrv« sonst<br />

nicht starten lässt <strong>und</strong> die Verbindung zu<br />

PHP-Virtualbox scheitert. Für einen Test<br />

genügt es zunächst, den Dienst unter<br />

dem Account des in »php.config« eingetragenen<br />

Benutzerkontos durch Aufruf<br />

von »vboxwebsrv« manuell zu starten. Ist<br />

das geschehen, sollte die Weboberfläche<br />

von PHP-Virtualbox im Browser unter<br />

der Adresse »http://Hostname/phpvirtualbox«<br />

erreichbar sein.<br />

Im Beispiel (Abbildung 2) wurde PHP-<br />

Virtualbox direkt im Document-Root<br />

des Webservers installiert. Außerdem ist<br />

beim Anmelden an der Startseite darauf<br />

zu achten, dass der Default-Acccount für<br />

PHP-Virtualbox »admin/admin« lautet<br />

<strong>und</strong> nichts <strong>mit</strong> dem beschriebenen Account<br />

zu tun hat, unter dem Virtualbox<br />

läuft. Der Admin kann den Account für<br />

»admin« dann in der Weboberfläche unter<br />

»File | Change Password« ändern.<br />

Wie beschrieben sieht die Oberfläche exakt<br />

so aus, wie vom nativen Interface<br />

bekannt. Für die Bildschirmanzeige einer<br />

laufenden virtuellen Maschine braucht<br />

der Admin allerdings einen separaten<br />

RDP-Client. Wer eine deutsche Lokalisierung<br />

möchte, wählt im Webinterface<br />

unter »Preferences | Language« die gewünschte<br />

Sprache. Zum gleichen Ergebnis<br />

führt es, in der Zeile<br />

var $language = 'en';<br />

der Datei »/var/www/phpvirtualbox/<br />

config.php« »de« einzustellen. Ferner<br />

lassen sich im Webinterfaces unter »Preferences«<br />

beziehungsweise »Globale Einstellungen«<br />

weitere Benutzer einrichten.<br />

Wichtig ist, dass für RDP-Support in<br />

Virtualbox der Extension-Pack installiert<br />

<strong>und</strong> unter »Globale Einstellungen | Allgemein<br />

| VDRP Authentisierungsbibliothek«<br />

»VboxAuth« eingetragen ist. Ansonsten<br />

Abbildung 2: Das erste Login an PHP-Virtualbox klappt <strong>mit</strong> »admin/admin«. Das Default-Passwort sollte dann<br />

umgehend geändert werden.<br />

unterscheidet sich die Bedienung nicht<br />

von der des nativen Interfaces. Dank Ajax<br />

gibt es auch Kontextmenüs, sodass in<br />

PHP-Virtualbox sämtliche Funktionen<br />

verfügbar sind, die auch die native GUI<br />

bietet, inklusive dem Klonen virtueller<br />

Maschinen.<br />

Automatischer Start<br />

Die Bildschirmausgabe der virtuellen Maschinen<br />

erscheint allerdings nicht in einem<br />

Popup-Fenster des Virtual Maschine<br />

Managers (Konsole), sondern im separat<br />

zu startenden RDP-Client. Die Darstellungsleistung<br />

ist deutlich größer als etwa<br />

bei einem VNC-Client oder bei VNC/​<br />

Flash-basierten Browser-Lösungen.<br />

Soll PHP-Virtualbox permanent laufen,<br />

muss der Admin den Dienst beim Systemstart<br />

als Init-Skript starten. Erfreulicherweise<br />

stellen die Entwickler ein fertiges<br />

Init-Skript zum Herunterladen [5] zur<br />

Verfügung. Der Admin muss lediglich in<br />

der Zeile<br />

"USER="..<br />

den Default-Nutzer »vbox« durch den Benutzer,<br />

unter dessen Account der Dienst<br />

laufen soll, ersetzen – also dem gleichen<br />

Benutzernamen, der bereits in »config.<br />

php« eingetragen ist. Danach kann das<br />

Skript <strong>mit</strong> den passenden Zugriffsrechten<br />

versehen ins SysV-Init-Startverzeichnis »/<br />

etc/init.d« verschoben werden. Nach einem<br />

»sudo update‐rc.d vboxwebsrv defaults«<br />

sollte der Dienst nach dem nächsten<br />

Reboot automatisch starten.<br />

Remotebox<br />

Den gleichen Zweck wie PHP-Virtualbox<br />

erfüllt Remotebox, ein in Perl <strong>und</strong> GTK<br />

realisiertes grafisches Frontend zum Verwalten<br />

entfernter Virtualbox-Instanzen<br />

im Headless-Modus. Remotebox lässt<br />

sich als freie Software, die unter der GPL2<br />

lizensiert ist, von der Website [2] herunterladen.<br />

Auch hier muss die Version zur<br />

installierten Virtualbox-Version passen.<br />

Die aktuelle Version 1.4 setzt Virtualbox<br />

4.2.x voraus.<br />

Auch RemoteBox nutzt RDP zum Anzeigen<br />

des Desktops entfernt laufender<br />

virtueller Maschinen. Anders als PHP-<br />

Virtualbox kommuniziert Remotebox<br />

nicht via »vboxwebsrv« <strong>mit</strong> Virtualbox,<br />

sondern steuert dessen Headless-Modus<br />

»/usr/bin/vboxheadless« an. Im Headless-Modus<br />

von Virtualbox werden die<br />

VMs nicht <strong>mit</strong>hilfe der Virtualbox-GUI,<br />

sondern über die Kommandozeile gesteu-<br />

100 Ausgabe 06-2012 Admin www.admin-magazin.de


Virtualbox<br />

Virtualisierung<br />

Abbildung 3: Das GTK-GUI von Remotebox lässt sich jederzeit starten. Die Verbindung zum Virtualbox-Server<br />

initiiert erst ein Klick auf die Connect-Schaltfläche.<br />

ert. Im Headless-Modus erscheint auch<br />

kein grafisches Fenster als Konsole der<br />

VM. Virtualbox initiiert stattdessen eine<br />

Remote-Desktop- oder SSH-Verbindung<br />

zur Konsole der VM.<br />

Da Remotebox in Perl <strong>und</strong> GTK geschrieben<br />

ist, ist das Tool weitgehend plattformunabhängig<br />

<strong>und</strong> in Versionen für Linux,<br />

Mac OS X <strong>und</strong> Windows verfügbar.<br />

Die Inbetriebnahme ist etwas weniger<br />

aufwendig als bei PHP-Virtualbox. Als<br />

Perl-Programm muss auch Remotebox<br />

nicht übersetzt oder installiert werden,<br />

erfordert aber, dass die Pakete »perl«,<br />

»libgtk2‐perl« <strong>und</strong> »libsoap‐lite‐perl«<br />

installiert sind.<br />

Remotebox lässt sich jederzeit unabhängig<br />

von Virtualbox starten. Die Verbindung<br />

zum Virtualbox-Headless-Modus initiiert<br />

der Admin erst aus der GUI heraus,<br />

indem er auf die »Connect«-Schaltfläche<br />

klickt <strong>und</strong> im sich öffnenden Dialog die<br />

URL zum Server <strong>und</strong> die Login-Daten<br />

eingibt (Abbildung 3).<br />

Hierbei handelt es sich um den Unix-<br />

Account, unter dem Virtualbox läuft. Die<br />

GUI selbst bietet funktional nicht weniger<br />

als PHP-Virtualbox, ist aber derzeit nicht<br />

deutsch lokalisiert. Der Workaro<strong>und</strong><br />

zum Anzeigen der Desktops laufender<br />

virtueller Maschinen ist dagegen deutlich<br />

einfacher als bei PHP-Virtualbox. Hierzu<br />

genügt ein Klick auf das Symbol »Remote<br />

Display« in der Werkzeugleiste. Ein separates<br />

Starten eines RDP-Clients ist nicht<br />

erforderlich.<br />

Fazit<br />

Beide Virtualbox-Clients bieten den vollen<br />

funktionalen Zugriff auf eine entfernt<br />

laufende Virtualbox-Instanz, darunter das<br />

entfernte Verwalten des Virtualbox-Servers<br />

<strong>und</strong> der virtuellen Maschinen, das<br />

Konfigurieren von virtueller Maschinen,<br />

inklusive Prozessor, Display, Eingabegeräte<br />

(USB), Audio-I/​O-Ports <strong>und</strong> freigegebene<br />

Ordner oder die Kontrolle laufender<br />

Gastsysteme (Stop, Start, Pause). Ferner<br />

lassen sich <strong>mit</strong> beiden Tools virtuelle<br />

Maschinen klonen oder Gast-Snapshots<br />

anlegen <strong>und</strong> vieles mehr.<br />

Rein funktional erfüllt Virtualbox in<br />

Kombination <strong>mit</strong> PHP-Virtualbox oder<br />

RemoteBox genau jene Rolle, die der vor<br />

längerer Zeit eingestellte VMware-Server<br />

einst inne hatte.<br />

Beide Lösungen haben ihren Charme <strong>und</strong><br />

bieten in Umgebungen ohne Enterprise-<br />

Ansprüchen, etwa kleinen Unternehmen,<br />

mehr Komfort als etwa ein KVM-basierter<br />

Hypervisor <strong>mit</strong> Virtmanager oder einem<br />

anderen der zahlreichen KVM-GUIs.<br />

Allerdings hat Virtualbox selbst an den<br />

skizzierten Möglichkeiten einen weit<br />

größeren Anteil, als PHP-Virtualbox oder<br />

Remotebox selbst, denn »vboxwebsrv«<br />

<strong>und</strong> »vboxheadless« sind Funktionen, die<br />

Virtualbox schon länger kennt. Auch das<br />

Zurverfügungstellen des obligatorischen<br />

RDP-Servers geht auf das Konto von Virtualbox.<br />

PHP-Virtualbox <strong>und</strong> Remotebox machen<br />

die gebotenen Remote-Funktionen lediglich<br />

in einem Web- beziehungsweise<br />

GTK-GUI verfügbar.<br />

Nicht verschwiegen werden sollte auch,<br />

dass eine derart realisierte Lösung zur<br />

zentralen Steuerung virtueller Maschinen<br />

ihre Grenzen hat, nicht nur in punkto<br />

Verwaltung, sondern vor allem unter Performance-<br />

<strong>und</strong> Sicherheitsaspekten.<br />

Da beide Lösungen von Haus aus weder<br />

eine Verschlüsselung der Netzwerkverbindungen,<br />

noch sichere Authentifizierung<br />

über RDP bieten, ist der Einsatz<br />

auf einem Server im Internet tabu, es sei<br />

denn der Admin betreibt deutlich mehr<br />

Aufwand in Sicherheitsaspekten, was die<br />

Konfiguration aber wesentlich komplexer<br />

macht <strong>und</strong> die Vorteile gegenüber einer<br />

kommerziellen Cloud- oder Datacenter-<br />

Lösung schwinden lässt. (ofr) n<br />

Infos<br />

[1] PHP-Virtualbox:<br />

[http:// code. google. com/ p/ phpvirtualbox]<br />

[2] RemoteBox:<br />

[http:// remotebox. knobgoblin. org. uk]<br />

[3] Download Oracle Virtualbox: [https:// www.​<br />

virtualbox. org/ wiki/ Linux_Downloads]<br />

[4] Virtualbox Lizenzmodell:[https:// www.​<br />

virtualbox. org/ wiki/ VirtualBox_PUEL]<br />

[5] Init-Skript für PHP-Virtualbox:[http://​<br />

phpvirtualbox. googlecode. com/ files/​<br />

vboxwebsrv]<br />

Der Autor<br />

Thomas Drilling ist seit mehr als zehn Jahren<br />

hauptberuflich als freier Journalist <strong>und</strong> Redakteur<br />

für Wissenschafts- <strong>und</strong> IT-<strong>Magazin</strong>e tätig.<br />

Er selbst <strong>und</strong> das Team seines Redaktionsbüros<br />

verfassen regelmäßig Beiträge zu den Themen<br />

Open Source, Linux, Server, IT-Administration <strong>und</strong><br />

Mac OS X. Außerdem arbeitet Thomas Drilling als<br />

Buchautor <strong>und</strong> Verleger, berät als IT-Consultant<br />

kleine <strong>und</strong> <strong>mit</strong>tlere Unternehmen <strong>und</strong> hält Vorträge<br />

zu Linux, Open Source <strong>und</strong> IT-Sicherheit.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

101


Virtualisierung<br />

Hyper-V Live-Migration<br />

© maridav, 123RF<br />

Live-Migration virtueller Maschinen unter Hyper-V<br />

Wandertag<br />

In der neuen Version von Hyper-V hat Microsoft die Möglichkeiten für<br />

Live-Migration <strong>und</strong> Hochverfügbarkeit verbessert <strong>und</strong> vereinfacht. Dieser<br />

Artikel gibt einen Überblick. Thomas Joos<br />

Microsoft hat <strong>mit</strong> Windows Server 2012<br />

die Hochverfügbarkeit in allen Bereichen<br />

weiter verbessert <strong>und</strong> zusätzliche Optionen<br />

auch für kleinere Unternehmen integriert.<br />

So ist es zum Beispiel möglich, die<br />

Live-Migration auch auf Hyper-V-Hosts<br />

ohne Cluster zu nutzen oder virtuelle<br />

Maschinen zwischen Hyper-V-Hosts zu<br />

replizieren, ohne diese clustern zu müssen.<br />

Mit dem kostenlosen Hyper-V-Server<br />

2012 bietet Microsoft die Hyper-Funktionen<br />

der Datacenter-Edition von Windows<br />

Server 2012 vollkommen kostenfrei an.<br />

Mit dieser Variante von Windows Server<br />

2012 können Sie auch Cluster installieren,<br />

sowie die Funktionen nutzen, die<br />

wir nachfolgend beschreiben.<br />

Mit Hyper-V-Replika lassen sich virtuelle<br />

Server zwischen Hyper-V-Hosts replizieren<br />

also von einem Quell-Server auf den<br />

Ziel-Server kopieren. Dieser Vorgang kann<br />

adhoc erfolgen oder über einen Zeitplan<br />

gesteuert. Aktiv bleibt immer der virtuelle<br />

Server auf dem Quell-Server, der<br />

virtuelle Server auf dem Ziel-Server bleibt<br />

ausgeschaltet. Administratoren können<br />

ein Failover des virtuellen Servers manuell<br />

durchführen oder den virtuellen<br />

Server jederzeit erneut replizieren.<br />

0 Downtime<br />

Mit der Live-Migration ohne Cluster<br />

können Administratoren virtuelle Server<br />

im laufenden Betrieb vom Quell- auf<br />

den Ziel-Server verschieben <strong>und</strong> online<br />

schalten. Neu in Windows Server 2012 ist<br />

hierbei die Möglichkeit, mehrere Live-Migrationen<br />

gleichzeitig durchzuführen. Im<br />

Gegensatz zur Replikation ist der virtuelle<br />

Server weiterhin nur auf einem Server<br />

verfügbar <strong>und</strong> kann im laufenden Betrieb<br />

verschoben werden. Weiterhin gibt es in<br />

Windows Server 2012 die Möglichkeit,<br />

Hyper-V in einem Cluster zu betreiben<br />

<strong>und</strong> virtuelle Server als Clusterressourcen<br />

zu definieren. Hier sind die virtuellen<br />

Server schnell <strong>und</strong> einfach zwischen<br />

den Knoten verschiebbar. Einen solchen<br />

Cluster können Unternehmen jetzt auch<br />

<strong>mit</strong> der Standard-Edition aufbauen (Abbildung<br />

1). Alle diese Funktionen stehen<br />

über Hyper-V Server 2012 auch kostenlos<br />

zur Verfügung.<br />

Die Konfiguration der Replikation erfolgt<br />

über einen Assistenten im Hyper-V-Manager<br />

oder in der Powershell. Die Einrichtung<br />

nehmen Sie über einen Assistenten<br />

im Hyper-V-Manager vor. Interessant<br />

ist diese Funktion zum Beispiel für den<br />

Betrieb einer Testumgebung oder eines<br />

Backup-Servers.<br />

Da<strong>mit</strong> Hyper-V-Hosts eine solche Replikation<br />

ermöglichen, müssen Sie sie zunächst<br />

für alle beteiligten Hyper-V-Hosts<br />

aktivieren. Starten Sie den Assistenten<br />

über das Kontextmenü des virtuellen Servers<br />

auf dem Quell-Server, <strong>und</strong> geben Sie<br />

den Ziel-Server ein, also den Hyper-V-<br />

Host, auf den Sie die virtuelle Maschine<br />

replizieren wollen.<br />

Landeplatz<br />

Da<strong>mit</strong> ein Hyper-V-Host für Replikate<br />

zur Verfügung steht, müssen Sie auf<br />

dem entsprechenden Server in den »Hyper‐V‐Einstellungen«<br />

im Bereich »Replikationskonfiguration«<br />

diese Funktion erst<br />

aktivieren <strong>und</strong> konfigurieren. Sie legen<br />

hier fest, von welchen Rechnern der aktuelle<br />

Server Replikate entgegennimmt.<br />

(Abbildung 2).<br />

Haben Sie die Konfiguration nicht vor Aktivierung<br />

der Replikation auf den Hosts<br />

vorgenommen, erkennt der Replikations-<br />

Assistent dies <strong>und</strong> schlägt die Konfiguration<br />

des Ziel-Servers während der Replikation<br />

vor. Diese Konfiguration ist dann<br />

auch über das Netzwerk möglich.<br />

Um einen virtuellen Server auf einen anderen<br />

Hyper-V-Host <strong>mit</strong> Windows Server<br />

2012 oder Hyper-V Server 2012 zu replizieren,<br />

klicken Sie nach der Konfiguration<br />

der Hosts <strong>mit</strong> der rechten Maustaste<br />

auf den entsprechenden virtuellen Server<br />

<strong>und</strong> wählen »Replikation aktivieren«. Es<br />

startet ein Assistent, in dem Sie festlegen,<br />

wie Sie den ausgewählten Server<br />

vom Quell-Server auf den Ziel-Server<br />

replizieren.<br />

102 Ausgabe 06-2012 Admin www.admin-magazin.de


Hyper-V Live-Migration<br />

Virtualisierung<br />

Im Assistenten legen Sie außerdem den<br />

Ziel-Server fest <strong>und</strong> anschließend den<br />

Authentifizierungstyp. Welche Authentifizierung<br />

der Ziel-Server akzeptiert,<br />

bestimmen Sie wiederum auf dem Ziel-<br />

Server in den Hyper-V-Einstellungen über<br />

»Replikationskonfiguration«.<br />

Außerdem steuern Sie im Assistenten,<br />

welche virtuellen Festplatten Sie replizieren<br />

wollen. Dort können Sie auch die<br />

Snapshots des Servers übertragen. Außerdem<br />

legen Sie fest, ob Sie die erste<br />

Replikation über ein Speichermedium<br />

wie eine externe Festplatte durchführen<br />

wollen oder direkt über das Netzwerk.<br />

Auch einen Zeitplan legen Sie an dieser<br />

Stelle fest (Abbildung 3).<br />

Firewall einstellen<br />

Da<strong>mit</strong> die Replikation funktioniert, müssen<br />

Sie auf dem Ziel-Server in den erweiterten<br />

Einstellungen der Windows-<br />

Firewall (»wf.msc«) die Regeln für den<br />

HTTP- oder den HTTPS-Listener aktivieren.<br />

Die Regeln sind bereits angelegt,<br />

aber noch nicht aktiviert.<br />

Nachdem Sie die Replikation durchgeführt<br />

haben, befindet sich der virtuelle<br />

Server auf dem Ziel-Server, ist aber ausgeschaltet.<br />

Über das Kontextmenü des<br />

virtuellen Servers auf dem Quell-Server<br />

können Sie über »Replikation« das Replikationsverhalten<br />

anpassen <strong>und</strong> den Status<br />

abrufen. Die Replikation können Sie<br />

auch zwischen verschiedenen Editionen<br />

von Windows Server 2012 durchführen<br />

<strong>und</strong> auch Hyper-V Server 2012 als Quell<strong>und</strong><br />

Ziel-Server nutzen. Am einfachsten<br />

ist die Replikation, wenn Sie eine Active-<br />

Directory-Struktur zur Authentifizierung<br />

nutzen.<br />

Über das Kontextmenü <strong>und</strong> der Auswahl<br />

von »Replikation« können Sie auch ein<br />

Failover durchführen. In diesem Fall kann<br />

der virtuelle Server auf dem Ziel-Server<br />

(Replikat) die Aufgaben des virtuellen<br />

Servers auf dem Quell-Server (Original)<br />

übernehmen. Die Replikation können<br />

Sie jederzeit beenden. Bei jeder erneuten<br />

Replikation legt Hyper-V auf dem Ziel-<br />

Server einen Snapshot des virtuellen<br />

Servers an.<br />

Verbesserter Zugriff auf<br />

Freigaben<br />

Auch für Hyper-V ist der deutlich verbesserte<br />

<strong>und</strong> beschleunigte Zugriff auf Dateifreigaben<br />

in Windows Server 2012 von<br />

Bedeutung. Dank ihm lassen sich jetzt<br />

auch virtuelle Festplatten auf Freigaben<br />

speichern, was wiederum Replikation<br />

<strong>und</strong> Live-Migration beschleunigt. Für<br />

den Zugriff auf Dateiserver verwenden<br />

Windows-Rechner das Server Message<br />

Protocol (SMB), das auf Linux-Server<br />

durch Samba implementiert wird.<br />

Windows 8 <strong>und</strong> Windows Server 2012<br />

führen das neue SMB-Protokoll 2.2 ein.<br />

Es beschleunigt den Zugriff auf Daten<br />

im Netzwerk, die bisher normalerweise<br />

lokal gespeichert sein sollten. Beispiele<br />

dafür sind SQL-Server-Datenbanken<br />

oder die Dateien von Hyper-V-Computern.<br />

Die neue Version erlaubt mehrere<br />

parallele Zugriffe<br />

auf Dateifreiga-<br />

ben. Das heißt einzelne Zugriffe über<br />

das Netzwerk bremsen sich nicht mehr<br />

untereinander aus.<br />

Zusätzlich ermöglicht SMB 2.2 beim Einsatz<br />

auf geclusterten Dateiservern einen<br />

besseren Failover zwischen Clusterknoten.<br />

Dabei berücksichtigt Windows Server<br />

2012 die SMB-Sitzungen der Benutzer<br />

<strong>und</strong> Server <strong>und</strong> behält diese auch<br />

bei, wenn virtuelle Dateiserver zwischen<br />

Clusterknoten verschoben werden.<br />

Live-Migration ohne Cluster<br />

Virtuelle Server lassen sich wie erwähnt<br />

<strong>mit</strong> der neuen Live-Migration auf einen<br />

anderen Hyper-V-Host verschieben, auch<br />

wenn dieser nicht Bestandteil eines Clusters<br />

ist. Bei diesem Vorgang darf die entsprechende<br />

virtuelle Maschine gestartet<br />

sein. Für die Live-Migration muss auf<br />

beiden Servern der gleiche Prozessortyp<br />

zum Einsatz kommen, sonst bricht der<br />

Vorgang <strong>mit</strong> einem Fehler ab. In diesem<br />

Fall nutzen Sie Hyper-V-Replika, die keine<br />

identischen Prozessore voraussetzen.<br />

Da<strong>mit</strong> Sie die Live-Migration ohne Cluster<br />

nutzen können, müssen die entsprechenden<br />

Hyper-V-Hosts Mitglied der gleichen<br />

Active Directory-Domäne sein. Das<br />

Verschieben von virtuellen Servern <strong>mit</strong><br />

der Hyper-V-Rolle muss ein Domänen-<br />

Administrator durchführen. Außerdem<br />

muss das Konto Mitglied der lokalen<br />

Administratorgruppe auf beiden Hyper-<br />

V-Hosts sein. Da<strong>mit</strong> Sie zwischen Hyper-<br />

V-Hosts ohne Cluster Live-Migrationen<br />

Abbildung 1: Verwalten replizierter virtueller Server im Cluster.<br />

Abbildung 2: Aktivieren der Replikatskonfiguration in Hyper-V.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

103


Virtualisierung<br />

Hyper-V Live-Migration<br />

Abbildung 4: Starten einer Live-Migration ohne Cluster.<br />

Abbildung 3: Festlegen des Zeitplans der Replikation.<br />

durchführen können, müssen Sie für<br />

die entsprechenden Computerkonten in<br />

Active Directory Einstellungen bezüglich<br />

der Kerberos-Authentifizierung vornehmen.<br />

Rufen Sie dazu in »Active Directory‐Benutzer<br />

<strong>und</strong> ‐Computer« jeweils die Eigenschaften<br />

der beiden Computer auf,<br />

<strong>und</strong> wechseln Sie zur Registerkarte »Delegierung«.<br />

Aktivieren Sie die Option<br />

»Computer bei Delegierungen angegebener<br />

Dienste vertrauen« <strong>und</strong> die Option<br />

»Nur Kerberos verwenden«. Klicken Sie<br />

anschließend auf »Hinzufügen«, <strong>und</strong><br />

wählen Sie den Server <strong>und</strong> die Dienste<br />

aus, die für das entsprechende Computerkonto<br />

Berechtigungen haben sollen. Für<br />

die Live-Migration wählen Sie dazu den<br />

Server <strong>und</strong> die Dienste »cifs« <strong>und</strong> »Microsoft<br />

Virtual System Migration Service«<br />

sowie »Microsoft Virtual Control Service«<br />

aus. Nehmen Sie diese Einstellung auf<br />

allen Hyper-V-Hosts vor, die virtuelle Maschinen<br />

austauschen sollen. Auch hier<br />

können Sie virtuelle Server zwischen<br />

verschiedenen Editionen von Windows<br />

Server 2012 auswählen <strong>und</strong> auch auf<br />

Hyper-V Server 2012 setzen.<br />

Mit Li<strong>mit</strong><br />

Im nächsten Schritt müssen Sie auf<br />

beiden Hyper-V-Hosts in den Hyper-V-<br />

Einstellungen im Hyper-V-Manager die<br />

Live-Migration konfigurieren. Sie finden<br />

diese Einstellung im Bereich »Live-Migrationen«.<br />

Schalten Sie zunächst die Option<br />

»Ein‐ <strong>und</strong> ausgehende Live-Migration ermöglichen«<br />

ein. Aktivieren Sie danach<br />

bei »Authentifizierungsprotokoll«<br />

die Option »Kerberos<br />

verwenden«.<br />

Legen Sie fest, wie<br />

viele Live-Migrationen<br />

gleichzeitig<br />

auf dem Server erlaubt sein sollen.<br />

Der Standardwert in diesem Bereich ist<br />

2. Aktivieren Sie dann bei »Eingehende<br />

Live-Migrationen« entweder »Beliebiges<br />

verfügbares Netzwerk für die Live-Migration<br />

verwenden«, oder hinterlegen Sie<br />

manuell IP-Adressen.<br />

Wie die meisten Einstellungen in Windows<br />

Server 2012, können Sie auch diese<br />

Einstellung in der Powershell vornehmen.<br />

Dazu verwenden Sie der Reihe nach die<br />

folgenden Commandlets:<br />

n »Enable‐VMMigration«<br />

n »Set‐VMMigrationNetwork IP‐Adresse«<br />

n »Set‐VMHost ‐VirtualMachineMigrationAuthenticationType<br />

Kerberos«<br />

Anschließend können Sie virtuelle Server<br />

verschieben. Klicken Sie <strong>mit</strong> der rechten<br />

Maustaste auf den virtuellen Server den<br />

Sie zwischen Hyper-V-Hosts verschieben<br />

wollen, <strong>und</strong> wählen Sie aus dem<br />

Kontextmenü die Option »Verschieben«.<br />

Anschließend wählen Sie auf der Seite<br />

»Verschiebungstyp auswählen« die Option<br />

»Virtuellen Computer verschieben«.<br />

Anschließend wählen Sie den Zielcomputer<br />

aus, auf den Sie den entsprechenden<br />

Computer verschieben wollen.<br />

Im nächsten Fenster können Sie die Live-<br />

Migration noch genauer spezifizieren.<br />

Sie haben die Möglichkeit, verschiedene<br />

Daten des virtuellen Servers in unterschiedliche<br />

Verzeichnisse zu verschieben<br />

oder alle Daten des Servers, inklusive der<br />

virtuellen Festplatten, in einen gemeinsamen<br />

Ordner. Liegt die virtuelle Festplatte<br />

eines virtuellen Servers auf einer Freigabe,<br />

können Sie sich auf die Migration<br />

der Konfigurationsdateien beschränken.<br />

Haben Sie die Option zum Verschieben<br />

ausgewählt, verbindet sich der Assistent<br />

<strong>mit</strong> dem Remoteserver über den Remotedateibrowser,<br />

<strong>und</strong> Sie können das lokale<br />

Verzeichnis auswählen, in das Hyper-V<br />

die virtuelle Festplatten <strong>und</strong> Konfigurationsdaten<br />

des virtuellen Servers verschieben<br />

soll. Als Letztes erhalten Sie noch<br />

eine Zusammenfassung <strong>und</strong> starten das<br />

Verschieben <strong>mit</strong> »Fertig stellen«.<br />

Powershell<br />

Diesen Vorgang können Sie ebenfalls<br />

skripten. Öffnen Sie dazu auf dem Quell-<br />

Server eine Powershell-Sitzung, <strong>und</strong> geben<br />

Sie den folgenden Befehl ein:<br />

Move‐VM Virtueller Server Ziel‐ServerU<br />

‐IncludeStorage ‐DestinationStoragePath U<br />

Lokaler Pfad auf dem Ziel‐Server<br />

Da<strong>mit</strong> die Übertragung funktioniert, müssen<br />

die Prozessoren der Hyper-V-Hosts<br />

kompatibel <strong>mit</strong>einander sein. Ist das<br />

nicht der Fall, erhalten Sie eine Fehlermeldung<br />

<strong>und</strong> können den Server nicht im<br />

laufenden Betrieb übertragen. Sie können<br />

in diesem Fall aber den virtuellen<br />

Server herunterfahren <strong>und</strong> den Vorgang<br />

erneut starten. Ist der Name des virtuellen<br />

Switch auf dem Ziel-Server nicht<br />

<strong>mit</strong> dem Quell-Server identisch, erhalten<br />

Sie eine Fehlermeldung <strong>und</strong> können den<br />

neuen virtuellen Switch auf dem Ziel-<br />

Server auswählen, da<strong>mit</strong> der virtuelle<br />

Server auch auf dem neuen Host eine<br />

Netzwerkverbindung hat. (ofr) n<br />

Der Autor<br />

Thomas Joos ist freiberuflicher IT-Consultant <strong>und</strong><br />

seit über 20 Jahren in der IT tätig. Neben seinen<br />

Projekten schreibt er praxisnahe Fachbücher<br />

<strong>und</strong> Fachartikel r<strong>und</strong> um Windows <strong>und</strong> andere<br />

Microsoft-Themen. Online trifft man ihn unter<br />

[http:// thomasjoos. spaces. live. com].<br />

104 Ausgabe 06-2012 Admin www.admin-magazin.de


Sonderteil<br />

Auf der folgenden Seite startet der regelmäßige<br />

FreeX-Sonderteil des <strong>ADMIN</strong>-<strong>Magazin</strong>s. Hier finden<br />

Sie Know-how-Artikel <strong>und</strong> Workshops von erfahrenen<br />

Autoren aus der langen Tradition der FreeX.<br />

Openlayers ........................ 106<br />

Karteninformationen von Open Streetmap lassen<br />

sich leicht in eigenen Webseiten integrieren. Vor<br />

allem, wenn man die Openlayers-API verwendet.<br />

OpenVPN auf Android ...............114<br />

Per Kryptografie abgesicherte Verbindungen<br />

zwischen Android <strong>und</strong> Server.<br />

TCLKit . ...........................118<br />

Starkits bringen die Einfachheit der TCL-Skriptprogrammierung<br />

<strong>mit</strong> der Performance kompilierter<br />

Sprachen in Einklang.<br />

© yewkeo, 123RF<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

105


Openlayers<br />

© victoroancea, 123RF<br />

Openlayers <strong>und</strong> Datenbanken<br />

Schichtweise<br />

Openlayers ist eine Javascript-Bibliothek, die es ermöglicht, Landkarten in Webseiten einzubinden. Die Geodaten<br />

lassen sich entweder direkt programmieren oder aus einer Datenbank lesen. Letzteres ist die eleganteste<br />

methode, die dieser Artikel näher beschreibt. Jürgen Dankoweit<br />

Open Streetmap ist ein im Jahr 2004<br />

gegründetes freies Projekt, dessen Ziel es<br />

ist, eine frei nutzbare <strong>und</strong> erweiterbare<br />

Weltkarte zu erstellen. Im Rahmen dieses<br />

Projekts sammeln Interessierte Geodaten,<br />

laden sie in die Datenbank <strong>und</strong> editieren<br />

sie. Dabei handelt es sich um Daten wie<br />

Straßen, Eisenbahnstrecken, Gebäude<br />

<strong>und</strong> andere erfassungswürdige geografische<br />

Informationen. Mit diesen Daten<br />

von Open Streetmap entstehen nicht nur<br />

Straßenkarten für Autofahrer, sondern<br />

auch Fahrrad- <strong>und</strong> Wanderkarten <strong>und</strong><br />

unzählige Spezialanwendungen.<br />

Eigenes Navi<br />

Weil die Geoinformationen im Rahmen<br />

des Open-Streetmap-Projekts frei verfügbar<br />

sind, lassen sich das so gewonnene<br />

Kartenmaterial <strong>und</strong> die Rohdaten zur Darstellung<br />

von Fotos <strong>und</strong> Beiträgen in Blogs<br />

oder eigenen Internetpräsenzen verwenden.<br />

Selbst die Rohdaten sind für die Entwicklung<br />

frei zugänglich, wo<strong>mit</strong> sich Anwendungen<br />

zur Routenberechnung oder<br />

zur mobilen Navigation verwirklichen<br />

lassen. Das einzige zu zollende Tribut<br />

an die Gemeinde ist eine Quellenangabe<br />

<strong>mit</strong> Bezug auf Open Streetmap. Natürlich<br />

möchte man Landkarten in der eigenen<br />

Internetpräsenz nicht einfach nur einfügen,<br />

sondern man verfolgt da<strong>mit</strong> meist<br />

auch einen bestimmten Zweck. Auf diese<br />

Art lassen sich beispielsweise im Bereich<br />

des Tourismus bestimmte Sehenswürdigkeiten<br />

oder Wanderwege darstellen.<br />

Für Segelflugpiloten sind Wetterdaten<br />

an bestimmten Orten interessant. Auch<br />

für administrative Möglichkeiten lassen<br />

sich Open-Streetmap-Karten einsetzen,<br />

indem Katasterdaten eingeb<strong>und</strong>en werden.<br />

Spezielle Markierungen von Orten<br />

auf den Karten werden im Fachjargon<br />

„points of interest“ oder POIs genannt<br />

(Abbildung 1).<br />

Um solche Anwendungen zu realisieren,<br />

gibt es eine unter einer BSD-Lizenz stehende<br />

Programmierbibliothek namens<br />

Openlayers [1]. Das Paket ist in Javascript<br />

geschrieben <strong>und</strong> da<strong>mit</strong> vollkommen unabhängig<br />

von irgendwelchen Servern<br />

oder Betriebssystemen. Voraussetzung<br />

zur Nutzung ist lediglich ein Javascriptfähiger<br />

Webbrowser. Die Kombination<br />

aus Open Streetmap <strong>und</strong> Openlayers ist<br />

sehr leistungsfähig <strong>und</strong> braucht sich hinter<br />

den kommerziellen Produkten wie<br />

Google-Maps <strong>und</strong> Google-API nicht zu<br />

verstecken.<br />

Teamwork à la carte<br />

Um die großen Datenmengen zu bewältigen,<br />

sind leistungsfähige Datenbankserver<br />

<strong>mit</strong> PostgreSQL <strong>und</strong> PostGIS als<br />

Datenbanksystem notwendig. Die Datenbanken<br />

speichern die Geodaten in Form<br />

von geografischen Koordinaten, die Linien<br />

<strong>und</strong> Punkte auf einer Karte beschreiben.<br />

Zusätzlich wird noch eine Information<br />

abgespeichert, welche die Art der<br />

Geodaten wie beispielsweise Autobahnen<br />

oder Gebäude beschreibt.<br />

Die Generierung der Karten erfolgt durch<br />

einen Rendering-Server, den Kartenausschnitt<br />

in einzelne Kacheln zerlegt, um<br />

die Belastung der Netzwerke niedrig<br />

zu halten. Openlayers sorgt <strong>mit</strong> seinen<br />

Javascript-Funktionen anschließend<br />

dafür, dass die Kacheln des Kartenausschnitts<br />

auf den Client übertragen <strong>und</strong><br />

korrekt dargestellt werden.<br />

Wie der Name Openlayers bereits vermuten<br />

lässt, werden die Geodaten in mehreren<br />

Ebenen (Layer) in die eigene Webseite<br />

eingeblendet. Die unterste Ebene ist<br />

106 Ausgabe 06-2012 Admin www.admin-magazin.de


Openlayers<br />

GETten <strong>und</strong> POSTen<br />

Um Webseiten <strong>mit</strong> Parametern zu versorgen,<br />

wurden die Methoden GET <strong>und</strong> POST entwickelt.<br />

Bei der Methode GET werden alle Parameter<br />

an die URL-Zeichenkette nach einem Fragezeichen<br />

angehängt. Getrennt werden die einzelnen<br />

Parameter durch das Ampersand-Zeichen<br />

»&«. So ergibt sich die Schreibweise »http://<br />

url?param_1=wert_1&...&param_n=wert_n«. In<br />

der korrekten HTML-Notation ersetzt man das<br />

Ampersandzeichen durch »&amp;«, um W3Ckonform<br />

zu bleiben. Die Vorteile dieser Methode<br />

sind, dass sich eine solche URL leichter als Lesezeichen<br />

im Browser speichern lässt <strong>und</strong> man<br />

hat bei der Entwicklung stets einen Überblick,<br />

ob alle Parameter korrekt gesetzt werden. Das<br />

ist aber auch gleichzeitig der Nachteil, da potenzielle<br />

Angreifer sehen, auf welche Art <strong>und</strong><br />

Weise beispielsweise Daten aus einer Datenbank<br />

ausgelesen werden. Zudem beschränkt die Methode<br />

GET die maximale Länge der URL, sodass<br />

nur wenige Parameter nutzbar sind.<br />

Die Methode POST bietet mehr vordergründige<br />

Sicherheit. Die Parameter werden nicht mehr an<br />

die URL angehängt, sondern über einen Datenkanal<br />

(Pipe) an die Webseite über<strong>mit</strong>telt. Da<strong>mit</strong><br />

haben potenzielle Angreifer zumindest etwas<br />

mehr Probleme bei einem Angriff. Ein weiterer<br />

Vorteil ist, dass Anzahl der möglichen Parameter<br />

nahezu unbegrenzt ist. Die POST-Methode hat<br />

den Nachteil, dass es keine Möglichkeit gibt,<br />

eine URL <strong>mit</strong> allen Parametern als Lesezeichen<br />

abzulegen.<br />

Gr<strong>und</strong>sätzlich besteht auch die Möglichkeit,<br />

beide Methoden gleichzeitig zu verwenden. Das<br />

sollte man allerdings vermeiden. Einerseits entspricht<br />

es nicht den Richtlinien der W3C <strong>und</strong><br />

andererseits besteht die Möglichkeit, dass der<br />

Zugriff auf die Daten der POST-Methode nicht<br />

mehr gewährleistet ist.<br />

immer der ausgewählte Kartenausschnitt.<br />

Als Programmierer hat man die Möglichkeit,<br />

<strong>mit</strong> weiteren Layern für den Betrachter<br />

weitere nützliche Informationen<br />

anzubieten.<br />

In den Anfängen von Openlayers gab es<br />

keinen Weg, auf die in einer Datenbank<br />

vorgehaltene Datenbestände zuzugreifen,<br />

da Javascript keine Möglichkeit bietet,<br />

auf Datenbankserver zuzugreifen. Um<br />

eigene POIs darzustellen, werden aber<br />

Datenbanken benötigt.<br />

Alternativ bietet sich immer die Lösung<br />

an, alle POIs im Programmcode anzugeben<br />

beziehungsweise den zugehörigen<br />

Javascript-Code durch ein Perl- oder<br />

PHP-Skript zu erzeugen. Dies bedeutet<br />

aber, dass die Wartung solcher Seiten<br />

sich sehr schwierig gestaltet. Ebenso<br />

würde die Serverbelastung zunehmen<br />

<strong>und</strong> die Performance auf dem Client<br />

enorm abnehmen.<br />

Ein Lösungsweg, die Daten aus einer Datenbank<br />

zu beziehen, wurde in Ausgabe<br />

02/​2012 der FreeX beschrieben. Über den<br />

Umweg, dass ein CGI-Skript per Iframe<br />

Zugriff auf externe Datenbestände ermöglicht,<br />

wurden die POIs in der Karte<br />

dargestellt. Die Lösung funktioniert recht<br />

gut, ist aber nicht perfekt. Gerade dann,<br />

wenn es zu Timeouts bei der Verbindung<br />

kommt, besteht die Möglichkeit, dass<br />

Daten falsch oder gar nicht dargestellt<br />

werden. Inzwischen hat sich diesbezüglich<br />

in der Entwicklung der Javascript-<br />

Bibliothek Openlayers einiges getan. Sie<br />

bietet <strong>mit</strong>tlerweile sehr viele Wege, um<br />

auf externe Daten zuzugreifen.<br />

Openlayers bietet zwei Objekte, die den<br />

Zugriff auf externe Daten erleichtern.<br />

Sie erlauben es, <strong>mit</strong>hilfe der HTTP-Methoden<br />

GET <strong>und</strong> POST externe Seiten<br />

inklusive Parameterübergabe aufzurufen<br />

(siehe Kasten „GETten <strong>und</strong> POSTen“).<br />

Für die beiden HTTP-Methoden gibt es<br />

die Objekte »OpenLayers.Request.GET«<br />

<strong>und</strong> »OpenLayers.Request.POST«. Sie rufen<br />

eine externe Webseite auf, die durch<br />

ein CGI-Skript generiert wird. Das Skript<br />

wertet die von den Objekten über<strong>mit</strong>telten<br />

Parameter aus <strong>und</strong> generiert hieraus<br />

eine passende Datenbankabfrage.<br />

Das Ergebnis der Abfrage ist eine Datei<br />

im Plain-Text-Format, die ohne HTML-<br />

Notationen auskommt. Man sollte dieses<br />

Format wählen, weil es die weitere Verarbeitung<br />

erheblich vereinfacht.<br />

Die so generierte Seite wird an den Webbrowser<br />

zurückgesendet, wo die Callback-<br />

Funktion von »OpenLayers.Request.GET«<br />

beziehungsweise »OpenLayers.Request.<br />

POST« die Informationen verarbeitet.<br />

Die Callback-Funktion läuft erst dann ab,<br />

wenn die Webseite fertig generiert ist.<br />

Das gilt übrigens auch für den Fehlerfall,<br />

den man deshalb sinnvollerweise gesondert<br />

berücksichtigen sollte. Abbildung 2<br />

verdeutlicht den Ablauf.<br />

Datenbank <strong>mit</strong> Strategie<br />

Die beiden eben beschriebenen Objekte<br />

eignen sich sehr gut, um POIs schnell<br />

<strong>und</strong> einfach darzustellen. Ein Nachteil<br />

ist allerdings, dass es sehr aufwendig ist,<br />

eine vom Kartenausschnitt abhängige<br />

Anzahl von Punkten darzustellen.<br />

Aber auch hier bietet Openlayers inzwischen<br />

Abhilfe: »OpenLayers.Strategy.<br />

BBOX« <strong>mit</strong> »OpenLayers.Protocol.HTTP«<br />

<strong>und</strong> »OpenLayers.Layer.Vector« bilden<br />

ein unschlagbares Team zur Darstellung<br />

Abbildung 1: Die Darstellung zeigt Wetterstationen auf dem Gebiet der USA. Die geografischen Positionen<br />

wurden einer Datenbank entnommen, in der circa 20 000 Stationen gespeichert sind.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

107


Openlayers<br />

Webbrowser<br />

Generierte<br />

HTML-Seite<br />

Content-Type:<br />

text/plain<br />

dynamischer Landkarten auf der eigenen<br />

Webseite.<br />

Zugang über Layer<br />

OpenLayers.Request.POST<br />

OpenLayers.Request.GET<br />

Callback zu<br />

OpenLayers.Request.POST<br />

OpenLayers.Request.GET<br />

Webseite <strong>mit</strong><br />

JavaScript<br />

Parameter auswerten<br />

Datenbank abfragen<br />

HTML-Code genieren<br />

CGI-Skript für Datenbankzugriff<br />

Die in einer Landkarte eingetragenen geografischen<br />

Punkte werden in einer Ebene<br />

durch das Objekt »OpenLayers.Layer.Vector«<br />

zusammengefasst. Darin sind zwei<br />

interessante Schnittstellen integriert, die<br />

einen Zugriff auf externe Datenbestände<br />

Datenbank<br />

Abbildung 2: Zugriff auf Datenbankinhalte <strong>mit</strong>tels der Methoden »OpenLayers.Request.GET« <strong>und</strong><br />

»OpenLayers.Request.POST«.<br />

Listing 1: Initialisierung<br />

01 /* Projektion definieren */<br />

02 var spherMerc = new OpenLayers.<br />

Projection('EPSG:900913');<br />

03 var epsg4326 = new OpenLayers.<br />

Projection('EPSG:4326');<br />

04 var zoom = 14;<br />

05 <br />

06 /* Kartenausschnitt definieren */<br />

07 var l = new OpenLayers.LonLat(8, 53).<br />

transform(epsg4326, spherMerc);<br />

erlauben <strong>und</strong> die Ausgabe steuern. Die<br />

Funktionsweise ist komplexer als bei<br />

den Objekten der Gruppe »OpenLayers.<br />

Request«. Kartenausschnitte lassen sich<br />

per Maus vergrößern, verkleinern <strong>und</strong><br />

verschieben. Jeder dieser Aktionen generiert<br />

ein Ereignis (Event), das Openlayers<br />

<strong>mit</strong>teilt, einen neuen Kartenausschnitt zu<br />

laden. Diese Events werden an alle Ebenen<br />

(Layer) über<strong>mit</strong>telt, um eine Neuberechnung<br />

der Position auf der Karte zu<br />

08 var r = new OpenLayers.LonLat(14, 43).<br />

transform(epsg4326, spherMerc);<br />

09 var extent = new OpenLayers.Bo<strong>und</strong>s(l.lon,<br />

l.lat, r.lon, r.lat);<br />

10 <br />

11 /* allgemeine Variablen */<br />

12 var freex, freex_o_r_p, freex_l_h_s;<br />

13 var <strong>mit</strong>Transformation = true;<br />

14 var ohneTransformation = false;<br />

15 ...<br />

erzwingen. Wenn viele POIs eingetragen<br />

sind, erfordert das viel Rechenleistung<br />

<strong>und</strong> viel Zeit aufseiten des Clients. Das<br />

lässt sich reduzieren, indem man nur<br />

die Objekte neu darstellt, die im Kartenausschnitt<br />

auch wirklich zu sehen sind<br />

oder neu hinzukommen. Diese Strategie<br />

realisiert das Objekt »OpenLayers.Strategy.BBOX«.<br />

Um analog die Positionsangaben der<br />

einzelnen POIs zu erhalten, bedient<br />

man sich eines Kommunikationskanals<br />

<strong>mit</strong> dem Objekt »OpenLayers.Protocol.<br />

HTTP«. Es über<strong>mit</strong>telt den aktuellen Kartenausschnitt<br />

an ein CGI-Skript <strong>und</strong> gibt<br />

als Ergebnis eine Liste <strong>mit</strong> POIs zurück,<br />

die im neuen Kartenausschnitt zu sehen<br />

sind. Die neuen Angaben werden an<br />

»OpenLayers.Layer.Vector« zurückgegeben<br />

<strong>und</strong> dargestellt, die nicht mehr sichtbaren<br />

POIs automatisch gelöscht. Das<br />

reduziert nicht nur den Speicherbedarf,<br />

sondern gleichermaßen die Rechenzeit.<br />

Abbildung 3 stellt den Ablauf nochmals<br />

grafisch dar.<br />

Einen weiteren Vorteil bietet diese Methode<br />

bei großen Mengen von POIs: Es<br />

lässt sich angeben, wie viele Punkte maximal<br />

dargestellt werden sollen. So kann<br />

man beispielsweise erst eine Grobübersicht<br />

über die wichtigsten POIs anzeigen.<br />

Je kleiner der Kartenausschnitt gewählt<br />

wird, umso mehr verfeinert man dann<br />

die Übersicht. Auch hier sei Abbildung 1<br />

nochmals als Beispiel herangezogen. Es<br />

gibt in den USA circa 3100 Wetterstationen<br />

als POIs. Um diese große Anzahl anzuzeigen,<br />

braucht ein durchschnittlicher<br />

Webbrowser etwa zwanzig Sek<strong>und</strong>en.<br />

Die Darstellung nach der eben beschriebenen<br />

Methode dauert im Vergleich nur<br />

noch eine Sek<strong>und</strong>e, weil nur er noch<br />

etwa 160 Stationen verarbeiten muss.<br />

Nach diesen theoretischen Betrachtungen<br />

Listing 2: Layer <strong>mit</strong> statischen POI<br />

01 function map_poi(layer, lon, lat, label,<br />

farbe) {<br />

02 var l = new OpenLayers.LonLat(lon, lat).<br />

03 transform(epsg4326, spherMerc);<br />

04 var point = new OpenLayers.Geometry.<br />

Point(l.lon, l.lat);<br />

05 var pf = new OpenLayers.Feature.<br />

Vector(point);<br />

06 if (pf) {<br />

07 pf.attributes = {text: label, color:<br />

farbe};<br />

08 layer.addFeatures([pf]);<br />

09 }<br />

10 }<br />

11 <br />

12 function map_layer(map, layer_name) {<br />

13 var layer = new OpenLayers.Layer.<br />

Vector(layer_name, {<br />

14 projection: map.displayProjection,<br />

15 renderers: map.renderer,<br />

16 displayInLayerSwitcher: true,<br />

17 wrapDateLine: false,<br />

18 displayOutsideMaxExtend: true,<br />

19 isBaseLayer: false,<br />

20 styleMap: new OpenLayers.StyleMap(style)<br />

21 });<br />

22 <br />

23 map_poi(layer, 9.00448, 48.68750,<br />

24 "FreeX‐Verlag", "#FFEE00");<br />

25 map_poi(layer, 11.80008, 47.85878,<br />

26 "FreeX‐Leser", "#FFEE00");<br />

27 map_poi(layer, 11.55735, 48.14042,<br />

28 "FreeX‐Leser", "#FFEE00");<br />

29 <br />

30 return layer;<br />

31 }<br />

108 Ausgabe 06-2012 Admin www.admin-magazin.de


Openlayers<br />

geht es nun ans Eingemachte. Um die Evolution<br />

der Zugriffsarten zu verdeutlichen,<br />

sind in Listing 1 die im theoretischen<br />

Teil beschriebenen drei Arten kodiert. Die<br />

einfachste Möglichkeit ist in Abschnitt<br />

eins formuliert. Die geografischen Punkte<br />

werden statisch zu einer Ebene (Layer)<br />

hinzugefügt. Dies geschieht in der Funktion<br />

»map_poi«: nach der Definition der<br />

Koordinaten <strong>und</strong> deren Transformation<br />

werden sie <strong>mit</strong> »layer.addFeatures« in die<br />

Ebene »layer« eingefügt. Dies wurde in<br />

der Ausgabe 2/​2012 der FreeX ausführlich<br />

erläutert.<br />

Listing 1 zeigt den Code, der die Arbeit<br />

<strong>mit</strong> der Openlayers-Bibliothek initialisiert,<br />

zum Beispiel die Variablen für die Kartenprojektion,<br />

den Kartenausschnitt <strong>und</strong> so<br />

weiter. In Listing 2 ist eine Funktion zu<br />

sehen, die statische Points of Interest anzeigt,<br />

die per »map_poi()« eingeb<strong>und</strong>en<br />

werden.<br />

Um die Daten, die aus einer Datenbank<br />

ausgelesen wurden, in Openlayers zu<br />

übernehmen, muss man sich Gedanken<br />

über ein Datenaustauschformat machen.<br />

In vielen Fällen bietet sich das CSV-Format<br />

an, bei dem die einzelnen Werte<br />

durch Semikolons getrennt werden. Allerdings<br />

muss man auf das Encoding der<br />

Daten achten: Heutige Anwendungen<br />

verwenden meist UTF-8, in das man die<br />

Daten aus einer Datenbank gegebenenfalls<br />

konvertieren muss.<br />

CSV parsen<br />

Mit Funktion »parser()« im Listing 3<br />

zeigt einen möglichen Parser für CSV-<br />

Datensätze. Er er<strong>mit</strong>telt zunächst zeilenweise<br />

die Datensätze, indem er im<br />

Text nach Zeilenumbrüchen sucht <strong>und</strong><br />

an den F<strong>und</strong>stellen den Text <strong>mit</strong> der<br />

Javascript-Funktion »split()« in Teilzeichenketten<br />

aufspaltet. Innerhalb der<br />

Teilzeichenketten sucht die Funktion<br />

nach dem Trennzeichen, in diesem Fall<br />

dem Semikolon, <strong>und</strong> teilt wiederum <strong>mit</strong><br />

»split()« die einzelnen Datensätze auf.<br />

Diese speichert die Funktion anschließend<br />

in dem Array »features« <strong>und</strong> führt<br />

vorher gegebenenfalls eine geometrische<br />

Transformation durch. Ob man die Daten<br />

transformieren muss, hängt davon<br />

ab, in welchem Koordinatensystem man<br />

sich bewegt. Der beschriebene Parser<br />

wird für die folgenden beiden Funktionen<br />

benötigt. Wie eingangs erwähnt,<br />

stellt die Openlayers-Bibliothek Objekte<br />

bereit, um externe CGI-Skripte aufzurufen,<br />

zum Beispiel »OpenLayers.Request.<br />

POST« <strong>und</strong> »OpenLayers.Request.GET«.<br />

Der Konstruktor beider Objekte erwartet<br />

in der Attributdefinition »url« eine URL.<br />

Die Angabe darf entweder <strong>mit</strong> Domainnamen<br />

oder ohne erfolgen. Parameter<br />

für das aufzurufende Skript sollten nicht<br />

im URL-String übergeben werden. Dafür<br />

ist das Attribut »data« bei »OpenLayers.<br />

Request.POST« zuständig, während bei<br />

»OpenLayers.Request.GET« das Attribut<br />

»params« die Übergabeparameter aufnimmt.<br />

Die Übergabeparameter sind eine Kette<br />

aus Definitionen von Parametern <strong>und</strong><br />

Werten in der Form: »{param_1:wert_1,<br />

..., param_n:wert_n}«. Die Funktion<br />

»OpenLayers.Util.getParameterString()«<br />

wandelt sie in eine W3C-konforme<br />

Zeichenkette um. Das Ergbnis der Umwandlung<br />

ist eine Zeichenkette der<br />

Form »param_1=wert1&...&param_<br />

n=wert_n«. Diese hängt die Bibliothek<br />

bei »OpenLayers.Request.GET« <strong>mit</strong> einem<br />

Listing 3: Parsen des Rückgabetextes<br />

01 function parser(trans, liste, farbe) {<br />

02 var daten;<br />

03 var pos_e = liste.indexOf("\n");<br />

04 var s = liste;<br />

05 var sd = "";<br />

06 var l, p;<br />

07 var features = [];<br />

08 <br />

09 while (pos_e > 0) {<br />

10 sd = s.substr(0, pos_e);<br />

11 s = s.substr(pos_e + 1);<br />

12 pos_e = s.indexOf("\n");<br />

13 if (sd) {<br />

14 daten = sd.split(";");<br />

15 if (daten.length == 4) {<br />

16 if (daten[1] != "" && daten[2] != "") {<br />

17 l = new OpenLayers.LonLat(daten[1],<br />

daten[2]);<br />

18 if (trans)<br />

19 l.transform(epsg4326, spherMerc);<br />

20 p = new OpenLayers.Geometry.Point(l.lon,<br />

l.lat);<br />

21 var pf = new OpenLayers.Feature.<br />

Vector(p);<br />

22 if (pf) {<br />

23 pf.fid = daten[0];<br />

24 pf.attributes = {text: daten[0], color:<br />

farbe};<br />

25 features.push(pf);<br />

26 }<br />

27 }<br />

28 }<br />

29 }<br />

30 }<br />

31 return features;<br />

32 }<br />

Listing 4: Layer <strong>mit</strong> Request.POST<br />

01 /* Durch CGI‐Skript erzeugte HTML‐Seite<br />

parsen <strong>und</strong> */<br />

02 /* POIs in Ebene unabhaengig vom Ausschnitt<br />

einfuegen */<br />

03 function map_aktualisieren_hnd(request) {<br />

04 if (request.status == 200) {<br />

05 var features = parser(<strong>mit</strong>Transformation,<br />

06 request.responseText, "#00FFEE");<br />

07 if (features && features.length > 0)<br />

08 freex_o_r_p.addFeatures(features);<br />

09 }<br />

10 else<br />

11 alert("Fehler: " + request.status);<br />

12 }<br />

13 <br />

14 /* Aufrufen des CGI‐Skriptes zur Er<strong>mit</strong>tlung<br />

der */<br />

15 /* einzelnen POIs */<br />

16 function map_layer_request_post(map, layer_<br />

name) {<br />

17 var params = {land: "DE", zeitschrift:<br />

"FreeX"};<br />

18 <br />

19 var layer = new OpenLayers.Layer.<br />

Vector(layer_name, {<br />

20 projection: map.displayProjection,<br />

21 renderers: map.renderer,<br />

22 displayInLayerSwitcher: true,<br />

23 wrapDateLine: false,<br />

24 displayOutsideMaxExtend: true,<br />

25 isBaseLayer: false,<br />

26 styleMap: new OpenLayers.StyleMap(style)<br />

27 });<br />

28 if (layer) {<br />

29 var request = OpenLayers.Request.POST({<br />

30 url: "/cgi‐bin/FreeX/datenbank.pl",<br />

31 data: OpenLayers.Util.<br />

getParameterString(params),<br />

32 headers:<br />

33 {"Content‐Type":<br />

34 "application/x‐www‐form‐urlencoded" },<br />

35 callback: map_aktualisieren_hnd<br />

36 });<br />

37 }<br />

38 return layer;<br />

39 }<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

109


Openlayers<br />

Webbrowser<br />

Generierte<br />

HTML-Seite<br />

Content-Type:<br />

text/plain<br />

vorangestelltem Fragezeichen an die URL.<br />

Bei »OpenLayers.Request.POST« übergibt<br />

es sie im Rahmen des HTTP-Requests an<br />

den Server.<br />

MIME-Type setzen<br />

Attribut: strategy<br />

Attribut: protocol<br />

Methode: draw<br />

Parameter auswerten<br />

Datenbank abfragen<br />

HTML-Code genieren<br />

CGI-Skript für Datenbankzugriff<br />

Sehr wichtig <strong>und</strong> zwingend ist die Angabe<br />

des sogenannten Headers, der beschreibt,<br />

um welchen MIME-Type es sich<br />

handelt. Andernfalls erhält man keinerlei<br />

Daten zurück. Gleiches gilt für die sogenannte<br />

Callback-Funktion. Diese Funktion<br />

wird angesprungen, sobald die im<br />

OpenLayers.Layer.Vector<br />

HTML-Seite <strong>mit</strong> JavaScript<br />

BBOX<br />

moveend/zoomend<br />

HTTP<br />

readWithPOST<br />

Callback:<br />

format<br />

Abbildung 3: Dynamische Darstellung von POIs in Abhängigkeit vom Kartenausschnitt.<br />

Datenbank<br />

Attribut »url« definierte Seite <strong>mit</strong> oder<br />

ohne Erfolg abgearbeitet wurde. Dazu<br />

später mehr.<br />

In Listing 4 ist ein Beispiel für »OpenLayers.Request.POST«<br />

zu sehen. Die Funktion<br />

»map_layer_request_post()« definiert<br />

zunächst einen Layer, der alle POIs zusammenfasst<br />

<strong>und</strong> darstellt. Anschließend<br />

wird der Konstruktor von »OpenLayers.<br />

Request.POST« <strong>mit</strong> den Attributen für<br />

»url«, »header« <strong>und</strong> »data« aufgerufen.<br />

Die Übergabeparameter wandelt »Open-<br />

Layers.Util.getParameterString« um. Aus<br />

»{land: "DE", zeitschrift: "FreeX"}« wird<br />

dann »land=DE&zeitschrift=FreeX«. Das<br />

Ampersand-Zeichen wird automatisch in<br />

das W3C-konforme »&amp;« umgewandelt.<br />

Callback prüft Status<br />

Die Callback-Funktion ist die Funktion<br />

»map_aktualisieren_hnd()«, die als Parameter<br />

eine Datenstruktur, die durch<br />

»request« dargestellt ist. Sie besteht unter<br />

anderem aus »request.responseText«<br />

<strong>und</strong> »request.status«. In der Status-Variablen<br />

landen eventuell auftretende Fehlermeldungen.<br />

Ein Status 200 bedeutet,<br />

dass die aufgerufene Seite ohne Probleme<br />

erreicht <strong>und</strong> verarbeitet wurde. In<br />

»request.responseText« ist der Inhalt der<br />

aufgerufenen Seite abgelegt. Wenn der<br />

Request-Status den Wert 200 hat, dann<br />

ruft die Callback-Funktion ihrerseits den<br />

zuvor beschriebenen Parser auf, der den<br />

in »request.responseText« gespeicherten<br />

Inhalt verarbeitet. Als Ergebnis dieses<br />

Verarbeitungsschritts erhält man ein Array,<br />

in dem alle POIs <strong>mit</strong> ihren Attributen<br />

gespeichert sind. Das wird an den Layer<br />

übergeben, falls wirklich Elemente in dieses<br />

Array eingetragen wurden.<br />

Wie das geübte Programmiererauge<br />

schnell erkennt, eignet sich diese Art der<br />

Darstellung von POIs nur, wenn einerseits<br />

die Anzahl stark begrenzt <strong>und</strong> andererseits<br />

der Kartenausschnitt sich nicht än-<br />

Listing 5: Layer <strong>mit</strong> HTTP <strong>und</strong> Strategy<br />

01 /* Durch CGI‐Skript erzeugte HTML‐Seite parsen <strong>und</strong> */<br />

02 /* POIs in Ebene abhaengig vom Ausschnitt einfuegen */<br />

03 OpenLayers_FreeX = OpenLayers.Class(<br />

04 OpenLayers.Format, {<br />

05 read: function(obj) {<br />

06 if (obj) {<br />

07 if (typeof obj == "string")<br />

08 return parser(ohneTransformation, obj, "#FF00EE");<br />

09 else<br />

10 return null;<br />

11 }<br />

12 }<br />

13 });<br />

14 <br />

15 /* Aufrufen des CGI‐Skriptes zur Er<strong>mit</strong>tlung der */<br />

16 /* einzelnen POIs. Die POIs werden abhaengig vom */<br />

17 /* Kartenausschnitt (OpenLayers.Strategy.BBOX) erzeugt */<br />

18 function map_layer_http_strategy(map, layer_name) {<br />

19 // Definition der Strategie<br />

20 var strategy =<br />

21 [new OpenLayers.Strategy.BBOX({ratio: 1.0})];<br />

22 // Definition des Parsers<br />

23 var format = new OpenLayers_FreeX();<br />

24 // Definition des Kommunikationskanals<br />

25 var protocol = new OpenLayers.Protocol.HTTP({<br />

26 url: "/cgi‐bin/FreeX/datenbank.pl",<br />

27 params: {land: "DE", zeitschrift: "FreeX"},<br />

28 srsInBBOX: true,<br />

29 readWithPOST: true,<br />

30 readWithGET: false,<br />

31 headers: {"Content‐Type": "text/plain"},<br />

32 format: format<br />

33 });<br />

34 var layer = new OpenLayers.Layer.Vector(layer_name, {<br />

35 projection: map.displayProjection,<br />

36 renderers: map.renderer,<br />

37 displayInLayerSwitcher: true,<br />

38 wrapDateLine: false,<br />

39 displayOutsideMaxExtend: true,<br />

40 isBaseLayer: false,<br />

41 styleMap: new OpenLayers.StyleMap(style),<br />

42 strategies: strategy,<br />

43 protocol: protocol<br />

44 });<br />

45 return layer;<br />

46 }<br />

110 Ausgabe 06-2012 Admin www.admin-magazin.de


Openlayers<br />

BBOX <strong>und</strong> Ratio<br />

Das Attribut »ratio« des Objekts »OpenLayers.<br />

Strategy.BBOX« legt fest, wie groß das Verhältnis<br />

von angezeigten Punkten <strong>und</strong> geladenen<br />

Punkten ist. Das bedeutet, bei einem Ratio-Wert<br />

größer eins werden um den angegebenen Faktor<br />

mehr Daten geladen, als tatsächlich in der Karte<br />

angezeigt werden. Dies ist besonders dann sinnvoll,<br />

wenn ein Benutzer den Kartenausschnitt<br />

nur ein klein wenig verschiebt. So müssen für<br />

Strategie, die als einziges Element des<br />

Arrays <strong>mit</strong> »new()« initialisiert wird. Im<br />

nächsten Schritt wird der Parser definiert,<br />

der die Daten in Kartenpunkte umwandelt.<br />

Einen Kommunikationskanal für »Open-<br />

Layers.Layer.Vector« öffnet das Objekt<br />

»OpenLayers.Protocol.HTTP«, das als Parameter<br />

eine URL erwartet, unter der die<br />

Daten zu finden sind. Die Übergabeparameter<br />

für das aufzurufende Skript werden<br />

wie gehabt als Array von Attributen definiert:<br />

»params: {land: "DE", zeitschrift:<br />

"FreeX"}«, die intern <strong>mit</strong> »OpenLayers.<br />

Util.getParameterString()« wieder in eine<br />

Zeichenkette im bekannten Format umgewandelt<br />

werden. Besonders interessant<br />

sind die Attribute »srsInBBOX«, »read-<br />

WithPOST«, »readWithGET« <strong>und</strong> »headers«.<br />

Das Attribut »srsInBBOX« besagt,<br />

dass die Zeichenkette der Übergabeparadert.<br />

Sicherlich hat man die Möglichkeit,<br />

die Anzahl der darzustellenden POIs anhand<br />

eines Kartenausschnitts zu bestimmen.<br />

Allerdings ist der Programmieraufwand<br />

dafür sehr hoch. Openlayers bietet<br />

auch für dieses Problem eine Lösung, die<br />

dem Entwickler viel Programmierarbeit<br />

abnimmt, wie Listing 5 zeigt.<br />

In der Funktion »map_layer_http_strategy«<br />

ist zu sehen, welche Komponenten<br />

nötig sind, um die Daten voll dynamisch<br />

vom Kartenausschnitt abhängig darzustellen.<br />

Zunächst definiert das Objekt<br />

»OpenLayers.Strategy.BBOX«. Die Strategie<br />

BBOX wird <strong>mit</strong> einem Ratio-Wert von<br />

eins definiert (siehe Kasten „BBOX <strong>und</strong><br />

Ratio“).<br />

»OpenLayers.Layer.Vector« bietet die<br />

Möglichkeit, mehrere Strategien zu verarbeiten,<br />

die in einem Array zusammengefasst<br />

sind. In diesem Beispiel ist eine<br />

diese kleine Bewegung nicht neue Daten vom<br />

Server geladen werden. Die Anzeige wird dadurch<br />

flüssiger <strong>und</strong> schneller, da keine Wartezeiten<br />

entstehen. Allerdings erkauft man sich<br />

da<strong>mit</strong> auch, dass man zu Beginn eine höhere<br />

Serverlast <strong>und</strong> Ladezeit hat. Ein Ratio-Wert von<br />

eins bedeutet, dass genauso viele Daten vom<br />

Server abgerufen werden, wie auch tatsächlich<br />

zu sehen sind.<br />

meter um die Koordinaten des Kartenausschnitts<br />

inklusive der Projektion ergänzt<br />

wird. So<strong>mit</strong> erhält ein CGI-Skript immer<br />

den Kartenausschnitt <strong>und</strong> die zugehörige<br />

Projektion.<br />

Erben<br />

Die beiden Attribute »readWithPOST«<br />

<strong>und</strong> »readWithGET« definieren, ob die<br />

HTTP-Methode POST oder GET für die<br />

Datenübertragung benutzt werden soll.<br />

Wichtig ist auch wieder die Angabe »headers«,<br />

die definiert, <strong>mit</strong> welchem MIME-<br />

Type die Daten übertragen werden. Das<br />

letzte Attribut »format« wird das Objekt<br />

angegeben, welches den Parser referenziert.<br />

Das so erzeugte Objekt »OpenLayers.Protocol.HTTP«<br />

wird zusammen <strong>mit</strong><br />

dem Array der Strategien (»strategies«) an<br />

»OpenLayers.Layer.Vector« übergeben.<br />

Um die Beschreibung dieses Code-Abschnitts<br />

abzuschließen, ein paar Worte<br />

zum Parser-Objekt. Die Code-Zeile<br />

»OpenLayers_FreeX = OpenLayers.<br />

Class(OpenLayers.Format, {});« leitet<br />

vom in der Bibliothek formulierten Objekt<br />

»OpenLayers.Format« das neue Objekt<br />

»OpenLayers_FreeX« ab. Das bedeutet,<br />

es erbt die komplette Funktionalität.<br />

Um CSV-Daten zu verarbeiten, muss das<br />

neue Objekt eine eigene Routine imple-<br />

Listing 6: Initialisieren der Hauptfunktion<br />

01 function map_init(mapid) {<br />

02 /* Renderer er<strong>mit</strong>teln <strong>und</strong> festlegen */<br />

03 var renderer =<br />

04 OpenLayers.Util.getParameters(<br />

05 window.location.href).renderer;<br />

06 renderer = (renderer) ? [renderer] :<br />

07 OpenLayers.Layer.Vector.prototype.renderers;<br />

08 <br />

09 /* OpenLayers an DOM‐Objekt binden */<br />

10 window.map = new OpenLayers.Map(mapid, {<br />

11 maxExtent: extent,<br />

12 projection: spherMerc,<br />

13 displayProjection: epsg4326,<br />

14 maxResolution: 'auto',<br />

15 numZoomLevels: 14,<br />

16 units: 'm',<br />

17 controls : [<br />

18 new OpenLayers.Control.PanZoom(),<br />

19 new OpenLayers.Control.Navigation(<br />

20 {zoomWheelEnabled: false}),<br />

21 new OpenLayers.Control.LayerSwitcher()<br />

22 ]});<br />

23 <br />

24 /* Basiskarte erstellen */<br />

25 var base = new OpenLayers.Layer.OSM("FreeX‐Karte",<br />

26 ["http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",<br />

27 "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",<br />

28 "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"],<br />

29 {<br />

30 wrapDateLine: false,<br />

31 isBaseLayer: true,<br />

32 displayOutsideMaxExtend: true,<br />

33 tileOptions: {crossOriginKeyword: null}<br />

34 });<br />

35 /* Ebenen erzeugen <strong>und</strong> an Basiskarte & DOM‐Objekt binden */<br />

36 freex = map_layer(window.map, "FreeX‐Layer (normal)");<br />

37 freex_o_r_p = map_layer_request_post(window.map,<br />

38 "FreeX‐Layer (POST‐Request)");<br />

39 freex_l_h_s = map_layer_http_strategy(window.map,<br />

40 "FreeX‐Layer (HTTP <strong>und</strong> Strategy)");<br />

41 if (base && freex && freex_o_r_p && freex_l_h_s) {<br />

42 window.map.addLayers(<br />

43 [base, freex, freex_o_r_p, freex_l_h_s]);<br />

44 }<br />

45 /* Karte zentrieren <strong>und</strong> Zoomfaktor festlegen */<br />

46 window.map.setCenter(<br />

47 new OpenLayers.LonLat(11, 48).<br />

48 transform(epsg4326, spherMerc), 9);<br />

49 }<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

111


Openlayers<br />

mentieren, die diese Daten umwandelt.<br />

Dazu überschreibt man die Methode<br />

»read« von »OpenLayers.Format« , wie<br />

das in »read: [...] return parser() [...]«<br />

geschieht. Zuvor wird noch überprüft, ob<br />

es sich bei dem übergebenen Objekt um<br />

ein String-Objekt handelt, weil der Parser<br />

nur diese verarbeitet.<br />

Listing 6 fügt alle Einzelzeile zu einem<br />

großen Ganzen zusammen, initialisiert<br />

erst die Karte <strong>und</strong> bindet sie dann als<br />

DOM-Objekt in die Webseite ein. Schließlich<br />

lädt die Funktion die Daten, die Layer<br />

<strong>und</strong> stellt die Karte dar.<br />

Datenzulieferer<br />

Da<strong>mit</strong> ist die Beschreibung des Javascript-<br />

Teils abgeschlossen. Um die Funktionalität<br />

zu vervollständigen, folgt die Beschreibung<br />

des zugehörigen CGI-Skriptes,<br />

das in Listing 7 dargestellt ist. Um Missverständnisse<br />

im Vorfeld auszuräumen,<br />

sei darauf hingewiesen, dass ein solches<br />

CGI-Skript nicht in Perl geschrieben sein<br />

muss. PHP <strong>und</strong> andere Skript- oder Programmiersprachen<br />

eignen sich genauso.<br />

Für dieses Beispiel wurde Perl gewählt,<br />

da es auf dem Webserver des Autors zur<br />

Verfügung steht. Um zu demonstrieren,<br />

wie die Datenbankanbindung funktioniert,<br />

wurde ein einfaches Beispiel gewählt,<br />

das ohne SQL-Datenbankserver<br />

auskommt.<br />

Im Abschnitt eins werden in Funktion<br />

»Auswahl_FreeX()« die Daten zeilenweise<br />

ohne Berücksichtigung irgendwelcher<br />

Kriterien aus einer Plaint-Text-<br />

Datenbank ausgelesen <strong>und</strong> in das Plain-<br />

Text-Dokument geschrieben. In Abschnitt<br />

zwei wird es interessanter. Die Funktion<br />

»Auswahl_FreeX_in_BBOX()« verarbeitet<br />

die Größe des Kartenausschnitts. Ebenso<br />

wie in Funktion »Auswahl_FreeX« werden<br />

die Daten zeilenweise aus der Datenbank<br />

»freex.dat« entnommen. Ob ein POI<br />

im Kartenausschnitt angezeigt wird, entscheidet<br />

die Abfrage »if ($lon > $minlon<br />

&& $lon < $maxlon && $lat > $minlat<br />

&& $lat < $maxlat){...}«, wobei der Kartenausschnitt<br />

<strong>mit</strong> »($minlon,$minlat)«<br />

<strong>und</strong> »($maxlon,$maxlat)« definiert ist.<br />

Falls die Daten aus einer SQL-Datenbank<br />

entnommen werden, muss die SQL-Query<br />

entsprechend gestaltet werden.<br />

Im Abschnitt drei wird zunächst definiert,<br />

dass generierte Dokument vom<br />

MIME-Typ »text/html« ist. Diese Angabe<br />

ist sehr wichtig, da<strong>mit</strong> der in Listing eins<br />

vorgestellte Parser funktioniert. Anschließend<br />

werden die Parameter ausgewertet,<br />

die von der Webseite gesendet werden.<br />

In Perl sorgt das Modul CGI dafür, dass<br />

man die <strong>mit</strong> der POST- oder GET-Methode<br />

gesendeten weiterverarbeiten kann:<br />

»$cgi‐>param('Parametername')«.<br />

Fazit<br />

Die Openlayers-Bibliothek macht es<br />

einfach, Karten von Open Streetmap in<br />

die eigene Website einzubauen. Selbst<br />

der Zugriff auf externe Datensätze zur<br />

Visualisierung geografischer Informationen<br />

wird zum Kinderspiel. So lassen<br />

sich Parser für Datenformate wie Open<br />

Office Calc entwickeln <strong>und</strong> die in diesen<br />

Dokumenten enthaltenen Daten in Karten<br />

präsentieren. (ofr)<br />

n<br />

Infos<br />

[1] Openlayers: [http:// www. openlayers. org]<br />

[2] Openlayers, Karten aufbereiten <strong>mit</strong> Mapnik,<br />

J. Dankoweit, FreeX 2/​2012<br />

[3] Openlayers API-Dokumentation:<br />

[http:// dev. openlayers. org/ docs/ files/​<br />

OpenLayers‐js. html]<br />

[4] Online-Beispiel: [http:// www. dankoweit. de/​<br />

Publikationen/ Code/ FreeX/ map. html]<br />

[5] Listings zum Artikel: [http:// www.​<br />

dankoweit. de/ Publikationen/ Code/ FreeX/​<br />

code. zip]<br />

[6] Wetter-Beispiel:<br />

[http:// www. dankoweit. de/ Wetterdienste/​<br />

hp_wetterdienste_auswahl. html]<br />

Listing 7: CGI-Skript für Geodaten<br />

01 #! /usr/bin/perl ‐w<br />

02 <br />

03 use CGI;<br />

04 use CGI::Carp qw(fatalsToBrowser);<br />

05 use Encode qw(encode decode);<br />

06 <br />

07 use strict;<br />

08 <br />

09 # ===========================================<br />

10 # Abschnitt 1:<br />

11 # POIs aus Datenbank auslesen OHNE<br />

Kartenausschnitt<br />

12 # zu beruecksichtigen<br />

13 # ===========================================<br />

14 sub Auswahl_FreeX {<br />

15 my ($land, $zeits) = @_;<br />

16 <br />

17 if (open(IN, '


VPN fürs Handy<br />

© Ints Vikmanis, 123RF<br />

OpenVPN via Android-Smartphone nutzen<br />

Zugangsschutz<br />

Wer von unterwegs via Smartphone auf den heimischen Datenbestand zugreifen will, muss die Kommunikation<br />

schützen. Dafür bietet sich ein VPN an. Mit OpenVPN auf dem Server <strong>und</strong> CyanogenMod auf dem Smartphone<br />

geht Konfiguration leicht von der Hand. Aber auch <strong>mit</strong> dem originalen Android-OS gelingt der Zugriff.<br />

Thomas Lingmann, Christoph Langner<br />

Ist man viel unterwegs, kommt man oft<br />

in die Verlegenheit, aus der Ferne auf<br />

das private oder Firmennetzwerk zugreifen<br />

zu wollen. Der Abgleich der Daten<br />

muss jedoch sicher sein – dafür empfiehlt<br />

sich eine VPN-Verbindung. So werden<br />

die Daten verschlüsselt übertragen, <strong>und</strong><br />

die Kommunikationspartner müssen sich<br />

authentifizieren.<br />

Die klassische VPN-Lösung im Open-<br />

Source-Bereich heißt OpenVPN [1]. Sie<br />

überträgt die Daten verschlüsselt über<br />

eine TLS-Verbindung. Als Transportprotokoll<br />

stehen wahlweise TCP <strong>und</strong> UDP<br />

zur Verfügung. Die Authentifizierung von<br />

Client <strong>und</strong> Server erfolgt über Benutzername<br />

<strong>und</strong> Passwort, einen gemeinsamen<br />

Schlüssel (Pre-shared Key) oder <strong>mit</strong> Zertifikaten.<br />

Das letztgenannte Verfahren gilt<br />

im Allgemeinen als das sicherste <strong>und</strong><br />

wird deshalb hier vorgestellt.<br />

Der OpenVPN-Server findet sich in der<br />

Paketverwaltung der meisten Linux-Distributionen<br />

<strong>und</strong> der BSD-Betriebssysteme<br />

<strong>und</strong> steht auch für Mac OS X <strong>und</strong> Windows<br />

bereit. Sind die dort angebotenen<br />

Pakete zu alt, lädt man aktuellere von<br />

der Projektseite entpackt <strong>und</strong> istalliert<br />

sie <strong>mit</strong><br />

# ./configure && make && make install<br />

Der Server <strong>und</strong> alle Anwender, die auf<br />

ihn zugreifen wollen, benötigen jeweils<br />

einen privaten Schlüssel (*.key) sowie<br />

ein Zertifikat (*.crt). Diese Zertifikate<br />

müssen von einer dem Server bekannten<br />

Zertifizierungsstelle (CA) signiert sein.<br />

Für den Verbindungsaufbau werden serverseitig<br />

noch Diffie-Hellman-Parameter<br />

(dh1024.pem) benötigt.<br />

Zertifikate<br />

Die für die Verbindung zwischen Client<br />

<strong>und</strong> Server nötigten Zertifikate kann<br />

man sich selbst <strong>mit</strong> den Bibliotheken<br />

von OpenSSL herstellen. OpenVPN bietet<br />

im Unterverzeichnis »easy‐rsa« verschiedene<br />

Skripte, <strong>mit</strong> denen Zertifikate<br />

auch ohne weitere Vorkenntnisse erzeugt<br />

werden können, dabei ist zunächst das<br />

Verzeichnis »easy‐rsa« samt seinem kompletten<br />

Inhalt nach »/etc/openvpn« zu<br />

kopieren. Dann wechselt man in dieses<br />

Verzeichnis.<br />

Im ersten Schritt werden dort einige<br />

Parameter der Datei »vars« den eigenen<br />

Gegebenheiten angepasst:<br />

export KEY_PROVINCE="NRW"<br />

export KEY_CITY="Bonn"<br />

export KEY_ORG="MyOffice"<br />

export KEY_EMAIL="admin@noatun.net"<br />

Zusätzlich zu diesen Angaben werden<br />

bei Bedarf noch die Schlüssellänge<br />

(»KEY_SIZE«), die Gültigkeitsdauer der<br />

Zertifikate der CA (»CA_EXPIRE«) <strong>und</strong><br />

der Client- beziehungsweise die Server-<br />

Zertifikate (»KEY_EXPIRE«) eingestellt.<br />

Durch die Aufrufe<br />

# source ./vars<br />

# ./clean‐all<br />

# ./build‐ca<br />

# ./build‐key‐server server<br />

# ./build‐key client1<br />

# ./build‐dh<br />

werden nacheinander die gesetzten Parameter<br />

geladen, das Verzeichnis »keys«<br />

(sofern bereits vorhanden) aufgeräumt<br />

<strong>und</strong> der öffentliche <strong>und</strong> private Schlüssel<br />

der CA (»build‐ca«), des Servers<br />

(»build‐key‐server server«) <strong>und</strong> des<br />

Clients (»build‐key client1«) sowie die<br />

Diffie-Hellman Parameter (»build‐dh«)<br />

generiert.<br />

Angaben in »vars«<br />

Beim Schreiben der Zertifikate sind verschiedene<br />

Angaben zu machen, einen<br />

möglichen Ablauf für ein Client-Zertifikat<br />

zeigt Listing 1, bei den anderen Zertifikaten<br />

läuft es sehr ähnlich ab.<br />

Die Auskünfte zu Land, Stadt <strong>und</strong> so weiter<br />

wurden in »vars« gesetzt <strong>und</strong> können<br />

so auch für andere Zertifikate übernommen<br />

werden, eine Ausnahme bildet der<br />

»Common Name«, der immer eindeutig<br />

sein muss.<br />

114 Ausgabe 06-2012 Admin www.admin-magazin.de


VPN fürs Handy<br />

Tabelle 1: Debugging-Modi<br />

Parameter Bedeutung<br />

0 Es werden nur schwerwiegende Fehler gemeldet<br />

4 Normalbetrieb<br />

5 <strong>und</strong> 6 Bei bestehenden Verbindungsproblemen einzuschalten<br />

9 Sehr geschwätziger Modus<br />

Die <strong>mit</strong> diesen Aufrufen generierten Dateien<br />

landen im Unterverzeichnis »keys«.<br />

Von hier aus müssen abschließend noch<br />

die Dateien »ca.crt«, »server.crt«, »server.key«<br />

<strong>und</strong> »dh1024.pem« nach »/etc/<br />

openvpn« kopiert werden. Es kann auch<br />

ein anderes Zielverzeichnis angegeben<br />

werden, dann ist die nachfolgende Serverkonfiguration<br />

anzupassen.<br />

Der OpenVPN-Server<br />

Eine Konfiguration des OpenVPN-Servers<br />

kann aussehen wie in Listing 2.<br />

Der VPN-Tunnel wird hier über virtuelle<br />

Netzwerk-Schnittstellen aufgebaut. Dabei<br />

wird die lokale Routing-Tabelle so<br />

verändert, dass sie die Pakete über diese<br />

Schnittstelle versendet. Die Schnittstelle<br />

»tun« im Beispiel legt einen IP-Tunnel<br />

an, alternativ lässt sich über »tap« ein<br />

Ethernet-Tunnel aufbauen.<br />

Die Datei <strong>mit</strong> den Definition wird als<br />

»/etc/openvpn/server.conf« abgespeichert,<br />

der Name der Konfigurationsdatei<br />

ist allerdings frei wählbar, weil er dem<br />

Server beim Aufruf <strong>mit</strong>gegeben wird:<br />

# openvpn ‐‐config /etc/openvpn/server.conf<br />

Die oben gezeigte Datei enthält nur eine<br />

Minimaldefinition.<br />

DNS-Suchdomains<br />

Bei Schwierigkeiten<br />

<strong>mit</strong> der Verbindung kann der Admin<br />

<strong>mit</strong> der Variable »verb« die Debugging-<br />

Stufe einstellen. Welche Modi möglich<br />

sind, zeigt Tabelle 1.<br />

Eine Datei, in der die Meldungen protokolliert<br />

werden, legt man <strong>mit</strong><br />

log‐append /etc/openvpn/openvpn.log<br />

in der Konfigurationsdatei fest.<br />

Wer beim Test nicht die Konfigurationsdatei<br />

ändern will, kann die Parameter<br />

auch auf der Kommandozeile beim Starten<br />

des Servers definieren. Die Verbosity<br />

wird beispielsweise <strong>mit</strong><br />

# openvpn ‐‐verb 5 ‐‐config U<br />

/etc/openvpn/server.conf<br />

festgelegt.<br />

Der Client<br />

Parameter<br />

VPN-Name<br />

Smartphones sind längst Alltag. Im Beispiel<br />

dient zunächst ein HTC-Smartphone<br />

<strong>mit</strong> CyanogenMod [2] als Betriebssystem<br />

als Client. Der Vorteil ist, dass hier Open-<br />

VPN zum Standard gehört <strong>und</strong> keine weiteren<br />

Schritte zur Installation des Clients<br />

erforderlich sind.<br />

Tabelle 2: Parameter des OpenVPN-Clients<br />

VPN-Server festlegen<br />

Authentifizierung<br />

CA-Zertifikat festlegen<br />

Nutzerzertifikat festlegen<br />

Beispiel<br />

Beliebig<br />

IP-Adresse des Servers<br />

Leer<br />

Name des importierten Zertifikats<br />

Name des importierten Zertifikats<br />

Leer<br />

Um OpenVPN unter CyanogenMod nutzen<br />

zu können, müssen zunächst das<br />

Client-Zertifikat <strong>und</strong> der zugehörige<br />

Schlüssel sowie das CA-Zertifikat <strong>mit</strong> einer<br />

einer »pkcs12‐Datei« importiert werden.<br />

Sie wird <strong>mit</strong> dem Aufruf<br />

# openssl pkcs12 ‐export \<br />

‐in client1.crt \<br />

‐inkey client1.key \<br />

‐certfile ca.crt \<br />

‐out client1.p12<br />

Enter Export Password:<br />

Verifying ‐ Enter Export Password:<br />

#<br />

geschrieben.<br />

Anschließend wird das Zertifikat »client1.<br />

p12« im Hauptverzeichnis des Smartphones<br />

abgelegt. Es wird im nächsten Schritt<br />

über das Menü »Einstellungen | Standort<br />

<strong>und</strong> Sicherheit« von der SD-Karte importiert.<br />

Die Konfiguration erfolgt gleichfalls<br />

über »Einstellungen« <strong>und</strong> dort über die<br />

Menüpunkte »Drahtlos & Netzwerke |<br />

VPN‐Einstellungen | VPN hinzufügen |<br />

OpenVPN‐VPN hinzufügen«. Das sich<br />

hier öffnende Konfigurationsmenü zeigt<br />

Bild 1. Dort werden die Angaben aus<br />

Tabelle 2 gemacht.<br />

E<br />

Listing 1: Definieren eines Client-Zertifikats<br />

01 # ./build‐key client1<br />

02 Generating a 1024 bit RSA private key<br />

03 ...............................++++++<br />

04 ...................++++++<br />

05 writing new private key to 'client1.key'<br />

06 ‐‐‐‐‐<br />

07 You are about to be asked to enter information<br />

that will<br />

08 be incorporated into your certificate request.<br />

09 What you are about to enter is what is called a<br />

10 Distinguished Name or a DN.<br />

11 There are quite a few fields but you can<br />

leave some blank<br />

12 For some fields there will be a default value,<br />

13 If you enter '.', the field will be left<br />

blank.<br />

14 ‐‐‐‐‐<br />

15 Country Name (2 letter code) [DE]:<br />

16 State or Province Name (full name)<br />

[NRW]:<br />

17 Locality Name (eg, city) [Bonn]:<br />

18 Organization Name (eg, company)<br />

[MyOffice]:<br />

19 Organizational Unit Name (eg, section)<br />

[]:<br />

20 Common Name (eg, your name or your server's<br />

21 hostname) [client1]:<br />

22 Name []:<br />

23 Email Address [admin@noatun.net]:<br />

24 <br />

25 Please enter the following 'extra' attributes<br />

26 to be sent with your certificate request<br />

27 A challenge password []:<br />

28 An optional company name []:<br />

29 Using configuration from /etc/openvpn/neu/<br />

easy‐rsa/2.0/<br />

30 openssl.cnf<br />

31 Check that the request matches the signature<br />

32 Signature ok<br />

33 The Subject's Distinguished Name is as follows<br />

34 countryName :PRINTABLE:'DE'<br />

35 stateOrProvinceName :PRINTABLE:'NRW'<br />

36 localityName :PRINTABLE:'Bonn'<br />

37 organizationName :PRINTABLE:'MyOffice'<br />

38 commonName :PRINTABLE:'client1'<br />

39 name :PRINTABLE:'tl'<br />

40 emailAddress :IA5STRING:'admin@<br />

noatun.net'<br />

41 Certificate is to be certified until Jul 2<br />

12:27:51 2022<br />

42 GMT (3650 days)<br />

43 Sign the certificate? [y/n]:<br />

44 <br />

45 1 out of 1 certificate requests certified,<br />

com<strong>mit</strong>? [y/n]<br />

46 Write out database with 1 new entries<br />

47 Data Base Updated<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

115


VPN fürs Handy<br />

Abbildung 1: Das Konfigurationsmenü<br />

von OpenVPN in der OS-<br />

Alternative Cyanogenmod.<br />

Mit diesen Schritten ist die Konfiguration<br />

des Client bereits abgeschlossen. Nachdem<br />

Client <strong>und</strong> Server gestartet sind<br />

<strong>und</strong> der Tunnel erfolgreich aufgebaut ist,<br />

sollte auf dem Smartphone eine Meldung<br />

wie in Bild 2 ausgegeben werden.<br />

Mit Standard-Android<br />

Wer das Betriebssystem auf seinem<br />

Smartphone nicht wechseln kann oder<br />

will, der kommt auch <strong>mit</strong> einem aktuellen,<br />

nicht modifizierten Android-OS zum<br />

Ziel. Android beherrscht seit der Version<br />

1.6 den Umgang <strong>mit</strong> den weitverbreiteten<br />

VPN-Protokollen PPTP, 2TP <strong>und</strong><br />

L2TP/​IPsec <strong>mit</strong> Zertifikat oder Shared<br />

Secret (also <strong>mit</strong> einem Passwort). Andere<br />

VPN-Netzwerk-Protokolle werden<br />

bislang nicht von Haus aus unterstützt.<br />

Die entsprechenden Optionen finden sich<br />

bei Android 2.x unter »Einstellungen |<br />

Drahtlos & Netzwerke | VPN‐Einstellungen«<br />

<strong>und</strong> bei aktuellen ICS-Geräten unter<br />

»Einstellungen | Drahtlos & Netzwerke |<br />

Mehr | VPN«.<br />

Seit Android „Ice Cream Sandwich“ 4.0<br />

verfügt das Android-System nun jedoch<br />

über eine VPN-API [3][4], über die<br />

Listing 2: Server-Konfiguration<br />

01 # OpenVPN‐Server Konfiguration<br />

02 # ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

03 <br />

04 # Standardport 1194<br />

05 port 1194<br />

06 <br />

07 # Schnittstelle fuer den Tunnel<br />

08 dev tun<br />

09 <br />

Abbildung 2: Erfolgreicher Aufbau<br />

des VPN-Tunnels via Cynogenmod.<br />

Abbildung 3: Aus der VPN-Liste<br />

heraus startet man VPNs oder<br />

legt neue an.<br />

Entwickler weitere VPN-Protokolle in<br />

Android als App implementieren können,<br />

ohne dass <strong>mit</strong> Root-Rechten tief in<br />

das System eingegriffen werden müsste.<br />

Diese API nutzen erste Apps wie etwa<br />

OpenVPN für Android [5], um die von<br />

Android noch nicht unterstützten Protokolle<br />

nachzurüsten.<br />

Mit OpenVPN für Android [6] hat der<br />

Anwender die Möglichkeit, eine Verbindung<br />

zu seinem VPN-Server aufzubauen,<br />

ohne dass er auf dem Gerät Root-Rechte<br />

benötigt. Aufgr<strong>und</strong> der neuen API ist die<br />

App allerdings nur für Androiden <strong>mit</strong> Ice<br />

Cream Sandwich verfügbar.<br />

Nach der Installation der quelloffenen<br />

App aus dem Google Play Store muss<br />

man noch die leere VPN-Liste <strong>mit</strong> Leben<br />

füllen. Über das Plus-Symbol (Abbildung<br />

3) legt man ein neues Profil an, alternativ<br />

lässt sich über das Ordner-Symbol<br />

eine bestehende OpenVPN-Konfiguration<br />

(meist <strong>mit</strong> der Endung .ovpn) von der<br />

Speicherkarte des Handys importieren.<br />

Liegen die Zertifikate im selben Ordner,<br />

dann werden diese auch gleich automatisch<br />

<strong>mit</strong> geladen.<br />

Ein Klick auf eines der angelegten VPN<br />

startet die Verbindung. Android wird<br />

10 # Bezeichnung der Zertifikate<br />

11 ca /etc/openvpn/ca.crt<br />

12 cert /etc/openvpn/server.crt<br />

13 key /etc/openvpn/server.key<br />

14 dh /etc/openvpn/dh1024.pem<br />

15 <br />

16 # Angabe eines virtuellen Subnetzes<br />

17 server 10.0.0.0 255.255.255.0<br />

da raufhin warnen, dass OpenVPN eine<br />

VPN-Verbindung starten möchte. Nur<br />

wenn der Anwender diese Verbindung<br />

bestätigt, wird sie vom System auch<br />

aufgebaut. Die Warnung lässt sich leider<br />

nicht deaktivieren, wer öfters seine<br />

OpenVPN-Verbindung nutzen möchte,<br />

muss sie immer wieder akzeptieren.<br />

Sobald die Verbindung steht, trägt sich<br />

OpenVPN <strong>mit</strong> einem kleinen Schlüssel<br />

in das Status-Menü von Android ein.<br />

Über diesen Eintrag gelangt man auch<br />

wieder zum Übersichts-Dialog der aktuellen<br />

VPN-Verbindung. Über ihn konfiguriert<br />

man die aktuelle Verbindung oder<br />

trennt sich wieder vom VPN. Praktisch<br />

ist das OpenVPN-Widget, das man auf<br />

einen Homescreen legen kann. Es startet<br />

direkt <strong>und</strong> ohne Umwege das zuvor ausgewählte<br />

VPN.<br />

Fertige Server<br />

Nebenbei: Das VPN-Protokoll wird auch<br />

direkt von einigen WLAN-Routern oder<br />

NAS-Geräten unterstützt, sodass Sie<br />

eventuell gar keinen VPN-Server im Internet<br />

oder LAN brauchen <strong>und</strong> das VPN<br />

über den zu Hause laufenden Router oder<br />

das NAS aufbauen können. In der Konfigurationsoberfläche<br />

der DiskStation-<br />

Firmware von Synology etwa lässt sich<br />

OpenVPN als VPN-Lösung recht einfach<br />

aktivieren <strong>und</strong> die passende Konfigurationsdatei<br />

für angeschlossene Clients exportieren.<br />

Bei WLAN-Routern wird Open-<br />

VPN leider selten ab Werk angeboten,<br />

allerdings lässt sich ein OpenVPN-Server<br />

oft via Firmware nachrüsten. (jcb) n<br />

Infos<br />

[1] OpenVPN-Projektseite: [http:// openvpn.​<br />

net]<br />

[2] CyanogenMod-Projektseite: [http:// www.​<br />

cyanogenmod. com]<br />

[3] Android 4.0 Highlights: [http:// developer.​<br />

android. com/ sdk/ android‐4. 0‐highlights.​<br />

html]<br />

[4] VPN-Client API: [http:// developer. android.​<br />

com/ reference/ android/ net/ VpnService.​<br />

html]<br />

[5] Openvpn for Android: [https:// play. google.​<br />

com/ store/ apps/ details? id=de. blinkt.​<br />

openvpn]<br />

[6] ics-openvpn auf Google Code: [http:// code.​<br />

google. com/ p/ ics‐openvpn]<br />

116 Ausgabe 06-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 <strong>und</strong> versandkostenfrei<br />

unter www.admin-magazin.de/einzelheft nachbestellen:<br />

<strong>ADMIN</strong> 06/2011 <strong>ADMIN</strong> 01/2012 <strong>ADMIN</strong> 02/2012<br />

<strong>ADMIN</strong> 03/2012 <strong>ADMIN</strong> 04/2012 <strong>ADMIN</strong> 05/2012<br />

Da<strong>mit</strong> Sie keine Ausgabe mehr verpassen,<br />

bestellen Sie am besten gleich ein Abo<br />

vom <strong>ADMIN</strong> <strong>Magazin</strong> <strong>und</strong> 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


Tclkit<br />

© Thomas Sztanek, 123RF<br />

Plattformübergreifende Softwareentwicklung <strong>mit</strong> Tclkit<br />

Motorisierte<br />

Skripte<br />

Zwischen Skriptsprachen <strong>und</strong> den klassischen Compilersprachen gibt es<br />

kaum noch Performance-Unterschiede, aber ein Nachteil der Skriptsprachen<br />

war bisher, dass man für sie zunächst einen Interpreter installieren<br />

musste. Tclkit hebt diesen Malus auf. Klaus Kröll<br />

Für einen Compiler kann zuweilen<br />

sprechen, dass er Firmengeheimnisse<br />

verschleiert, die in Algorithmen im Programmcode<br />

implementiert sind, wenn der<br />

Anwender nur das kompilierte Programm<br />

erhält. Wo diese Überlegung keine Rolle<br />

spielt, kann eine Skriptsprache vorteilhaft<br />

sein, denn so ist der aktuelle Programmcode<br />

stets verfügbar. Ein Nachteil von<br />

Skriptsprachen besteht allerdings darin,<br />

dass der Interpreter auf dem Zielsystem<br />

<strong>und</strong> auf allen geforderten Plattformen<br />

verfügbar sein muss.<br />

Eine Skriptsprache, die bereits seit über<br />

20 Jahren – allerdings eher im Verborgenen<br />

– auf dem Markt ist, heißt Tcl/​Tk.<br />

Ihre Vorteile sind die einfache Erlernbarkeit,<br />

die hohe Ausführungsgeschwindigkeit<br />

<strong>und</strong> die Verfügbarkeit für unterschiedliche<br />

Rechner-Plattformen.<br />

Normalerweise braucht auch Tcl/​Tk immer<br />

einen Interpreter, wo man dessen<br />

Installation aber umgehen möchte, kann<br />

man auf das Programm tclkit zählen. Bei<br />

tclkit handelt es sich um ein ausführbares<br />

Programm, das einen Tcl-Interpreter<br />

enthält <strong>und</strong> die gesamte Laufzeitumgebung<br />

in einem gepackten virtuellen<br />

Dateisystem <strong>mit</strong> sich bringt. Tclkit ist für<br />

unterschiedliche Plattformen verfügbar<br />

<strong>und</strong> in der Lage, sowohl Tcl-Dateien als<br />

auch das sogenannte Starkit zu interpretieren.<br />

Durch einen speziellen Mechanismus<br />

kann ein Starkit <strong>mit</strong> einem tclkit<br />

verb<strong>und</strong>en werden <strong>und</strong> es entsteht eine<br />

plattformabhängige, ausführbare Datei,<br />

ein Starpack. Wie das genau geht, wird<br />

hier erläutert.<br />

Voraussetzungen<br />

Die Entwicklung von Tcl-Programmen<br />

kann gr<strong>und</strong>sätzlich auch <strong>mit</strong> einem tclkit<br />

erfolgen. In der Regel werden meist<br />

zusätzliche Module (Packages) benötigt,<br />

die in kompletten Laufzeitumgebungen<br />

oft schon enthalten sind, weshalb es<br />

sich empfiehlt, für die Entwicklung von<br />

Starkits/​Starpacks eine solche komplette<br />

Laufzeitumgebung zu installieren. Für<br />

die Betriebssysteme Windows <strong>und</strong> Linux<br />

<strong>und</strong> Mac OS X stellt die Firma Active<br />

State unter anderem die ActiveTcl Community<br />

Edition (derzeit aktuelle Version<br />

8.5.11.1) zur Verfügung.<br />

Die Installation erfolgt <strong>mit</strong> einem eigenen<br />

Installer. Man spielt am besten alle Komponenten<br />

sowie die Demo-Programme<br />

auf. Danach lässt sich die Installation<br />

<strong>mit</strong> den beigefügten Demo-Programmen<br />

testen. Dazu wird unter Windows im<br />

Startmenü unter dem Submenü Demos<br />

der Eintrag »Tk« gewählt, unter Linux<br />

befindet sich im Verzeichnis Demo/​Tk8.5<br />

das Skript »widget.tcl«, das <strong>mit</strong> »wish<br />

widget.tcl« aufgerufen wird.<br />

Die benötigten Dateien für die Starkit/​<br />

Starpack-Erstellung können im Internet<br />

hier [1] heruntergeladen werden. Man<br />

benötigt das Programm »tclkit« <strong>und</strong> ein<br />

Starpack <strong>mit</strong> dem Namen »sdx.kit« (Starkit<br />

Developer eXtension). Unter Windows<br />

werden zwei tclkits angeboten, eines<br />

für den Textmodus (cmd-Programme)<br />

ohne Tk <strong>und</strong> ein weiteres <strong>mit</strong> Tk für<br />

Programme <strong>mit</strong> GUI. Zur Erstellung der<br />

Starkits unter Windows ist in jedem Fall<br />

das tclkit ohne Tk (tclkitsh…exe) notwendig.<br />

Die heruntergeladenen Dateien<br />

werden nun in ein Verzeichnis gelegt,<br />

das am besten in der PATH-Variable eingetragen<br />

ist. Die Datei »sdx‐20110317.kit«<br />

benennt der Anwender in »sdx.kit«, die<br />

tclkit-Programme einfach in »tclkit« beziehungsweise<br />

»tclkit.exe« <strong>und</strong> »tclkitsh.<br />

exe« um. Auf 64-Bit-Systemen wie Windows<br />

Server 2008 R2 ist der Einsatz eines<br />

64-Bit-Tclkits notwendig.<br />

Nun lässt sich schon ein einfaches Demo-<br />

Skript unter dem Namen »Hello.tcl« anlegen:<br />

#!/bin/sh<br />

##\<br />

exec wish "$0" "$@"<br />

package require Tk<br />

button .hello ‐text "Hello World" U<br />

‐command exit<br />

pack .hello<br />

Wird diese Datei unter Linux ausführbar<br />

gemacht, so zeigt der Aufruf von »./hello.<br />

118 Ausgabe 06-2012 Admin www.admin-magazin.de


Tclkit<br />

Name<br />

twapi<br />

tablelist<br />

BWidget<br />

cwind<br />

winico<br />

snack<br />

expect<br />

Tabelle 1: Hilfreiche Packages<br />

Funktion<br />

Zugriffsfunktionen für Windows-API<br />

Mehrspaltiges Tabellen-Widget <strong>mit</strong> vielfältigen Sonderfunktionen<br />

Kombinierte Widgets<br />

Simulation von Tastatur <strong>und</strong> Mauseingaben unter Windows<br />

Anzeige von Icons in der Windows-Taskbar<br />

So<strong>und</strong>-Funktionen<br />

Automatisierung von komplexeren Komandozeilen-Programmen, zum Beispiel<br />

Zugänge <strong>mit</strong> Einmalpassworten<br />

Abbildung 1:<br />

Die Ausgabe des<br />

Skripts »Hello.tcl«.<br />

meiden, werden das Programm »tclkit.<br />

exe« <strong>und</strong> die Datei »sdx.kit« in das gleiche<br />

Verzeichnis wie das Skript »hello.tcl«<br />

kopiert. Der Aufruf<br />

tclkitsh sdx.kit qwrap hello.tcl U<br />

‐runtime tclkit.exe<br />

Nachdem das Skript erfolgreich getestet<br />

ist, kann nun ein eigenständiges Programm<br />

daraus erstellt werden. Dazu ist<br />

wieder die Shell bezieungsweise Eingabeaufforderung<br />

notwendig. Der Aufruf ist<br />

unter Windows <strong>und</strong> Linux gr<strong>und</strong>sätzlich<br />

gleich. Unter Windows ist allerdings »tclkitsh«<br />

zu verwenden. Im folgenden sollen<br />

die Programmaufrufe unter Windows als<br />

Beispiele dienen, weil der Programmierer<br />

hier zwischen Text- <strong>und</strong> GUI-Modus unterscheiden<br />

muss. Verwendet er dagegen<br />

Linux, heißt es immer nur »tclkit«. Um<br />

die Eingabe langer Pfadnamen zu vertcl«<br />

ein Fenster <strong>mit</strong> dem Button „Hello<br />

World“ an, das nach dem Klick auf den<br />

Button beendet wird (Abbildung 1). Unter<br />

Windows lässt sich diese Datei <strong>mit</strong><br />

einem Doppelklick starten.<br />

GUIs <strong>mit</strong> Tk<br />

Die ersten drei Zeilen des Programmcodes<br />

werden nur unter Linux benötigt,<br />

da<strong>mit</strong> die Datei direkt ausgeführt werden<br />

kann. Die Zeile<br />

package require Tk<br />

lädt die grafische Komponente Tk. Dies<br />

ist beim Starten des Skripts <strong>mit</strong> der Tcl-<br />

Laufzeitumgebung nicht nötig, wird allerdings<br />

für die korrekte Ausführung <strong>mit</strong><br />

dem tclkit benötigt. Die Zeile 6 erzeugt<br />

den „Hello World“-Button, die Zeile 7<br />

zeigt den Button am Bildschirm an.<br />

Das Skript »hello.tcl« lässt sich auch direkt<br />

<strong>mit</strong> dem tclkit ausführen. Dazu gibt<br />

man in einer Shell (oder im Cmd-Fenster)<br />

im Verzeichnis des Skripts<br />

tclkit hello.tcl<br />

ein. Es öffnet sich wieder ein Fenster <strong>mit</strong><br />

dem Button „Hello World“.<br />

Das erste Starpack<br />

erzeugt die Datei »hello«, die nach dem<br />

Umbenennen in »hello.exe« startbar ist.<br />

Um jetzt unter Windows ein Programm<br />

für Linux zu erzeugen, muss nur das Tclkit<br />

für Linux (»tclkit‐8.5.9‐linux‐ix86«) in<br />

das gleiche Verzeichnis kopiert werden.<br />

Durch den Aufruf von<br />

tclkitsh sdx.kit qwrap hello.tcl U<br />

‐runtime tclkit‐8.5.9‐linux‐ix86<br />

entsteht die Datei »hello«, die jetzt ein<br />

ausführbares Programm für Linux ist.<br />

Analog ist dies auch unter Linux für Windows<br />

möglich. So lassen sich Programme<br />

für verschiedene Rechner Plattformen<br />

aus einem Quelltext erzeugen, da nur das<br />

entsprechende Tclkit der Ziel-Plattform<br />

<strong>mit</strong> dem Parameter »‐runtime« bei der<br />

Erzeugung anzugeben ist. Es gilt aber zu<br />

beachten, dass es die Verwendung plattformspezifischer<br />

Packages ( zum Beispiel<br />

»twapi« oder »registry« für Windows) unmöglich<br />

machen kann, das Programm zu<br />

portieren.<br />

E<br />

Listing 1: Ein Editor<br />

01 #!/bin/sh<br />

02 ##\<br />

03 exec wish "$0" "$@"<br />

04 <br />

05 package require BWidget<br />

06 package require Tk<br />

07 <br />

08 proc openfile {} {<br />

09 global hw<br />

10 set filename [tk_getOpenFile]<br />

11 # Abbruch liefert einen leeren String zurück<br />

12 if {[string bytelength $filename] != 0} {<br />

13 set fp [open $filename r]<br />

14 $hw.sw.t delete 1.0 end<br />

15 $hw.sw.t insert end [read $fp]<br />

16 close $fp<br />

17 }<br />

18 }<br />

19 <br />

20 proc savefile {} {<br />

21 global hw<br />

22 set filename [tk_getSaveFile]<br />

23 # Abbruch liefert einen leeren String zurück<br />

24 if {[string bytelength $filename] != 0} {<br />

25 set fp [open $filename w]<br />

26 puts $fp [$hw.sw.t get 1.0 end]<br />

27 close $fp<br />

28 }<br />

29 }<br />

30 <br />

31 # Erzeuge Haupt Frame<br />

32 MainFrame .mf<br />

33 pack .mf ‐fill both ‐expand yes<br />

34 <br />

35 # Erzeuge Toolbar<br />

36 set tb [.mf addtoolbar]<br />

37 set bbox [ButtonBox $tb.bbox ‐spacing 0 ‐padx<br />

1 ‐pady 1]<br />

38 $bbox add ‐command openfile \<br />

39 ‐highlightthickness 0 ‐image [Bitmap::get<br />

openfold] ‐takefocus 0 ‐relief link \<br />

40 ‐borderwidth 1 ‐padx 1 ‐pady 1 \<br />

41 ‐helptext "Öffnen"<br />

42 $bbox add ‐command savefile \<br />

43 ‐highlightthickness 0 ‐image [Bitmap::get<br />

save] ‐takefocus 0 ‐relief link \<br />

44 ‐borderwidth 1 ‐padx 1 ‐pady 1 \<br />

45 ‐helptext "Speichern"<br />

46 <br />

47 # Anzeigen der Toolbar<br />

48 pack $bbox ‐side left ‐anchor w<br />

49 <br />

50 # Fensterbereich er<strong>mit</strong>teln<br />

51 set hw [.mf getframe]<br />

52 <br />

53 # Textbereich <strong>mit</strong> Scrollbars<br />

54 ScrolledWindow $hw.sw<br />

55 text $hw.sw.t<br />

56 $hw.sw setwidget $hw.sw.t<br />

57 <br />

58 # Textbereich anzeigen<br />

59 pack $hw.sw ‐fill both ‐expand yes<br />

60 <br />

61 # Ctrl‐o <strong>und</strong> Ctrl‐s den Funktionen Öffnen <strong>und</strong><br />

Schließen zuordnen<br />

62 bind . openfile<br />

63 bind . savefile<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

119


Tclkit<br />

Der Parameter »qwrap« (quick<br />

wrap) eignet sich nur, um aus<br />

einer einzigen Quell-Datei ein<br />

Starpack/​Starkit zu erstellen.<br />

Kommen weitere Packages<br />

oder mehrere Quell-Dateien<br />

zum Zug, so ist der Parameter<br />

»wrap« zu verwenden. Er<br />

setzt voraus, dass der Quellcode<br />

<strong>und</strong> die Packages in einer<br />

speziellen Verzeichnisstruktur<br />

vorliegen, was das folgende<br />

Beispiel erläutert.<br />

Starpack <strong>mit</strong> zusätzlichen<br />

Packages<br />

Dieses Beispiel liefert einen einfachen<br />

Text-Editor. Für das Hauptfenster kommt<br />

das Package BWidget zum Einsatz. Die<br />

Datei aus Listing 1 <strong>mit</strong> dem Namen »editor.tcl«<br />

erzeugt das Fenster: Sobald man<br />

sie startet, erscheint ein Fenster, das als<br />

rudimentärer Editor fungieren kann.<br />

Um daraus ein eigenständiges Programm<br />

zu erstellen, erzeugt der folgende Aufruf<br />

erst <strong>mit</strong> dem Parameter »qwrap« ein<br />

Starkit:<br />

tclkitsh sdx.kit qwrap editor.tcl<br />

Abbildung 2: Die Starkit-Verzeichnisstruktur nach der Rückverwandlung.<br />

Dieses Starkit (»editor.kit«) wird <strong>mit</strong> dem<br />

Parameter »unwrap« wieder in den Quellcode<br />

zurückgewandelt. Bei der Rückwandlung<br />

entsteht eine Verzeichnisstruktur<br />

(»editor.vfs«), die auch der eigentliche<br />

Inhalt des Starkits ist (Abbildung 2).<br />

tclkitsh sdx.kit unwrap editor.kit<br />

Im »lib«-Verzeichnis eines Starkits müssen<br />

alle benötigten Packages zu finden<br />

sein. Da in unserem Beispiel nur das Package<br />

BWidget verwendet wurde, wird es<br />

nach »edidor.vfs/lib« kopiert. Es könnten<br />

jetzt auch noch Korrekturen an der Datei<br />

»editor.tcl« vorgenommen oder weitere<br />

Dateien hinzugefügt werden (Tabelle 1).<br />

Zum Abschluss erzeugt man das Programm<br />

<strong>mit</strong> dem Befehl<br />

tclkitsh sdx.kit wrap editor.exe U<br />

‐runtime tclkit.exe<br />

Es entsteht direkt das Programm »editor.<br />

exe«. Mit dem Befehl<br />

tclkitsh sdx.kit U<br />

unwrap editor.exe<br />

lässt sich das<br />

Starpack jederzeit<br />

wieder in eine<br />

Verzeichnisstruktur<br />

wandeln, die<br />

einige Dateien <strong>und</strong><br />

Packages mehr<br />

enthält, da das<br />

»tclkit.exe« selbst<br />

ein Starpack ist,<br />

<strong>und</strong> die dort enthaltenen<br />

Dateien<br />

integriert werden.<br />

Ausbau<br />

indem im Wurzelverzeichnis<br />

des entpackten Starkits eine<br />

Ico-Datei <strong>mit</strong> dem Namen<br />

»tclkit.ico« abgelegt wird (Abbildung<br />

3), die für jede gewünschte<br />

Farbauflösung ein<br />

Icon enthält.<br />

Benötigt man weitere Dateien<br />

aus einem Starkit, so lässt sich<br />

der Wurzelpfad des gerade<br />

aufgerufenen Starkits über die<br />

Variable »$Starkit::topdir« er<strong>mit</strong>teln.<br />

Ist diese Variable nicht<br />

vorhanden, wurde das Skript nicht als<br />

Starkit aufgerufen. So lassen sich auch<br />

leicht Skripte erstellen, die sowohl in einer<br />

Laufzeitumgebung als auch als Starkit/​Starpack<br />

lauffähig sind.<br />

Bei der Erstellung der Starpacks kann<br />

über die Option »‐writable« festgelegt<br />

werden, dass Änderungen an Dateien innerhalb<br />

des Starpacks gespeichert werden<br />

können. Das setzt allerdings voraus,<br />

dass der Anwender auch ein Schreibrecht<br />

auf diese Datei besitzt. Der Einsatz von<br />

Virenscannern oder Programmen wie<br />

»tripwire« ist bei solchen Starpacks allerdings<br />

nicht unproblematisch – sie können<br />

durchaus Fehlalarme provozieren.<br />

Fazit<br />

Tcl in Verbindung <strong>mit</strong> Tclkit eignet sich<br />

für die schnelle Erstellung kleinerer Tools,<br />

die gegebenenfalls auch auf unterschiedlichen<br />

Plattformen verfügbar sein sollen.<br />

Eine Beispielsammlung von Starkits findet<br />

sich unter [2]. Das Starkit »tclhttpd.<br />

kit« ist beispielsweise ein vollwertiger<br />

Webserver, der ohne Installationsaufwand<br />

<strong>und</strong> die Gefahr der Fehlkonfiguration<br />

HTTP-Seiten zur Verfügung stellt.<br />

Mit der oben gezeigten Methode lässt<br />

sich schnell aus dem Kit »tclhttpd.kit« ein<br />

einzelnes ausführbares Programm für die<br />

gewünschte Zielplattform erstellen. Dieses<br />

kann dann beispielsweise als Webserver<br />

für die Auslieferung einer »wpad.<br />

dat«-Datei zur automatischen Browserkonfiguration<br />

verwendet werden. (jcb)n<br />

Abbildung 3: Die Starpack-Verzeichnisstruktur <strong>mit</strong> eigenem Icon.<br />

Das vorgegebene<br />

Icon des ausführbaren<br />

Programms<br />

unter Windows<br />

lässt sich ändern,<br />

Infos<br />

[1] Starkit/​Starterkit-Dateien:<br />

[https:// code. google. com/ p/ tclkit]<br />

[2] Beispielsammlung Starkits:<br />

[http:// tcl. tk/ Starkits]<br />

120 Ausgabe 06-2012 Admin www.admin-magazin.de


Admin-MAGAZIN<br />

im Jahres-Abo<br />

Praktisch anwendbares Wissen <strong>und</strong> ausführliche<br />

Hintergr<strong>und</strong>berichte für alle IT-Administratoren<br />

von Linux, Unix <strong>und</strong> Windows.<br />

JETZT Zugreifen<br />

<strong>und</strong> über 15% Sparen!<br />

IHRE vorteile<br />

• 6 Ausgaben im Jahr Frei Haus<br />

• inklusive 6 <strong>ADMIN</strong>-Specials<br />

(unter anderem zu IPv6 <strong>und</strong> SSD)<br />

als PDF-Download im Wert von<br />

über 35 Euro<br />

sichern Sie Sich Ihr<br />

gratis Multitool!<br />

Jetzt abonnieren:<br />

www.admin-magazin.de/abo<br />

(Printabo 49,90 Euro, digitales Abo nur 44,90 Euro)<br />

• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de •


Programmieren<br />

Julia<br />

Eine neue Sprache für das Technical Computing<br />

Frauenpower<br />

Die Programmiersprache Julia beweist ihre Stärken vor allem bei der<br />

Parallelverarbeitung über mehrere Cores oder Cluster-Knoten hinweg.<br />

Einfach, schnell <strong>und</strong> parallel soll sie sein – was ist dran? Douglas Eadin<br />

In den frühen Tagen des Personalcomputers<br />

kauften oder bastelten sich viele<br />

einen PC, um die Computerei für sich<br />

selbst zu erk<strong>und</strong>en. Viele von ihnen hatten<br />

zwar Zugang zu einem Mainframe<br />

oder sogar einem Minicomputer, fanden<br />

es aber dennoch reizvoll, den Rechner<br />

für ihre privaten Versuche direkt neben<br />

sich stehen zu haben. Als einziger Nutzer<br />

<strong>und</strong> Besitzer konnten die PC-Pioniere<br />

erstmals alles kontrollieren <strong>und</strong> <strong>mit</strong> Hard<strong>und</strong><br />

Software spielen, ohne auf andere<br />

Rücksicht nehmen zu müssen.<br />

Typ Anwenderentwickler<br />

Aus diesem Herumspielen erwuchs<br />

schließlich eine ganze neue Industrie,<br />

wie manche meinen. Die relativ geringen<br />

Kosten erlaubten es jedem Neugierigen,<br />

die ersten PCs ganz nach den eigenen<br />

Bedürfnissen zu erk<strong>und</strong>en <strong>und</strong> in Beschlag<br />

zu nehmen. Dabei waren Programmierwerkzeuge<br />

zu Anfang rar, <strong>und</strong><br />

viele der ersten Benutzer programmierten<br />

Assembler oder tippten Maschinencode<br />

ein. Wenig später erschien Microsofts<br />

Basic auf der Bildfläche <strong>und</strong> wurde zu<br />

einer der ersten Hochsprachen des jungen<br />

PC. Sprachen wie C oder Fortran,<br />

die es früher nur auf größeren Systemen<br />

gab, folgten bald darauf. Die PC-Revolution<br />

brachte einen neuen Typ Entwickler<br />

hervor: Jemanden, der über Fachwissen<br />

auf einem Spezialgebiet verfügte <strong>und</strong><br />

einen programmierbaren PC zur Hand<br />

hat. Über Nacht entstanden so unzählige<br />

Applikationen. Manche wurde kommerziell<br />

sehr erfolgreich, andere eroberten<br />

eine Nische.<br />

HPC erk<strong>und</strong>en<br />

Wollte man diese Lektion auf die Welt<br />

des High Performance Computing (HPC)<br />

übertragen, dann könnte man fragen:<br />

„Aber wie soll man denn da<strong>mit</strong> herumspielen?“<br />

Die Antwort ist nicht einfach.<br />

Mit Blick auf die Hardware reichen ein<br />

paar PC, ein Ethernet-Switch <strong>und</strong> das<br />

MPI (Message Passing Interface) für einen<br />

kleinen Cluster. Oder man benutzt<br />

eine Grafikkarte <strong>und</strong> CUDA (die parallele<br />

Berechnungsarchitektur von NVIDIA) als<br />

einfache GPU-Hardware. Wie in der Jugendzeit<br />

des PC laden relativ geringe Kosten<br />

die Bastler zum Herumspielen ein.<br />

Aber wie sieht es auf der Softwareseite<br />

aus? Welche Software kann man als Experte<br />

in einem bestimmten Fachgebiet<br />

nutzen, um HPC-Methoden kennenzulernen?<br />

Viele der Kerntools der HPC-Welt sind<br />

für Experten anderer Gebiete zu speziell.<br />

Fortran, C/​C++, MPI oder CUDA zu lernen<br />

ist eine große Herausforderung. Alle<br />

diese Werkzeuge operieren nahe an der<br />

Hardware <strong>und</strong> erfordern einen großen<br />

Einarbeitungsaufwand. Deshalb greifen<br />

viele Experten lieber zu Sprachen wie Python,<br />

R oder MATLAB. Sie bewegen sich<br />

auf einer höheren Ebene näher am Problem<br />

des Anwenders <strong>und</strong> sind für ihn daher<br />

leichter zu benutzen. Allerdings sind<br />

die performanteren Sprachen wie C oder<br />

Fortran oft statisch kompiliert, wogegen<br />

die bequemeren auf dynamisches Kompilieren<br />

setzen, was das Herumspielen<br />

<strong>und</strong> die Interaktion <strong>mit</strong> Code-Fragmenten<br />

erlaubt. Die Sprachen auf höherem Level<br />

sind dafür wieder oft ausdrucksstärker<br />

<strong>und</strong> brauchen weniger Codezeilen.<br />

Ein anderer Aspekt, der alle Sprachen<br />

betrifft, ist die Parallelverarbeitung.<br />

Das Problem kam durch die Einführung<br />

der Multicore-Prozessoren in die Welt.<br />

Heute hat ein typischer Desktoprechner<br />

wenigstens vier Kerne. Dazu kommt die<br />

Einführung von Multicore-Servern, HPC-<br />

Clustern <strong>und</strong> dem GPU-Computing, was<br />

viele Low-Level-Programmiermodelle<br />

fragmentiert hat. Sprachen höherer<br />

Ordnung versuchen diese Probleme vor<br />

dem Anwender zu verbergen, was unterschiedlich<br />

gut gelingt – die Parallelverarbeitung<br />

bleibt ein Nachzügler.<br />

Bereits seit einer ganzen Weile fehlt eine<br />

Sprache für HPC-Experimente, in der ein<br />

Fachexperte (etwa ein Biologe) schnell<br />

<strong>und</strong> einfach ein Problem so formulieren<br />

könnte, dass er dabei moderne HPC-<br />

Hardware so einfach wie einen Desktop-<br />

PC einsetzen könnte. Eine solche Sprache,<br />

die den Nutzer nicht zwingt, sich<br />

<strong>mit</strong> den Details der darunter liegenden<br />

Hardware auseinanderzusetzen, wird gebraucht.<br />

(Auch wenn einige meinen, es<br />

hätte niemals Basic geben dürfen.)<br />

Julia ist nicht schüchtern<br />

In jüngster Zeit wurde viel über die neue<br />

Sprache Julia diskutiert, die sich als<br />

Werkzeug für Technisches Computing<br />

anbietet. Ihre Schöpfer rechtfertigen die<br />

Sprache so:<br />

„Wir wollten eine Sprache auf Open-<br />

Source-Gr<strong>und</strong>lage <strong>mit</strong> einer liberalen Lizenz.<br />

Wir wollten die Geschwindigkeit<br />

122 Ausgabe 06-2012 Admin www.admin-magazin.de


Julia<br />

Programmieren<br />

von C <strong>mit</strong> der Dynamik von Ruby. Wir<br />

wollten eine Sprache, die homoiconic sein<br />

sollte (also Code <strong>und</strong> Daten in derselben<br />

Weise repräsentiert), <strong>mit</strong> echten Makros<br />

wie in Lisp, aber <strong>mit</strong> einer eingängigen,<br />

vertrauten mathematischen Schreibweise<br />

wie in MATLAB. Wir wollten etwas, das<br />

für allgemeine Programmieraufgaben so<br />

nützlich sein sollte wie Python, so leicht<br />

<strong>mit</strong> Statistik umgehen kann wie R, für das<br />

Zeichenkettenverarbeitung so selbstverständlich<br />

ist wie für Perl, das in linearer<br />

Algebra so stark sein sollte wie MATLAB<br />

<strong>und</strong> das sich so gut zum Zusammenfügen<br />

von Programmen eignen sollte wie die<br />

Shell. Etwas, das man kinderleicht lernen<br />

kann <strong>und</strong> das doch die ernsthaftesten<br />

Hacker glücklich macht. Wir wollten das<br />

interaktiv <strong>und</strong> kompilierend. Wir wollten<br />

einfache skalare Schleifen schreiben<br />

können, die sich direkt in Maschinencode<br />

übersetzen <strong>und</strong> die CPU-Register nutzen.<br />

Gleichzeitig wollten wir »A * B« schreiben<br />

können <strong>und</strong> da<strong>mit</strong> Tausende Berechnungen<br />

anstoßen, die das Matrixprodukt<br />

bilden.“ [2]<br />

Julias Vorzüge<br />

Die Julia-Webseite [1] hat noch mehr Informationen<br />

über die Zielsetzung, aber<br />

schon der zitierte Absatz klingt, als gehe<br />

für HPC-Nutzer ein Traum in Erfüllung.<br />

Insbesondere, weil einige der Ziele seit<br />

Jahren auf der Wunschliste standen <strong>und</strong><br />

unerreichbar scheinen, bis man einen<br />

Blick auf die Benchmarks in Tabelle 1<br />

wirft. Da das „P“ in HPC ja für Performance<br />

steht, sollten die Ergebnisse dazu<br />

einladen, sich weiter <strong>mit</strong> Julia zu beschäftigen.<br />

Vielen High-Level-Sprachen<br />

wird unterstellt, weniger effizient als C<br />

oder Fortran zu sein. Die Tabelle beweist,<br />

dass das nicht so sein muss. Schon die<br />

Tabelle 1: Benchmark-Ergebnisse<br />

Julia<br />

v3f670da0<br />

Python<br />

v2.7.1<br />

Annäherung an die Geschwindigkeit der<br />

herkömmlichen, kompilierenden Sprachen<br />

kann man als Durchbruch für ein<br />

High-Level-HPC-Tool ansehen.<br />

Neben der Geschwindigkeit sollten weitere<br />

Julia-Features den Fachexperten gelegen<br />

sein.Die folgende kurze Liste ist eine<br />

Aufstellung der wichtigsten Vorzüge von<br />

Julia (eine vollständige Liste findet sich<br />

hier [3]):<br />

n Frei <strong>und</strong> Open Source (MIT-Lizenz).<br />

n Syntax wie bei MATLAB.<br />

n Entworfen für Parallelisierung <strong>und</strong><br />

verteiltes Rechnen (Multicore <strong>und</strong><br />

Cluster).<br />

n Direkter Aufruf von C-Funktionen<br />

(ohne Wrapper oder spezielle APIs)<br />

n Mächtige, Shell-ähnliche Fähigkeiten<br />

für die Verwaltung anderer Prozesse<br />

n Lisp-ähnliche Makros <strong>und</strong> andere<br />

Möglichkeiten der Metaprogrammierung.<br />

n Benutzerdefinierte Datentypen sind so<br />

kompakt <strong>und</strong> schnell wie eingebaute.<br />

n Just-in-Time-Compiler (JIT), der oft<br />

die Performance von C/​C++ erreicht.<br />

n Umfangreiche mathematische Funktionen<br />

<strong>und</strong> Bibliotheken (geschrieben<br />

in Julia)<br />

n Integration ausgereifter C- <strong>und</strong> Fortran-<br />

Bibliotheken für Lineare Algebra, Zufallszahlengeneratoren,<br />

FFTs <strong>und</strong> Zeichenkettenverarbeitung.<br />

Eine Fähigkeit, die alle Hochsprachen benötigen,<br />

ist die, existierende Bibliotheken<br />

aus anderen Quellen zusammenzufügen.<br />

Es existiert zu viel guter Code, als dass<br />

man ihn ignorieren oder neu erfinden<br />

sollte. Dank der Nutzung eines LLVM-<br />

Compilers kann Julia ohne Weiteres existierende<br />

Shared Libraries verwenden, die<br />

<strong>mit</strong> GCC oder Clang-Tools kompiliert wurden.<br />

Im Ergebnis verfügt Julia über eine<br />

MATLAB<br />

vR2011a<br />

Octave<br />

v3.4<br />

R<br />

v2.14.2<br />

JavaScript<br />

v8 3.6.6.11<br />

»fib« 1.97 31.47 1,336.37 2,383.80 225.23 1.55<br />

»parse_int« 1.44 16.50 815.19 6,454.50 337.52 2.17<br />

»quicksort« 1.49 55.84 132.71 3,127.50 713.77 4.11<br />

»mandel« 5.55 31.15 65.44 824.68 156.68 5.67<br />

»pi_sum« 0.74 18.03 1.08 328.33 164.69 0.75<br />

»rand_mat_stat« 3.37 39.34 11.64 54.54 22.07 8.12<br />

»rand_mat_mul« 1.00 1.18 0.70 1.65 8.64 41.79<br />

* Tests sind relativ zu C++ <strong>und</strong> liefen auf einem MacBook Pro <strong>mit</strong> 2.53GHz Intel Core 2 Duo CPU<br />

<strong>und</strong> 8GByte 1,066MHz DDR3 RAM (Quelle: Julia-Webseite).<br />

sehr performante Methode <strong>mit</strong> geringem<br />

Overhead, um bestehende Bibliotheken<br />

auszunutzen.<br />

Eine weiteres wichtiges Feature von Julia<br />

ist die native Parallelverarbeitung auf<br />

der Basis von zwei Pri<strong>mit</strong>iven: Remote<br />

References <strong>und</strong> Remote Calls. Hinter den<br />

Kulissen benutzt Julia Message Passing,<br />

zwingt den Benutzer aber im Unterschied<br />

zu MPI nicht dazu, die Umgebung explizit<br />

zu kontrollieren. Überhaupt ist Kommunikation<br />

in Julia immer einseitig, was<br />

heißt, dass der Programmierer sich in<br />

einer zweiseitigen Operation nur um eine<br />

Seite zu kümmern braucht. Julia unterstützt<br />

außerdem verteilte Arrays.<br />

Hands on<br />

Weil Julia neu ist, befinden sich einige<br />

Aspekte der Sprache noch in Entwicklung.<br />

Die sehr gute Dokumentation [6]<br />

ist einen Blick wert. Weil die Dinge noch<br />

im Fluss sind, empfiehlt es sich das jeweils<br />

aktuellste Release aus dem Netz zu<br />

beziehen. Im Moment unterstützt Julia<br />

n GNU/​LInux, x86, 64- <strong>und</strong> 32-Bit<br />

n Darwin OS/​X, x86, 64- <strong>und</strong> 32-Bit<br />

n FreeBSD, x86, 64- <strong>und</strong> 32-Bit<br />

Die folgenden Beispiele wurden auf einem<br />

Limulus-Cluster [7] <strong>mit</strong> einer Intel<br />

i5-2400S-CPU <strong>und</strong> 4 GByte RAM unter<br />

Scientific Linux 6.2 gerechnet. Wer Julia<br />

nicht kompilieren möchte, kann es online<br />

ausprobieren [8]. Wer eine eigene<br />

Version haben möchte, braucht ein Arbeitsverzeichnis<br />

<strong>mit</strong> mindestens 2 GByte<br />

freiem Plattenplatz. Dort gibt man ein:<br />

git clone U<br />

https://github.com/JuliaLang/julia.git<br />

Ist der Download beendet, hat man ein<br />

neues Julia-Directory. Anschließend<br />

wechselt der Anwender dort hinein <strong>und</strong><br />

gibt »make« ein – dann hat er Zeit für<br />

einen Kaffee oder eine R<strong>und</strong>e <strong>mit</strong> dem<br />

H<strong>und</strong>. Der Build dauert eine Weile, besorgt<br />

sich aber alle nötigen Pakete selbst.<br />

Ist alles durchgelaufen, sollte sich ein<br />

Julia-Binary im Arbeitsverzeichnis finden.<br />

Um Julia zu starten, genügt<br />

./julia<br />

Erscheint dann nicht der Titel aus Listing<br />

1 versucht man es <strong>mit</strong><br />

./julia ‐q<br />

E<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

123


Programmieren<br />

Julia<br />

01 $./julia<br />

Am besten baut man den Pfad zur ausführbaren<br />

Datei nun in seine PATH-Variable<br />

ein.<br />

Wie bei vielen interaktiven Tools kann<br />

man jetzt Ausdrücke eingeben wie:<br />

julia> sqrt(2*7)+(6/4)<br />

5.241657386773941<br />

Wie oben schon erwähnt sind sowohl<br />

eine User Manual wie auch Library-Referenz<br />

online abrufbar <strong>und</strong> helfen bei<br />

der Erk<strong>und</strong>ung von Julia. Weil Julia auf<br />

HPC-Umgebungen ausgerichtet ist <strong>und</strong><br />

Parallelverarbeitung dort eine große Rolle<br />

spielt, ist das auch ein integraler Teil von<br />

Julia.<br />

Eintauchen in Julia<br />

Hochspachen, die die Komplexität von<br />

MPI verbergen, erleichtern den Umgang<br />

<strong>mit</strong> Parallelverarbeitung. Das hat jedoch<br />

seinen Preis in Form einer verminderten<br />

Effizienz. Dieser Preis scheint oft gerechtfertigt,<br />

weil der Bequemlichkeitsvorteil<br />

den Effizienznachteil aufwiegt, aber das<br />

MPI hat nach wie vor seine Berechtigung.<br />

Wie im Julia-Manual beschrieben bietet<br />

Julia eine einfaches, einseitiges Messaging-Modell:<br />

„Julias Implementierung des<br />

Message Passing unterscheidet sich von<br />

der anderer Umgebungen wie etwa MPI.<br />

Die Kommunikation in Julia ist generell<br />

einseitig, was heißt, dass Julia nur <strong>mit</strong><br />

einem Prozessor in einer Zwei-Prozessor-Operation<br />

umgehen muss. Darüber<br />

hinaus handelt es sich bei diesen Operationen<br />

typischerweise nicht um Dinge wie<br />

'Nachricht verschicken' <strong>und</strong> 'Nachricht<br />

empfangen', sondern sie ähneln eher<br />

dem Aufruf von Benutzerfunktionen.“<br />

Die Autoren heben außerdem hervor,<br />

dass Julia zwei eingebaute Pri<strong>mit</strong>ive enthält:<br />

„… Remote References <strong>und</strong> Remote<br />

Listing 1: Julia Header beim Startup<br />

02 _<br />

03 _ _ _(_)_ |<br />

04 (_) | (_) (_) |<br />

Calls. Eine Remote Reference ist dabei<br />

ein Objekt, dass von jedem Prozessor<br />

genutzt werden kann, um auf ein Objekt<br />

zu verweisen, dass ein bestimmter<br />

Prozessor speichert. Eine Remote Call ist<br />

eine Anforderung eines Prozessors, eine<br />

Funktion <strong>mit</strong> bestimmten Argumenten<br />

auf einem anderen (oder demselben) Prozessor<br />

auszuführen.“<br />

Dynamisch erweitern<br />

Für die folgenden Beispiele wird Julia<br />

nun auf einer Multicore-Maschine <strong>mit</strong><br />

zwei Prozessoren gestartet:<br />

julia ‐q ‐p2<br />

05 _ _ _| |_ __ _ | A fresh approach to technical computing<br />

06 | | | | | | |/ _` | |<br />

07 | | |_| | | | (_| | | Version 0.0.0+86921303.rc6cb<br />

08 _/ |\__'_|_|_|\__'_| | Com<strong>mit</strong> c6cbcd11c8 (2012‐05‐25 00:27:29)<br />

09 |__/ |<br />

10 julia><br />

Das dynamische Hinzufügen weiterer<br />

Cores wird im nächsten Abschnitt beschrieben,<br />

im Moment sollen nur zwei<br />

Cores benutzt werden. Es ist außerdem<br />

sinnvoll, die Anzahl Cores nicht zu überzeichnen<br />

(das »‐p«-Argument soll also<br />

nicht die Anzahl Cores in der Maschine<br />

übersteigen).Das Beispiel benutzt einen<br />

»remote_call«, um zwei Zahlen auf einem<br />

andren Prozessor zu addieren. Danach<br />

wird das Resultat abgeholt. Man könnte<br />

genauso wieder einen Remote Call benutzen,<br />

um <strong>mit</strong> dem Ergebnis weiterzurechnen.<br />

julia> r = remote_call(2,+,2,2)<br />

RemoteRef(2,1,1)<br />

julia> fetch(r)<br />

4<br />

julia> s = remote_call(2,+,1,r)<br />

RemoteRef(2,1,2)<br />

julia>fetch(s)<br />

5<br />

Remote Calls kehren un<strong>mit</strong>telbar zurück<br />

<strong>und</strong> warten nicht auf die Beendigung des<br />

Task. Der Prozessor, der den Call absetzte,<br />

fährt <strong>mit</strong> seiner nächsten Operation fort,<br />

während der Call irgendwo anders abgearbeitet<br />

wird. ein »fetch()« wartet allerdings<br />

bis das Resultat<br />

verfügbar ist.<br />

Alternativ kann man<br />

auf die Beendigung<br />

eines Remote Calls<br />

warten, indem man<br />

ein »wait()« <strong>mit</strong> der<br />

Remote Reference<br />

absetzt.<br />

Das eben gezeigte<br />

Beispiel ist durch<br />

den Zwang, die Prozessornummern<br />

explizit anzugeben,<br />

nicht besonders portabel. Die meisten<br />

Programmierer benutzen deshalb ein<br />

Julia-Makro namens »spawn«, das diese<br />

Abhängigkeit eliminiert. Zum Beispiel:<br />

julia> r= @spawn 7‐1<br />

RemoteRef(2,1,7)<br />

julia> fetch(r)<br />

6<br />

Auch das Makro »@parallel« ist in Schleifen<br />

sehr nützlich. Weil Julia interaktiv<br />

ist, muss man sich ins Gedächtnis rufen,<br />

dass auf der Kommandozeile eingegebene<br />

Funktionen nicht automatisch entfernten<br />

Cores zur Verfügung stehen (auf<br />

dem lokalen oder einem entfernten Knoten).<br />

Um Funktionen auf allen Cores zu<br />

verwenden muss man »load()« benutzen.<br />

Diese Funktion lädt Julia-Programme automatisch<br />

auf alle Cores, die <strong>mit</strong> einer<br />

Julia-Instanz assoziiert sind. Alternativ<br />

liest Julia das File »startup.jl« im Homedirectory,<br />

wenn es existiert.<br />

Alle Cores aufrufen<br />

Julia kann Cores der lokalen Maschine<br />

oder von entfernten Maschinen (das sind<br />

immer Cluster-Nodes) nutzen. Wie das<br />

geht, wird im Folgenden demonstriert.<br />

Zuerst startet man die Julia-Instanz <strong>mit</strong><br />

einem Core. Die »nprocs()«-Funktion<br />

zeigt die Anzahl verfügbarer Cores der<br />

aktuellen Instanz an:<br />

$ julia ‐q<br />

julia>nprocs()<br />

1<br />

Möchte man nun weitere lokale Cores<br />

hinzufügen, bietet sich die Funktion<br />

»addprocs_local()« an, wie Listing 2<br />

zeigt. In diesem Beispiel wurde ein Core<br />

hinzugefügt <strong>und</strong> nprocs() zeigt daraufhin<br />

zwei Cores an.<br />

julia>nprocs()<br />

2<br />

Remote Cores (solche von anderen<br />

Maschinen) lassen sich auf zweierlei<br />

Weise hinzufügen. Einmal <strong>mit</strong>hilfe der<br />

»addprocs_ssh«-Funktion. Ein Beispiel<br />

zeigt Listing 3, das je einen Core von<br />

den Knoten n0 <strong>und</strong> n2 einbindet. Die<br />

Voraussetzung dafür ist allerdings, dass<br />

Julia auf allen Nodes an derselben Stelle<br />

installiert oder über ein Shared Filesys-<br />

124 Ausgabe 06-2012 Admin www.admin-magazin.de


Julia<br />

Programmieren<br />

tem erreichbar ist. Außerdem muss die<br />

PATH-Variable auf den entfernten Knoten<br />

das Verzeichnis des Julia-Binaries enthalten.<br />

Die Anzahl der Prozessoren hat sich<br />

jetzt auf vier erhöht.<br />

Um zu überprüfen, ob die entfernten<br />

Cores tatsächlich einbezogen werden,<br />

kann man eine einfache parallel Schleife<br />

<strong>mit</strong>hilfe des »@parallel«-Makros ausführen.<br />

julia> @parallel for i=1:4<br />

run(`hostname`)<br />

end<br />

julia>limulus<br />

limulus<br />

n2<br />

n0<br />

Julia verwendet hier alle verfügbaren<br />

Cores <strong>und</strong> die Hostnamen zeigen, dass<br />

es sich um zwei lokale <strong>und</strong> zwei entfernte<br />

Cores handelt (die lokale Maschine<br />

heißt limulus). Die Knoten werden in<br />

Ro<strong>und</strong>-Robin-Manier benutzt. Wenn sich<br />

Die Schleife braucht <strong>mit</strong> einem Core 11,23<br />

Sek<strong>und</strong>en. Lässt man nun genau die gleiche<br />

Schleife laufen, benutzt aber zwei<br />

lokale <strong>und</strong> 2 entfernte Cores, braucht sie<br />

5,67 Sek<strong>und</strong>en. Verwendet man schließder<br />

Endwert der Schleife erhöht, benutzt<br />

Julia die verfügbaren Cores reihum:<br />

julia> @parallel for i=1:8<br />

run(`hostname`)<br />

end<br />

julia>limulus<br />

limulus<br />

limulus<br />

limulus<br />

n2<br />

n0<br />

n2<br />

n0<br />

Ein Beispiel aus der Julia Dokumentation<br />

[9] ver<strong>mit</strong>telt ein besseres Gefühl<br />

für die Parallelverarbeitung. Zuerst sollte<br />

man sich ansehen, wie es <strong>mit</strong> einem Core<br />

funktioniert. Das folgende Programm<br />

generiert Zufallsbits (»0« oder »1«) <strong>und</strong><br />

01 julia> addprocs_local(1)<br />

summiert sie auf. Die »tic()«-funktion<br />

startet dabei einen Timer <strong>und</strong> »toc()« gibt<br />

das Ergebnis aus.<br />

julia>tic();<br />

nheads = @parallel (+) for i=1:1000000000<br />

randbit()end;<br />

s=toc();<br />

println("Number of Heads: U<br />

$nheads in $s seconds")<br />

elapsed time: 11.234276056289673 seconds<br />

Numberof Heads: U<br />

50003873 in 11.234276056289673 seconds<br />

Listing 2: »addprocs«<br />

02 ProcessGroup(1,{LocalProcess(), Worker("10.0.0.1",9009,4,IOStream(),IOStream(),{},<br />

03 {},2,false)},{Location("",0), Location("10.0.0.1",9009)},2,{(1,0)=>WorkItem(bottom_func,(),false,<br />

04 (addprocs_local(1),1),(),(),intset(1))})<br />

Immer aktuell informiert!<br />

Windows<br />

Phone User<br />

www.windows-phone-user.de/newsletter<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

125


Programmieren<br />

Julia<br />

lich vier lokale Cores, kommt man auf<br />

3,71 Sek<strong>und</strong>en.<br />

Parallelarbeit<br />

Schon aus der Geschwindigkeit lässt sich<br />

ablesen, dass Julia die Aufgabe parallel<br />

abgearbeitet hat (alternativ kann man<br />

sich die Worker-Prozesse auch <strong>mit</strong> »top«<br />

ansehen). Zu beachten ist, dass diese einfache<br />

Schleife keine Informationen über<br />

Anzahl oder Ort der Cores brauchte. Das<br />

ist ein sehr mächtiges Feature, weil man<br />

da<strong>mit</strong> eine Applikation zunächst auf einer<br />

kleinen Anzahl Cores laufen lassen<br />

kann, die sich später vergrößern lässt.<br />

Obwohl diese Methode nicht immer für<br />

Effizienz garantiert, ist es doch immer<br />

hilfreich, wenn der Programmierer von<br />

der Buchführung bei der Parallelarbeit<br />

entlastet wird. Viele andere nützliche<br />

Funktionen sind eine Untersuchung wert,<br />

etwa »myid()«, die eine eindeutige Prozessornummer<br />

zurückgibt, die der Identifizierung<br />

dient.<br />

Der zweite Weg Cores hinzuzufügen<br />

benützt die Grid Engine [10] <strong>und</strong> die<br />

Funktion »addprocs_sge()«. Andere Scheduler<br />

wie Torque werden in der Zukunft<br />

wohl auch unterstützt. Das unscheinbare<br />

Feature erlaubt es, Programmen unter<br />

Einbeziehung des gesamten Clusters zu<br />

skalieren. Da<strong>mit</strong> lassen sich Programme<br />

konstruieren, die sich dynamisch <strong>und</strong><br />

selbstständig die benötigten Ressourcen<br />

zusammensuchen.<br />

So könnte eine Applikation auf dem Notebook<br />

eines Benutzers laufen, aber Cores<br />

eines Clusters anfordern. Kann sie nicht<br />

bedient werden, könnte sie sich selbst<br />

beenden oder aber warten, bis die Ressourcen<br />

verfügbar sind. Einige Features<br />

Listing 3: Nodes hinzufügen<br />

01 julia> addprocs_ssh({"n0","n2"})<br />

der selbst in Julia geschriebene Parallel<br />

Computing-Komponente, etwa das Entfernen<br />

nicht mehr benötigter Cores oder<br />

ein besseres Recovery, sind derzeit noch<br />

in Entwicklung.<br />

Ein anderes interessantes Szenario ist<br />

eine HPC-Workstation, bei der der Anwender<br />

oder ein Scheduler automatisch<br />

Cores freischaltet, sobald sie gebraucht<br />

werden. Das Julia-Programm könnte sich<br />

da<strong>mit</strong> selbst verwalten <strong>und</strong> selbstständig<br />

Ressourcen anfordern, sobald sie nötig<br />

sind. Der Anwender muss dabei niemals<br />

über Nodes oder Batch Queues nachdenken,<br />

sondern kann sich ganz auf das<br />

Problem konzentrieren, das er lösen will,<br />

statt auf die Details der Parallelverarbeitung.<br />

Teile <strong>und</strong> herrsche<br />

Den Nutzer von der Verantwortung für<br />

das Managen der Kommunikation <strong>und</strong><br />

Synchronisation zu entbinden, hat viele<br />

Vorteile. Wie die Arbeit dabei genau<br />

verteilt wird, ist dabei für den Anwender<br />

transparent. Julia startet viele parallele<br />

Berechnungen als Task oder Co-<br />

Routinen. Immer, wenn der Code eine<br />

Kommunikationsroutine wie »fetch()«<br />

oder »wait()« erfordert, suspendiert der<br />

Scheduler zunächst die aktuelle Task<br />

<strong>und</strong> lässt eine andere laufen. Wenn der<br />

Wait-Event beendet ist (weil beispielsweise<br />

die Daten berechnet sind) wird die<br />

suspendierte Task anschließend wieder<br />

aufgenommen.<br />

Dieses Design hat den großen Vorteil,<br />

dass sich der Nutzer nicht explizit um die<br />

Synchronisation kümmern muss. Zusätzlich<br />

erlaubt dieses dynamische Scheduling<br />

die recht einfache Implementierung<br />

02 ProcessGroup(1,{LocalProcess(), Worker("10.0.0.1",9009,4,IOStream(),IOStream(),{},<br />

03 {},2,false) ... },{Location("",0), Location("10.0.0.1",9009) ... Location("10.0.0.12",9009)},4,<br />

04 {(1,0)=>WorkItem(bottom_func,(),false,(thunk(AST(lambda({},{{#1, #2}, {{#1, Any, 2}, {#2, Any, 2}}, {}},<br />

05 begin<br />

06 #1 = top(Array)(top(Any),2)<br />

07 top(arrayset)(#1,1,"n0")<br />

08 top(arrayset)(#1,2,"n2")<br />

09 #2 = #1<br />

10 return addprocs_ssh(#2)<br />

11 end<br />

12 ))),1),(),(),intset(1))})<br />

13 julia> nprocs()<br />

14 4<br />

von Master/​Worker-Umgebungen nach<br />

dem Schema "Teile <strong>und</strong> herrsche".<br />

In Entwicklung<br />

Obwohl Julia eine vielversprechende<br />

Sprache für das technische Computing<br />

ist, ist sie noch sehr jung <strong>und</strong> unterliegt<br />

vielen Veränderungen Aus diesem<br />

Gr<strong>und</strong> ist Julia zum jetzigen Zeitpunkt<br />

noch nicht für den harten Produktiveinsatz<br />

geeignet, wohl aber zur spielerischen<br />

Auseinandersetzung auf so gut<br />

wie jedem Desktop-PC. Es sind sowohl<br />

Source- wie Binary-Pakete <strong>mit</strong> Hinweisen<br />

für die Installation auf [5] verfügbar.<br />

Dieser Beitrag konnte nur einen kleinen<br />

Einblick in Julias Fähigkeiten zur Parallelverarbeitung<br />

geben, aber hoffentlich<br />

schon ein Gefühl für die Leistungsstärke<br />

von Julias Parallelverarbeitungsmodell<br />

ver<strong>mit</strong>teln.<br />

Schließlich soll Julia nicht herabgemindert<br />

werden, wenn es manchmal als<br />

„Bastlersprache“ bezeichnet wird. Es ist<br />

gerade ein großer Vorteil von Julia, dass<br />

die Hürden für erste Versuche niedrig liegen.<br />

Wer <strong>mit</strong> MATLAB vertraut ist, wird<br />

einen einfachen Zugang finden.<br />

Das Nette am Basteln ist, man kann einfache<br />

Dinge schnell probieren, Ideen testen,<br />

<strong>und</strong> nach kurzer Zeit einen Prototyp<br />

fertig haben. Das dieser Prototyp dann so<br />

schnell läuft wie in „richtigem“ Code ist<br />

ein willkommener Vorteil. (jcb) n<br />

Infos<br />

[1] Julia: [http:// julialang. org/]<br />

[2] Der Julia Blog: [http:// julialang. org/ blog/​<br />

2012/ 02/ why‐we‐created‐julia/]<br />

[3] Julia manual:<br />

[http:// julialang. org/ manual/]<br />

[4] LLVM: [http:// en. wikipedia. org/ wiki/​<br />

Low_Level_Virtual_Machine]<br />

[5] Julia Download: [https:// github. com/​<br />

JuliaLang/ julia# readme]<br />

[6] Julia Dokumentation:<br />

[http:// docs. julialang. org/ en/ latest/]<br />

[7] Limulus: [http:// limulus.​<br />

basement‐supercomputing. com/]<br />

[8] Julia Online Test: [http:// julia. forio. com/]<br />

[9] Parallel-Programmier-Beispiel: [http://​<br />

docs. julialang. org/ en/ latest/ manual/​<br />

parallel‐computing/]<br />

[10] Grid Engine:<br />

[http:// gridscheduler. sourceforge. net/]<br />

126 Ausgabe 06-2012 Admin www.admin-magazin.de


2 Ausgaben<br />

für nur 5,90 €<br />

50% sparen <strong>und</strong> von Anfang an dabei sein!<br />

Windows Phone User erscheint alle zwei Monate<br />

NEU!<br />

Erstausgabe!<br />

TESTANGEBOT:<br />

2 AUSGABEN<br />

für nur 5,90 Euro!<br />

Jetzt bestellen unter:<br />

windows-phone-user.de/miniabo


Programmieren<br />

Paramiko<br />

von Pycrypt, am besten als Binärpaket<br />

von [6], voraus.<br />

Im einfachsten Fäll lässt sich Paramiko<br />

zum Einloggen auf einem Rechner <strong>mit</strong><br />

nur wenigen Zeilen einsetzen. Nach dem<br />

obligatorischen Importieren des Modules<br />

erzeugt die Methode »SSHClient« ein<br />

neues Client-Objekt, das <strong>mit</strong> der Methode<br />

»connect()« die Verbindung herstellt:<br />

import paramiko<br />

ssh = paramiko.SSHClient()<br />

ssh.connect(Host, username=Username, U<br />

password=Passwort)<br />

© dimjul, 123RF<br />

Paramiko öffnet SSH-Verbindungen<br />

Abhörsicher<br />

Im Python-Universum finden sich nützliche Module für jeden Zweck.<br />

Mit dem Paramiko-Modul können Python-Programmierer <strong>und</strong> Administratoren<br />

per SSH auf entfernten Rechnern Kommandos ausführen <strong>und</strong> sicher<br />

Dateien übertragen. Oliver Frommel<br />

Typischerweise funktioniert das aber<br />

nicht, sondern erzeugt eine »SSHException«.<br />

Der Gr<strong>und</strong> dafür ist, dass Paramiko<br />

wie der Standard-SSH-Client den Host-<br />

Key des entfernten Rechners prüft. Weil<br />

das Modul aber ohne Weiteres keinen<br />

Zugang zu den gespeicherten Host-Keys<br />

hat, schlägt der Verbindungsversuch fehl.<br />

Ein einfacher Workaro<strong>und</strong> besteht darin,<br />

Paramiko bislang unbekannte Host-Keys<br />

umstandslos eintragen zu lassen.<br />

ssh.set_missing_host_key_policy(<br />

paramiko.AutoAddPolicy())<br />

Dies ist natürlich aber nicht im Sinn des<br />

Erfinders <strong>und</strong> tendenziell unsicher, sollte<br />

also nur bei Tests in sicheren Netzen<br />

verwendet werden. Der korrekte Weg besteht<br />

darin, Paramiko die Host-Keys laden<br />

zu lassen, auf dass es sie wie gedacht<br />

prüfen kann. Dazu dient die Funktion<br />

»load_host_keys()«:<br />

Seit die Secure Shell (SSH) vor vielen<br />

Jahren einmal Telnet abgelöst hat, kommt<br />

kein Administrator mehr ohne sie aus.<br />

Um sich in Python-Skripts per SSH <strong>mit</strong><br />

anderen Rechnern zu verbinden <strong>und</strong> dort<br />

Befehle auszuführen, gibt es eine Reihe<br />

von Lösungen [1]. Die bewährteste von<br />

ihnen ist das Paramiko-Modul, das dieser<br />

Artikel näher vorstellt [2].<br />

Ursprünglich wurde Paramiko von Robey<br />

Pointer geschrieben, der unter anderem<br />

bei Twitter gearbeitet <strong>und</strong> dort<br />

Open-Source-Software in Scala unter einer<br />

freien Lizenz veröffentlicht hat [3].<br />

Ein Python-Modul <strong>mit</strong> dem Namen „ssh“<br />

firmierte als Fork von Paramiko einige<br />

Zeit als dessen Nachfolger. Mittlerweile<br />

sind die beiden Projekte aber unter dem<br />

Originalnamen vereint, <strong>und</strong> Jeff Forcier<br />

hat die Leitung der Entwicklung übernommen.<br />

Der aktuellste Code findet sich<br />

deshalb auf [4] <strong>und</strong> Forciers Github-Seite<br />

[5], die ausführliche API-Dokumentation<br />

aber immer noch unter [2].<br />

Überall zu Hause<br />

Empfohlen wird für die aktuelleste Paramiko-Version<br />

(derzeit 1.8.0) die Python-<br />

Distribution 2.3 oder neuer, der Support<br />

für Python 3 ist noch in Arbeit. Viele<br />

Linux-Distributionen bringen zumindest<br />

ältere Versionen von Paramiko schon <strong>mit</strong>,<br />

ebenso wie etwa FreeBSD.<br />

Aus dem entpackten Tar-Archiv lässt sich<br />

Paramiko als Root systemweit <strong>mit</strong> dem<br />

Befehl »easy_install ./« installieren. Auch<br />

eine Installation auf Windows-Betriebssystemen<br />

ist möglich, sie setzt jedoch<br />

neben Python die vorherige Installation<br />

client.load_host_keys(os.path.expanduserU<br />

('~/.ssh/known_hosts'))<br />

Setzt man diese Zeile im obigen Beispiel<br />

vor den Connect-Aufruf, dürfte die Verbindung<br />

klappen. Manche Administratoren<br />

haben aber aus Sicherheitsgründen<br />

auch das SSH-Login per Username <strong>und</strong><br />

Passwort abgeschaltet <strong>und</strong> erlauben lediglich<br />

die Authentifizierung per Public<br />

Key. Wenn der Anwender zur Verwaltung<br />

der Private Keys einen SSH-Agent<br />

verwendet, macht Paramiko davon Gebrauch.<br />

Hat er die Passphrase bisher<br />

noch nicht eingegeben, öffnet sich auf<br />

Desktop- Linux-Systemen ein Dialog der<br />

zur Eingabe auffordert.<br />

Als Parameter muss »client.connect()«<br />

dann nur der »username« übergeben<br />

werden. Hat man einen sogenannten<br />

Channel für die SSH-Verbindung, lassen<br />

128 Ausgabe 06-2012 Admin www.admin-magazin.de


Paramiko<br />

Programmieren<br />

sich <strong>mit</strong> »exec_command()« auf dem entfernten<br />

Rechner Befehle ausführen. Der<br />

Aufruf gibt jeweils einen Dateideskriptor<br />

für die Standardeingabe, die Standardausgabe<br />

<strong>und</strong> die Fehlerausgabe zurück.<br />

Listing 1 zeigt dafür ein Beispiel, das die<br />

Prozesstabelle auf dem entfernten Rechner<br />

ausgibt.<br />

Wer das Default-Verhalten, den Agent zu<br />

verwenden, abschalten will, kann der<br />

Methode »allow_agent=False« übergeben.<br />

Wer den SSH-Agent nicht verwenden<br />

kann oder will, muss sich anders behelfen.<br />

Paramiko bietet an, den zum Public<br />

Key (der auf dem Server liegt) passenden<br />

Private Key selbst zu laden. Dies geht<br />

einfach <strong>mit</strong> der Funktion<br />

pkey = paramiko.RSAKey.from_private_keyU<br />

(pkey_file)<br />

Es funktioniert aber nur, wenn der Private<br />

Key nicht <strong>mit</strong> einer Passphrase geschützt<br />

ist. Ist er dies aber, wie etwa dieser Key,<br />

more ~/.ssh/id_rsa<br />

‐‐‐‐‐BEGIN RSA PRIVATE KEY‐‐‐‐‐<br />

Proc‐Type: 4,ENCRYPTED<br />

muss man der obigen Methode die Passphrase<br />

als zweites Argument übergeben.<br />

Der Code in Abbildung 1 zeigt, wie man<br />

die Passphrase von der Standardeingabe<br />

liest <strong>und</strong> den Private Key da<strong>mit</strong> entschlüsselt,<br />

bevor man ihn an die Connect-<br />

Methode übergibt. Dabei darf man nicht<br />

vergessen, das die Eingabe abschließende<br />

Linefeed-Zeichen zu entfernen, sonst<br />

schlägt die Dekodierung fehl.<br />

Neben solchen SSH-Sessions deckt Paramiko<br />

auch die Datenübertragung per<br />

SFTP ab. Um eine entsprechende Verbindung<br />

zu öffnen, genügt es, die Methode<br />

»open_sftp()« des Paramiko-Clients aufzurufen,<br />

was wiederum ein SFTP-Objekt<br />

zurückliefert. Dieses Objekt bietet eine<br />

ganze Reihe von Methoden, die Shell-<br />

Befehlen oder den bekannten Kommandos<br />

in FTP-Clients ähneln. So wechselt<br />

»chdir()« in ein anderes Verzeichnis <strong>und</strong><br />

»listdir()« gibt den Inhalt eines Verzeichnisses<br />

aus.<br />

Es lassen sich aber auch Verzeichnisse<br />

anlegen, löschen <strong>und</strong> umbenennen. Dies<br />

übernehmen die Methoden »mkdir()«,<br />

»rmdir()« <strong>und</strong> »rename()«. Eine Datei<br />

löscht ein Aufruf von »remove()« oder<br />

»unlink()«.<br />

Auch für das Ändern des Dateieigentümers<br />

<strong>und</strong> der Zugriffsrechte bietet der<br />

SFTP-Client passende Methoden. Dies<br />

sind wie in der Shell »chown()« <strong>und</strong><br />

»chmod()«. Die beiden Methoden »get()«<br />

<strong>und</strong> »put()« holen eine Datei vom Server<br />

respektive speichern sie dort.<br />

Schließlich lässt sich eine Datei auch direkt<br />

auf dem Server anlegen, wenn man<br />

»file()« verwendet. So können Python-<br />

Skripts umstandslos Dateien auf dem<br />

Server speichern, ohne vorher lokal eine<br />

temporäre Kopie davon anzulegen. Eine<br />

vollständige Liste aller Funktionen findet<br />

sich in der API-Dokumentation des<br />

»SFTPClient«-Objekts unter [2].<br />

Einfacher<br />

Wem dies alles noch zu viel Aufwand ist,<br />

der sollte einen Blick auf den Paramiko-<br />

Wrapper eines Python-Anwenders verwenden,<br />

der sich online nur unter seinem<br />

Vornamen Zeth auftritt [7]. Mit seinem<br />

Modul gestaltet sich die Benutzung von<br />

SSH <strong>und</strong> SFTP per Python noch einmal<br />

einfacher:<br />

Abbildung 1: Paramiko verwendet die Keys des SSH-Agents, kann aber den Private Key auch selbst dekodieren.<br />

import ssh<br />

s = ssh.Connection('my.server.de')<br />

s.put('up.txt')<br />

s.get('down.txt')<br />

s.execute('du ‐h .')<br />

Der Wrapper ist natürlich nicht so gut<br />

getestet wie Paramiko selbst, <strong>und</strong> man<br />

hat weniger Kontrolle darüber, was hinter<br />

den Kulissen passiert.<br />

Obligatorisch<br />

Wer <strong>mit</strong> Python-Skripts per SSH auf andere<br />

Rechner zugreifen, dabei Kommandos<br />

ausführen oder Dateien übertragen<br />

will, kommt an Paramiko kaum vorbei.<br />

Das Modul hat eine lange Geschichte,<br />

viele Anwender <strong>und</strong> ist entsprechend<br />

gut getestet. Es arbeitet <strong>mit</strong> SSH-Agents<br />

zusammen, bietet auf Wunsch eigenes<br />

Key-Handling <strong>und</strong> ist im Detail konfigurierbar.<br />

Seit es Ende September 2012<br />

einen neuen Maintainer gef<strong>und</strong>en hat, ist<br />

nun auch seine Zukunft gesichert. n<br />

Infos<br />

[1] Python Info Wiki, Secure Shell: [http:// wiki.​<br />

python. org/ moin/ SecureShell]<br />

[2] Paramiko: [http:// www. lag. net/ paramiko/]<br />

[3] Homepage von Robey Pointer: [http://​<br />

robey. lag. net]<br />

[4] Python Package Index: Paramiko: [http://​<br />

pypi. python. org/ pypi/ paramiko/]<br />

[5] Github-Seite: [https:// github. com/​<br />

paramiko/ paramiko]<br />

[6] Pycrypto-Binaries für Windows: [http://​<br />

www. voidspace. org. uk/ python/ modules.​<br />

shtml# pycrypto]<br />

[7] Wrapper: [http:// zeth. net/ post/ 332/]<br />

Listing 1: Prozesstabelle anzeigen<br />

01 import os<br />

02 import sys<br />

03 import paramiko<br />

04 <br />

05 hostkeytype = None<br />

06 hostkey = None<br />

07 hostname = "server.domain.net"<br />

08 <br />

09 client = paramiko.SSHClient()<br />

10 client.load_host_keys(os.path.expanduser('~/.ssh/<br />

known_hosts'))<br />

11 client.connect(hostname, username="ofrommel")<br />

12 stdin, stdout, stderr = client.exec_command('ps ‐a')<br />

13 for line in stdout:<br />

14 print line.strip('\n')<br />

15 client.close()<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

129


Service<br />

Impressum <strong>und</strong> <strong>Vorschau</strong><br />

Impressum ISSN 2190-1066<br />

<strong>ADMIN</strong>-<strong>Magazin</strong> eine Publikation der Medialinx 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@medialinx-gruppe.de<br />

Hermann Plank (Vorstand), hplank@medialinx-gruppe.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@medialinx-gruppe.de (uba)<br />

Mathias Huber, mhuber@medialinx-gruppe.de (mhu)<br />

Software/Test<br />

Marcel Hilzinger, mhilzinger@medialinx-gruppe.de, (mhi)<br />

Kristian Kißling, kkissling@medialinx-gruppe.de, (kki)<br />

Security/Networking Markus Feilner, mfeilner@medialinx-gruppe.de (mfe)<br />

Thomas Leichtenstern, tleichtenstern@medialinx-gruppe.de (tle)<br />

Ständige Mitarbeiter Elke Knitter (Schlussredaktion),<br />

Carsten Schnober, Tim Schürmann, Claudia Thalgott<br />

Produktionsleitung Christian Ullrich, cullrich@medialinx-gruppe.de<br />

Grafik<br />

Klaus Rehfeld, Judith Erb<br />

Titel: Judith Erb, Ausgangsgrafik: Sascha Burkard, 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 <strong>mit</strong> einem Jahresabo Print oder Digital<br />

2<br />

<strong>mit</strong> Linux-<strong>Magazin</strong>-Abo <strong>und</strong> beiden Jahres-DVDs<br />

Schüler- <strong>und</strong> Studentenermäßigung: 20 Prozent gegen 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 <strong>mit</strong>teilen, da Nachsendeaufträge bei der Post nicht für Zeitschriften gelten.<br />

Presse<strong>mit</strong>teilungen info@admin-magazin.de<br />

Anzeigen/Repräsentanz<br />

Es gilt die Anzeigenpreisliste vom 01.01.2012<br />

National<br />

Petra Jaser<br />

Tel.: 089/99 34 11 24, Fax: 089/99 34 11 99<br />

E-Mail: pjaser@medialinx-gruppe.de<br />

michael Seiter<br />

Tel.: 089/99 34 11 23, Fax: 089/99 34 11 99<br />

E-Mail: mseiter@medialinx-gruppe.de<br />

Pressevertrieb MZV, Moderner Zeitschriften Vertrieb GmbH<br />

Breslauer Straße 5, 85386 Eching<br />

Tel.: 089/31906-0, Fax: 089/31906-113<br />

Druck<br />

Vogel Druck <strong>und</strong> 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 <strong>und</strong> wird in unserem Markennamen <strong>mit</strong> 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- <strong>und</strong> 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 Medialinx AG<br />

Inserentenverzeichnis<br />

1&1 Internet AG http://​www.eins<strong>und</strong>eins.de 8<br />

<strong>ADMIN</strong> http://​www.admin-magazin.de 70, 117, 121<br />

Android User GY http://​www.android-user.de 75<br />

C&L Computer- u.<br />

Literaturverlag GmbH http://​www.cul.de 77<br />

DATSEC Data Security e.K. http://​www.datsec.de 33<br />

Deutsche Messe AG http://​www.cebit.de 113<br />

Fernschule Weber GmbH http://​www.fernschule-weber.de 19<br />

Galileo Press http://​www.galileo-press.de 49<br />

Hetzner Online AG http://​www.hetzner.de 132<br />

Host Europe GmbH http://​www.hosteurope.de 85<br />

Hostserver GmbH http://​www.hostserver.de 2<br />

Inlab Software GmbH http://​www.inlab.de 15<br />

Kamp Netzwerkdienste GmbH http://​www.kamp.net 27<br />

Kettner Mathias - Linux Experte http://​www.mathias-kettner.de 23<br />

Lamarc EDV-Schulungen u.<br />

Beratung GmbH http://​www.lamarc.com 43<br />

Linux-Hotel http://​www.linuxhotel.de 97<br />

Linux-<strong>Magazin</strong> http://​www.linux-magazin.de 131<br />

Linux-<strong>Magazin</strong> Academy http://​academy.linux-magazin.de 37, 71, 79<br />

Netzwerktotal http://​www.netzwerktotal.de 47<br />

outbox AG http://​www.outbox.de 39<br />

pascom - Netzwerktechnik<br />

GmbH & Co.KG http://​www.pascom.net 13<br />

PlusServer AG http://​www.plusserver.de 16, 34, 50, 62<br />

Synology http://​www.synology.com 45<br />

Thomas Krenn AG http://​www.thomas-krenn.com 25<br />

Windows Phone User http://​www.windows-phone-user.de 125, 127<br />

XYRALITY GmbH http://​www.xyrality.com 67<br />

Autoren dieser Ausgabe<br />

Johannes Ahrends Ausweg aus Babylon 64<br />

Eric Amberg Sicher ist <strong>sicherer</strong> 80<br />

Chris Binnie Haus <strong>mit</strong> Hüter 86<br />

Hanno Böck Die Shell für unterwegs 36<br />

Jürgen Dankoweit Schichtweise 106<br />

Thomas Drilling Aus der Ferne 98<br />

Douglas Eadline Frauenpower 122<br />

Thomas Joos Dschungelcamp 68<br />

Thomas Joos Wandertag 102<br />

© Katharina Wittfeld, 123RF<br />

VORSCHAU<br />

<strong>ADMIN</strong> 01/2013 erscheint am 10. JANUAR 2013<br />

Enterprise-Linux<br />

Viele sehen es nicht ein, für ein<br />

freies Betriebssystem viel Geld<br />

auszugeben. Wo die Stärken der<br />

kommerziellen Linux-Distributionen<br />

liegen <strong>und</strong> worin sie sich unterscheiden,<br />

verrät der Schwerpunkt<br />

im kommenden <strong>ADMIN</strong>-Heft.<br />

Michael Kofler Nachgewürzt 94<br />

Klaus Kröll Motorisierte Skripte 118<br />

Thomas Lingmann Zugangsschutz 114<br />

Martin Loschwitz Selbstbedienung 72<br />

Vilma Niclas Löschen reicht nicht 20<br />

Thorsten Scherf Im Dickicht 18<br />

Tim Schürmann Ersatzspieler 28<br />

Markus Winand Alles nach Plan 88<br />

Thomas Zeller Klick in die Zukunft 40<br />

Laptop geklaut?<br />

Auf Konferenzen sind nicht immer<br />

nur die fre<strong>und</strong>lichen Unix-Hippies<br />

unterwegs, auch Diebe zieht es wegen<br />

der hohen Hardware-Dichte auf<br />

solche Veranstaltungen. Mit einem<br />

gewitzten Programm hat man eine<br />

Chance auf Wiederbeschaffung.<br />

© rioblanco, 123RF<br />

130 Ausgabe 06-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 ZEHN „iVORI“ Smartphone Gadgets<br />

Einsendeschluss ist der 15.12.2012<br />

gesponsert von:<br />

.de


€ 59<br />

Hetzner Online unterstützt <strong>mit</strong> der<br />

Verwendung von 100% regenerativem<br />

Strom aktiv den Umweltschutz.<br />

Entscheiden Sie sich gemeinsam<br />

<strong>mit</strong> uns für eine saubere Zukunft.<br />

49

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!