Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!
Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.
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&...¶m_n=wert_n«. In<br />
der korrekten HTML-Notation ersetzt man das<br />
Ampersandzeichen durch »&«, 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&...¶m_<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 »&« 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