Die Zwickmühle beim Betreiben von verschlüsselten Netzdiensten aus Betreibersicht

Angesichts der Schwachstellen rund um bestimmte Verschlüsselungsarten (Poodle und Logjam waren die bekanntesten in letzter Zeit) hat man es als Betreiber schwer, die „optimale“ Konfiguration für Netzdienste zu finden, die verschlüsselte Kommunikation anbieten. Auf der einen Seite möchte man nach Möglichkeit Benutzer mit älteren Geräten, die noch nicht die neuesten Verfahren implementiert haben, nicht völlig von der Nutzung ausschließen, auf der anderen Seite gelten bestimmte Verfahren inzwischen als so unsicher, dass man diese als Serverbetreiber auf gar keinen Fall mehr anbieten möchte, um Nutzer nicht in trügerischer Sicherheit zu wägen.

Das gilt insbesondere dann, wenn als Szenario droht, dass ein Angreifer sich in die Verbindung zwischen Server und Client einklinken kann und dann dafür sorgt, dass die beiden eigentlichen Kommunikationspartner sich auf eine Primitiv-Verschlüsselung einlassen, weil der Angreifer vortäuscht, der jeweils andere Partner würde keine starke Verschlüsselung unterstützen („Downgrade-Attack“). In einem solchen Fall braucht der Angreifer dann nur noch die Primitiv-Verschlüsselung zu knacken anstelle der starken Verschlüsselung, die die beiden Kommpunikationspartner im Normalfall untereinander vereinbart hätten.

Webserver und andere Dienste

Weiter verkompliziert wird die Lage dadurch, dass Angriffsszenarien bei verschiedenen Netzdiensten unterschiedlich zu beurteilen sind. So sind Angriffe, die darauf beruhen, dass einer der Kommunikationspartner unfreiwillig dazu gebracht werden kann, häufig Datenpakete mit annähernd gleichem Inhalt zu senden, bei Webseiten bis zu einem gewissen Grad realistisch. Schafft es der Angreifer, das Opfer auf eine Webseite unter seiner Kontrolle zu locken, so sind automatisierte Datenabrufe durch eingebetteten Skriptcode denkbar, ohne dass es direkt auffällt. Bei anderen Diensten, beispielsweise E-Mail mit einem Mailclient, gibt es hingegen kein ernstzunehmendes Szenario, wie ein Angreifer von außerhalb den Computer des Opfers automatisiert dazu bringen kann, selbständig mit gewisser Regelmäßigkeit gleichartige Datenpakete zu verschicken. Das ist umso mehr eine Besonderheit des Webs gegenüber anderen Netzdiensten, weil das Angriffsziel „Session-Cookie“ auch nur im WWW-Bereich wirklich existiert.

Alte Software überall

Als wäre dieses Spannungsfeld nicht schon vertrackt genug, kann als weitere Schwierigkeitsstufe noch dazukommen, dass man nicht nur bei den fremden Kommunikationspartnern nicht die neuesten Verschlüsselungsverfahren voraussetzen kann, sondern dass man auch als Anbieter nicht all das nutzen kann, was theoretisch verfügbar ist. So steht am RRZK für den Betrieb von Webservern i.d.R. als Betriebsystem Red Hat Enterprise Linux 6 (RHEL6) zur Verfügung. Dieses bringt aber nicht die jeweils neuesten Programmversionen mit, sondern im Regelfall diejenigen Versionen, die bei Erscheinen des Betriebssystems aktuell waren, jedoch natürlich um in der Zwischenzeit bekanntgewordene Sicherheitslücken bereinigt.

Für RHEL6 bedeutet das ganz konkret, dass nur die Funktionen von openssl 1.0.1 zur Verfügung stehen (anstelle von openssl 1.0.2) sowie der Apache-Webserver aus der 2.2er Versionslinie (anstatt 2.4). Damit sind einige der Empfehlungen für Serverbereiter, wie Sie beispielsweise von den Entdeckern des Logjam-Problems gegeben werden, nicht umsetzbar. Das Definieren individueller sog. Diffie-Hellman-Parameter etwa ist erst mit den neuesten Versionen des Apache-Webservers (ab 2.4.8) möglich.

Empfehlung für Apache 2.2 unter RHEL6

Um nun unter RHEL6 einen Apache-Webserver zu betreiben, der Webseiten ausschließlich verschlüsselt (per https) ausliefert, und das unter den gegebenen Umständen mit einem als möglichst sicher geltenden Kompromiss, kann man folgende Einstellungen in der allgemeinen Apache-Konfiguration verwenden:


SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!ADH:!MD5:!RC4
SSLHonorCipherOrder on

Das ist zunächst einmal wenig spektakulär und kaum anders als das, was von den Logjam-Entdeckern empfohlen wird. In der Praxis läuft es darauf hinaus, dass die hier vorgeschlagene Konfiguration keine Präferenz für AES-128-Verschlüsselung enthält, so dass von den meisten heutigen Clients eine AES-256-Verschlüsselung verwendet werden wird. Ob man in dem gegebenen Kontext (Abruf von Webseiten) nun AES-128 oder AES-256 den Vorzug geben sollte ist für mich nicht zu beurteilen und wird in der Praxis wohl auch kaum eine Rolle spielen. Die theoretische Angreifbarkeit von AES-256 gegenüber AES-128 (hier ein alter und bekannter Blogartikel von Bruce Schneider dazu) bezieht sich auf mögliche Related-Key-Angriffe und ist in dieser Frage von untergeordneter Bedeutung.

Lässt man die oben genannte Einstellung SSLHonorCipherOrder hingegen auf dem Standardwert off, statt sie wie empfohlen auf on zu setzen, so ändert sich in der Praxis bei den meisten Browsern wenig. Durch das Setzen von SSLHonorCipherOrder on sorgt man de facto nur dafür, dass Benutzer mancher Versionen des Internet Explorers unter Windows 7 zu ihrem Glück gezwungen werden und auch bei ihnen eine Verbindung mit Forward Secrecy aufgebaut wird. Auf die Belange von Nutzern, die auch heute noch die extrem veraltete und per se unsichere Kombination von Internet Explorer 6 und Windows XP einsetzen, wird hier keine Rücksicht mehr genommen. Diese früher nicht ganz kleine Gruppe an Webseitenbesuchern machte in der Vergangenheit viele faule Kompromisse notwendig.

Dem Browser den Weg zur Verschlüsselung weisen

Legt man Wert darauf, in dem beliebten SSL-Servertest von Qualys besonders gut abzuschneiden, ist SSLHonorCipherOrder on unbedingt notwendig. Jedoch reicht das Setzen dieser und der anderen allgemeinen Verschlüsselungseinstellungen nicht aus. Für ein gutes Testergebnis muss man auch dafür sorgen, dass Besucher ausschließlich verschlüsselt mit dem Server kommunizieren. Solange unverschlüsselte Kommunikation im Web der Normalfall ist, sind dazu noch ein paar weitere Anstrengungen in der Apache-Konfiguration notwendig.

Webseitenbesucher, die – aus welchem Grund auch immer – eine unverschlüsselte Verbindung zum Server aufbauen möchten, müssen also von diesem Vorhaben abgehalten werden. Verwendet man dazu virtuelle Hosts in der Apache-Konfiguration, so kann man die Besucher, die keine Verschlüsselung verwenden, per


<VirtualHost *:80>
  RedirectMatch permanent (.*) https://meinhostname.uni-koeln.de$1
</VirtualHost>

umlenken. Für Named Virtual Hosts wäre hier natürlich noch eine weitergehende Konfiguration nötig. Gezeigt werden soll anhand dieses Konfigurationsschnipsels eigentlich nur, dass man die Besucher am besten mit einer dauerhaften Umleitung (permanent) auf die verschlüsselte Version der Website lenkt.

https und nur https, in guten wie in schlechten Zeiten

Als Kür sendet man dann noch die Information an die Browser der Webseitenbesucher, es in Zukunft gar nicht erst über eine unverschlüsselte Verbindung zu probieren, sondern ausschließlich per https mit dem Server zu kommunizieren:


<VirtualHost *:443>
  # hier stehen normalerweise Einstellungen wie ServerName, DocumentRoot etc.
  
  # vvv Einschalten von HSTS aka HTTP Strict Transport Security, RFC 6797
  Header always set Strict-Transport-Security: max-age=31536000
  # ^^^ Strict Transport Security, funktioniert mit Apache 2.2.15
</VirtualHost>

In diesem Beispiel wird der abrufende Browser instruiert, dass die Information, mit diesem Server nur verschlüsselt zu kommunizieren, ca. ein Jahr lang (31536000 Sekunden) gültig ist. Dies kann man zum Glück auch schon mit dem bei RHEL6 mitgelieferten Webserver Apache 2.2.15 so einstellen.

Mit den auf diese Weise optimierten Einstellungen erhält der Webserver dann von dem erwähnten SSL-Test die Bestnote A+ attestiert, vorausgesetzt die übrigen Einstellungen (zum Zertifikat und der Kette der Zwischenzertifizierungsstellen etc.) sind ebenfalls in Ordnung. Diese Einstellungen sind aber nicht spezifisch für RHEL6, daher soll hier darauf nicht weiter eingegangen werden.

Kampf dem Herzinfarkt – zu lauten Sound unter Linux beheben

Der kleine Quickie am Montagmorgen: Seit Jahren ärgert mich das Problem, dass unter Linux speziell USB-Soundkarten viel zu laut angesteuert werden. Entweder steigt die Lautstärke irgendwo zwischen Stufe 20 und 30 sprunghaft von „einsamer Bergsee bei Windstille“ auf „startender Düsenjet“ oder ist (mit dem altbekannten „ignore_dB=1“-Trick) schon bei Stufe 2 eigentlich viel zu laut.

Nun bin ich zufällig im Blog von Chris Jean über eine Alternativlösung gestolpert, die sehr einfach umzusetzen ist und einfach funktioniert. Es gilt in der Datei

/usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common

im Block

[Element PCM]

die Zeile

volume = merge

zu ersetzen durch

volume = ignore
volume-limit = 0.0075

Und schön lässt sich das Ganze wieder wunderbar regeln. Zuvor kann man im Alsamixer noch die Soundkarten feinjustieren, damit die Master-Ausgabe optimal die eigenen Bedürfnisse abdeckt.

Computerinventarisierung mit dem Microsoft MAP-Tool

Das Microsoft Assesment and Planning Toolkit (MAP) ist eine kostenlose Werkzeugsammlung, die bei der Migration auf eine neue Servergeneration hilfreich sein kann. Das MAP-Tool kann unter anderem für Inventarisierung und Berichterstellung eingesetzt werden.

Auf
http://www.microsoft.com/en-us/download/details.aspx?id=7826
findet man folgende Dateien:

1

Hilfreich ist dabei das Training_Kit. Damit können einzelne Funktionen geübt werden.

Anhand von einem Beispiel wird eine Funktion von MAP dargestellt, die Sie bei der Migration unterstützen kann:

MAP Inventarisierung AD-basierend

Listet alle Computer des Active Directory auf. Gesucht wird dabei nach Computerkonten: Client und Server.

Voraussetzung: zugriffsberechtigtes Domänenkonto, vorzugsweise  Domänenadministrator

Die Suchergebnisse werden in einer Datenbank gespeichert, die man nach der Installation des Toolkits erstellt. Es empfiehlt sich, eine Datenbank für jede Suche zu erstellen. Im Rahmen der Migration auf ein neueres Betriebssystem muss man alle Systeme mit dem Betriebssystem Windows Server 2003 identifizieren.

Folgende Schritte zeigen das Erstellen einer Datenbank:

2

Ein aussagekräftiger Datenbanknahme hillft bei der Identifikation der Suchergebnisse.

3

Hat man eine Datenbank erzeugt, ist die Inventarisierung der nächste logische Schritt. Dazu führt man eine Abfrage durch. In dem Bereich Environment wählt man den Schritt „Collect inventory data“ aus.

4

Gesucht wird nach Windows Computern

5

AD DS soll als Suchmethode ausgewählt werden

6

Notwendig sind die Angabe des Domänennamens, z.B. ad.uni-koeln.de, eines zugriffsberechtigten Accounts in Form Domäne\Benutzer bzw. Benutzer@Domäne, und eines Passworts.

7

8

Die restlichen Assistentenschritte werden mit Standardwerten durchgeführt.

Nach der Inventarisierung kann man feststellen, wieviele Computerkonten gefunden wurden. Dabei ist die Anzahl der erfolgreich inventarisierten Computerkonten zunächst unwichtig. Das Betriebssystem jedes Objekts wird angezeigt, sofern es definiert ist.

9

Bedient man sich der Reportgenerierung, wird ein Excel-Dokument mit allen gesammelten Daten erzeugt.

10

Im Dokument kann man einen Filter setzen und eine Übersicht für Server generieren, die nur das relevante Betriebssystem Windows Server 2003 haben.

Anmerkungen zu Big Data und den Folgen für die Speicher-Infrastruktur

Was ist Big Data?

Der Terminus „Big Data“ ist nun schon seit einigen Jahren auf dem Markt. Neuigkeiten wie der NSA-Skandal haben sicherlich dazu beigetragen, Aufmerksamkeit für den ganzen Themenkomplex zu wecken. Mögliche Konsequenzen der neuen Datenwelt, die ja ein wichter Teil der digitalen Transformation sind, werden inzwischen in den allgemeinen Medien ausführlich dargestellt und besprochen.

In den Wissenschaften, insbesondere in den Natur- und Lebens-, den Wirtschafts- und Sozial- aber auch in den Geisteswissenschaften, werden „Big Data“-Techniken als neue Arbeitsmethoden immer wichtiger. Grund genug, hier ein paar Überlegungen zu „Big Data“ und zur technologischen Basis anzustellen.

Der Begriff. Ganz grob gesprochen geht es bei „Big Data“ um die Verknüpfung verschiedener und umfangreicher Datenbestände. In der Hoffnung, neue Informationen bzw. Erkenntnisse gewinnen zu können, werden diese korreliert und analysiert; eine komplexe Jonglage also.

Google Trends verrät, dass seit 2009 „Big Data“ als Suchbegriff austritt und dann rasch relevanter wird. Die Methode ist im Kern nicht ganz so neu und baut ganz erheblich auf älteren Ansätzen wie Data Warehouse auf. Aber „Big Data“ ist eine umfangreiche Ansammlung verschiedener Technologien: Gartner hat einen eigenen Big Data Hype Cycle zusammengestellt, in dem das Thema in über drei Dutzend Teilgebiete differenziert wird. Trotzdem hat sich inzwischen eine allgemeine Charakterisierung für „Big Data“ entwickelt, welche um englische Begriffe kreist, die alle (mnemotechnisch günstig) mit einem V beginnen:

Die ersten drei Vs. Diese drei „klassischen“ Vs gehen auf einen steinalten Artikel von D. Laney aus dem Jahr 2001 zurück und heißen: Volume, Velocity und Variety.

Volume: Wie “Big Data” schon nahelegt, ist der schiere Umfang der verwendeten Daten eine wichtige Kenngröße. Während man heute sicherlich einige Terabyte (10^12) aufbieten können muss, treibt einige Leute schon die Sorge um, dass irgendwann die Präfixe knapp werden könnten und bringen Brontobytes (10^27) ins Gespräch …

Velocity (Schnelligkeit): Hiermit ist die Geschwindigkeit gemeint, mit der Daten erzeugt, verarbeitet und analysiert werden. Auch die Analyse während der Erzeugung, also eines Datenstroms, ist eine besondere Ausprägung dieses Merkmals.

Variety (Verschiedenheit): Die gemeinsame Verwendung von Daten aus unterschiedlichen Quellen sowie von strukturierten und unstrukturierten Daten ist ebenfalls typisch. Dies ist auch eine echte Weiterentwicklung des sehr strukturierten Data Warehouse Ansatzes.

Noch mehr Vs. Nach den genannten drei Vs kamen aber noch weitere Merkmale dazu:

Veracity (Wahrhaftigkeit): Dieses Charakteristikum greift den spannenden Umstand auf, dass auch Daten ausgewertet werden, die inkonsistent oder nicht sonderlich vertrauenswürdig sind. Man ahnt schon, dass dies ganz neue Herausforderungen mit sich bringt.

Variability (Veränderlichkeit): Diese besondere Ausprägung spielt eine Rolle, wenn Daten aus einer Sprachverarbeitung heraus verwendet werden. Dann kann sich die Bedeutung der Daten selbst verändern.

Visualisation (Veranschaulichung): Gerade die Analyse des Datenmaterials ist eine ziemliche Herausforderung. Der eingangs erwähnte WDR-Beitrag enthält auch ein paar mahnende Fehlinterpretationen, denen man ganz leicht aufsitzen kann. Für ein wirkliches Verständnis der „mutmaßlichen Befunde“, ist eine Veranschaulichung bereits in der Analyse unabdingbar. Zur Darstellung der Ergebnisse ist das weite Gebiet der Infographiken ein wichtiges Hilfsmittel. [1] [2] [3] [4]

Und noch ein V. Als siebtes (und bislang) letztes V findet sich

Value: Das ist eigentlich die „Sinnstiftung“ von Big Data, nämlich die Erinnerung, dass eine nützliche, wertvolle Erkenntnis am Ende der Übung stehen soll.

Weitere und ausführlichere Darstellungen finden sich im Web reichlich [5], [6].

Big Data = Technik + Algorithmik + Analytik? Die Charakteristiken von „Big Data“ scheinen mir nahe zu legen, dass hier drei Schichten zusammengebracht werden müssen, um ein fundiertes und werthaltiges Ergebnis zu erreichen:

  1. DieTechnik, welche die Voraussetzungen zur Haltung und Verarbeitung von Daten ist. Diese kann natürlich als Service im Sinn des Cloud-Paradigmas realisiert werden.
  2. Die Algorithmik, also die Konstruktion oder Wahl geeigneter Software zur Auswertung der Daten.
  3. Die Analytik, welche Hypothesen aus der Auswertung falsifiziert oder validiert, um ein Verständnis der Aufgabenstellung zu erreichen. Auf dieser Ebene ist die Semantik der Ergebnisse der dominierende Aspekt.

Die sieben Charakteristiken von Big Data sind nicht alle gleichermaßen auf diesen Schichten ausgeprägt. Vielmehr sind einige Schwerpunkte evident:

Technik Algorithmik Analyse
Value Stark
Visualisation Stark
Variability Mittel Stark
Veracity Stark Stark
Variety Stark Stark
Velocity Stark Stark
Volume Stark Mittel

Dass sich die drei „klassischen Vs“ – Volume, Velocity und Variety – in der Technik- und Algorithmik-Schicht besonders deutlich niederschlagen, ist wenig überraschend. Bei Veracity und Variability steht schon per definitionem die Semantik der Daten im Mittelpunkt.

Nun noch ein paar Überlegungen zur Speicherung und dem Management von Daten im Big Data Kontext.

 

Big Data und die IT-Infrastruktur

Traditionelle Speicher-Architekturen. Das Speichern und Verwalten von Daten kann auf recht unterschiedliche Weise erfolgen. Auf einer ziemlich tiefliegenden Technikebene können beispielsweise „Block Devices“ genutzt werden, um Portionen von Bytes zu schreiben und zu lesen. Das ist flexibel und performant, aber mühselig und eher für Experten geeignet. Anwender arbeiten normalerweise mit Dateisystemen oder auch (im Fall hochgradig strukturierter Daten) relationalen Datenbanken. Dateisysteme organisieren die einzelnen Dateien in einer Hierarchie und bieten oft Features wie Zugriffsteuerung, Versionierung, Replikation. In der Big Data Welt wird aber immer häufiger von Objekt-Speicher gesprochen, der die guten alten Filesysteme ablösen wird. Warum wird das so sein?

Objekt-Speicher. Das Konzept des Objekt-Speichers beruht auf dem Ansatz, die Details der Speicherung wie etwa Speicherort zu verbergen. Mit dem Speicherobjekt kann nur über eine definierte, schlanke Schnittstelle interagiert werden. Konkret besteht das Speicherobjekt aus einer eindeutigen Identitätskennung (ID), Metadaten, einer Menge von Standardmethoden (in der Regel ein API mit den CRUD-Aktionen – und häufig Accounting für die Cloud) sowie dem eigentlichen Dateninhalt. Das unterscheidet sich sehr erheblich vom Filesystem: Da der Speicherort verborgen ist, gibt keine Hierarchie (sondern nur die ID). Raffinierte, mächtige Features sind im Objekt-API nicht implementiert.

Das klingt auf den ersten Blick nicht besonders verlockend. Allerdings kommen mit diesem Ansatz auch Vorteile:

  1. Der Zugriff über eine ID und ein API ist einfach zu standardisieren. Verschiedene Speicher können dann gleichartig genutzt werden.
  2. Der Umgang mit Datenobjekten über ein API, also von einer Anwendung aus, ist grundsätzlich einfacher als das hantieren mit Dateien. Dabei muss nämlich mit dem Betriebssystem eines Servers oder aber einem Netzwerkprotokoll interagiert werden, was typischerweise ziemlich komplex und variantenreich ist.
  3. Die Objekt-Metadaten können im Prinzip erweitert werden, was Dateisysteme meist nicht vorsehen.
  4. Das Datenmanagement kann erheblich flexibler und weitreichender agieren, weil der Speicherort vor den Nutzenden verborgen ist. Dadurch können mehr steuernde und optimierende Eingriffe transparent durchgeführt werden.
  5. Im Zusammenspiel mit den Objekt-Metadaten kann das Datenmanagement besser automatisiert werden. Bei Filesystemen ist dies nur bei speziellen HSM-Lösungen möglich.
  6. Durch die Entkopplung von Nutzung und Management können horizontal skalierende Lösungen (scale out) einfacher realisiert werden.

Vorteile sind also sowohl in der Datennutzung als auch im Datenmanagement zu erwarten, wobei es hauptsächlich um Standardisierung, Automatisierung und Flexibilisierung geht.

Volume, Velocity, Variety und Speicher-Objekte. Bezüglich Volume und Velocity sind die Vorteile des Objektspeichers bezüglich des Datenmanagements (also 4, 5 und 6) relevant. Bei riesigen Datenmengen mit erheblichen Veränderungsraten wird die Transparenz und Automatisierung von Management-Aktivitäten immer wichtiger, da dies Einschränkungen bei der Verfügbarkeit reduziert und einen „smarten“ Umgang bei Lastwechseln ermöglicht.

Während die Nutzenden stärker von Fragen der Kapazitätsplanung entlastet werden können, verbleibt ihnen die Bürde des Umgangs mit den unterschiedlichen Datenquellen. Die Komplikationen, die sich aus der Variety ergebenen könnten, werden beim Objekt-Speicher aber durch die einfachere und einheitliche Schnittstelle aus ID und API (also 1, 2 und 3) entschärft.

Für die interaktive Standardnutzung im Büroalltag werden Filesysteme sicherlich weiterhin ihre Bedeutung behalten, denn dort ist die hierarchische Organisation oft sehr sachgemäß. Für die Nutzung von Speicherbeständen aus Anwendungen heraus, welche diese dann komplexe Analysen in diesen Beständen durchführen, sind Objekt-Speicher aber zweifellos die bessere Wahl.

Es wird spannend sein, wie sich Nachfrage und Angebot in den nächsten Jahren an unserer Universität entwickeln werden. Gartner gelangt übrigens zu dem Schluss, dass Big Data im Jahr 2014 die Hype-Cycle-Phase des „Trough of Disillusionment“ erreicht hat. Good Luck, Big Data!

 

Weitere Informationen

Provost, F.; Fawcett, T.: Data Science for Business; O’Reilly; 2013

Strg+Alt+Entf unter Windows bei iMac mit deutscher (Bluetooth-)Tastatur

Auf meinem älteren iMac (Late 2009) mit deutscher, schnurloser Bluetooth-Tastatur nutze ich regelmäßig eine Windows7-Bootcamp-Installation. Der Anmeldevorgang beginnt bei der Standardeinstellung mit der Tastenkombination „Strg-Alt-Entf“, die ich (ohne Keyboard Remapping oder Verwendung eines anderen USB-Keyboards) der Apple-Tastatur nicht entlocken kann. Aber so kann man es beim Anmeldebildschirm erreichen:

1. Bildschirmtastatur einblenden (links unten)

2. Tastatur-Layout auf „Englisch (USA)“=“EN“ umschalten (links oben)

3. Auf der Bildschirmtastatur Ctrl-Alt-Del eingeben. Dies erzielt die erwünschte Wirkung.

Die Regel, welche diese Eingabe erfordert, kann beispielsweise mit dem Tool „netplwiz“ deaktiviert werden. Dazu einfach (als Admin) „netplwiz“ als Kommando ins Eingabefeld des Startmenüs eingeben.

 

Streaming auf AppleTV über Subnetzgrenzen hinweg

airplay_appletvMit dem Update auf Softwareversion 6.1 bekam das AppleTV in Verbindung mit iOS 7.1 und höher ein neues Feature: AirPlay Discovery via Bluetooth. Dies ermöglicht nun viel einfacher die Verbindung zwischen AppleTV und AirPlay-Klienten, wenn sich diese nicht im selben IP-Subnetz befinden. Einrichtungen mit vielen IT-Anwendern sind gezwungen, einzelnen Abteilungen oder Arbeitsgruppen eigene getrennte IP-Subnetze zuzuordnen. Oft wird dem WLAN-Netz auch ein eigener IP-Bereich zugewiesen. Befindet sich das AppleTV dann netztechnisch im IP-Bereich einer Arbeitsgruppe, müssen die Klienten einige Barrieren überwinden.

Haben beide Geräte Bluetooth aktiviert und die aktuelle Softwareversion installiert, wird auf dem iPad/iPod/iPhone das AppleTV angezeigt. Unter Umständen ist jedoch keine Kommunikation zwischen den Klienten möglich. AirPlay erfordert, dass vom AppleTV eine neue TCP/UDP-Session zum Endgerät aufgebaut werden kann, obwohl die ursprüngliche Session vom Endgerät initiiert wurde.

Damit schließt AirPlay Umgebungen aus, die NAT mittels Port-Addresstranslation durchführen. Diese Hürde kann man jedoch durch Aufbau einer VPN-Verbindung überwinden. Verteilt das VPN-Gateway jedem Endgerät eine eigene IP, kann so doch AirPlay eingesetzt werden.

Nun müssen gegebenenfalls noch Freigaben eingerichtet werden, wenn die Subnetze durch eigene Firewalls abgesichert sind. Leider verwendet AirPlay dynamische Ports, so dass ganze Bereiche freigegeben werden müssen. Dabei verläuft die Kommunikation von hohen Ports (49152 – 65535) zu hohen Ports.

Folgende Freigaben sollten eingerichtet werden:Firewallregeln

Je nach Firewall-Typ müssen auch die Rückantworten zu den fünf Freigaben eingetragen werden, also Quellnetz/-port und Zielnetz/-port vertauscht.

Mit diesen Freigaben sollte AirPlay funktionieren. Wir konnten mit den gewählten Einstellungen Videos, Musik und den Bildschirminhalt erfolgreich auf das AppleTV streamen.

Projekt Mepevea – D’r Zoch kütt!

Als umweltbewusster oder zumindest geiziger Mitarbeiter des Öffentlichen Dienstes verzichtet man in der Regel bei längerer Anfahrt zum Arbeitsplatz auf den privaten PKW und nimmt freudig am öffentlichen Personennahverkehr (ÖPNV) teil. Sprich: Die Deutsche Bahn (und in Köln auch die KVB) ist unser Freund! Gerüchteweise sind die bereitgestellten Verkehrsmittel nicht immer dann vor Ort, wenn man es laut Fahrplan erwarten könnte. Damit man die daraus resultierende Wartezeit nicht am Bahnsteig, sondern am Frühstückstisch bzw. im bequemen Bürosessel verbringen kann, sind aktuelle Informationen über die Verspätungen unerlässlich.

Nun hat sich in der Vergangenheit der Service der DB dahingehend deutlich verbessert. So sind die Verspätungsinformationen inzwischen minutengenau und in Realzeit sowohl im Web als auch mittels der App „DB Navigator“ abrufbar. Der o.g. Mitarbeiter des Ö.D. ist allerdings nicht nur geizig (jaja, und umweltbewusst), sondern auch klickfaul und noch dazu ein Spielkind. So kam ich auf die Idee, sowohl in meinem trauten Heim als auch im Büro mittels ohnehin vorhandener Technik einen (für mich) optimalen Anzeigebildschirm zu basteln.

Dieser sollte nicht nur die aktuellen Verspätungen meiner Zugverbindungen, sondern auch weitere interessante Informationen anzeigen, genauer gesagt: Aktuelle Nachrichten, Wettervorhersage und (zuhause) zusätzlich das Kamerabild einer per WLAN verbundenen IP-Kamera. Als Hardware kamen ein günstiger und dank Notebook-Anschaffung ohnehin kaum noch gebrauchter PC-Bildschirm sowie zeitgemäß ein Raspberry Pi zum Einsatz. Das System sollte in jedem Fall ohne weitere Peripherie, speziell ohne Maus und Tastatur, auskommen. Softwareseitig setzte ich daher auf Google Chrome im Kiosk-Modus. Mittels der Erweiterung „Easy Auto Refresh“ kann man dafür sorgen, dass Chrome die angezeigte Seite automatisch einmal pro Minute neu lädt. Das Kamerabild läuft ohnehin im Streaming-Mode.

Der graphische Desktop des Raspi musste so eingestellt werden, dass er sich nicht automatisch abschaltet. Die Kontrolle über die Anzeige sollte ausschließlich per Ein/Aus-Knopf des Monitors ablaufen. Dies erreicht man über die eine Einstellung in LightDM.

Da ich mir die Installation und Konfiguration eines Webservers sparen wollte, verwende ich eine einfache lokale HTML-Seite auf dem Raspi. Die beiden gewünschten Elemente „Aktuelle Nachrichten“ und „Wettervorhersage“ sind sehr leicht über passende Widgets realisierbar. Ich habe hierzu die Angebote von wetterdienst.de und rp-online genutzt, es gibt jedoch zahlreiche weitere Anbieter.

mepevea

Richtig interessant wurde es dann bei der Einbindung der Verspätungsanzeige. Wie ich feststellen musste, bietet die Bahn leider keine geeignete API zu diesem Zweck. Mir blieb nichts anderes übrig als die entsprechende Webseite zu parsen. Diese Erkenntnis war die Geburtsstunde von Projekt „Mepevea“ (MEin PErsönlicher VErspätungsAnzeiger).

Wie erwähnt wollte ich auf die Installation und den Betrieb eines Webservers verzichten. Die Anzeige soll ja ohnehin nur für mich persönlich laufen. Daher musste ich die eigentliche Logik nebst Parser in ein Pythonskript packen, welches per Cronjob aufgerufen wird (ja, ich arbeite unter Linux und ignoriere Windows seit Jahren – die Portierung sollte aber kein großes Problem darstellen). Als Basismodul für den Parser dient natürlich „BeautifulSoup“, darüber hinaus werden urllib zum Abruf der Seite und einige weitere Module benötigt. Der Start lautet also:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import bs4, urllib2, time, fileinput, sys, urllib

„fileinput“ verwende ich, um später den <div>-Block im HTML durch die korrekten Daten auszutauschen, z.B.:

for line in fileinput.FileInput("/home/pi/anzeige/bahnlinks.html",inplace=1):
if line.startswith('<div id="bahn">'):
   line = text
   sys.stdout.write(line)

Natürlich macht es Sinn, abhängig vom Wochentag und der Tageszeit die Anzeige zu variieren (Hinfahrt, Rückfahrt, Abend/Wochenende), also z.B.:

timestamp = time.localtime(time.time())
if timestamp[6] > 4:
   textlist.append("<b>Bahnanzeige erst am Montag wieder! Schönes Wochenende!</b>")

Hier wird schon klar: Individuelle Anpassung ist unerlässlich und ich kann die Beispiele nur anreißen. Keine Sorge: Am Ende werde ich als „großes Beispiel“ mein komplettes Skript bereitstellen.

Zentrales Element des Skriptes ist die Parserfunktion. Sie erhält als Parameter die URL der Bahn (dazu später) und jagt sie durch BeautifulSoup:

def parser(url):
   page = urllib2.urlopen(url).read()
   soup = bs4.BeautifulSoup(page)

Man möge mir an dieser Stelle glauben, dass wir die spannenden Inhalte erhalten, wenn wir nach den Keywords, genauer gesagt den <td>-Klassen „overview timelink“ und „overview tprt“ suchen:


zeilen = soup.find_all('td', {"class" : "overview timelink"})
verspaetungen = soup.find_all('td', {"class" : "overview tprt"})

Schon hier erkannt man, wo das größte Problem unserer schönen Bastelei liegt: Sollte die Bahn die Klassennamen aus irgendwelchen Gründen ändern, funktioniert natürlich nichts mehr. Das gleiche gilt für die URLs und die HTML-Struktur. Genau aus diesem Grund gibt es ja i.d.R. kapselnde APIs, aber die stehen hier wie gesagt nicht zur Verfügung.

Standardmäßig erhält man von der Bahn die nächsten drei Züge ab dem definierten Zeitpunkt. Ich habe die finale Version noch so erweitert, dass man dies variieren kann, aber das würde hier zu weit führen. Ebenso müsste ich nun eigentlich auf die Details von BeautifulSoup eingehen, um den folgenden Codeblock zu erläutern. Aber auch dies möchte ich mir sparen und auf die gute Online-Dokumentation des Moduls verweisen. Unsere Verbindungen sowie die aktuellen Verspätungen erhalten wir so:


parsedtext = ''
zaehler = 0
for zeile in zeilen:
   for zelle in zeile.children:
      parsedtext += zelle.contents[0]
   parsedtext += '<span style="color: red;">'
   for verspaetung in verspaetungen[zaehler].children:
      if str(verspaetungen[zaehler]).count("okmsg") > 1 or str(verspaetungen[zaehler]).count("red") > 1:
         parsedtext += verspaetung.contents[0]
         break
   parsedtext += '</span>'
   zaehler += 1

Ich bin mir zu 99% sicher, dass dies nicht die eleganteste Version ist, um die Informationen zu erhalten und aufzubereiten. Aber sie funktioniert. Wer das Ganze kürzer, schöner und verständlicher hinbekommt, ohne dass die Funktionalität leidet, möge sich bei mir melden.

Kommen wir nun zu den benötigten URLs. In einer ersten Version hatte ich pro Zug eine URL auf Basis des Bahntools „query2.exe“ verwendet, die auch deutlich einfacher zu parsen war (Anmerkung: Bitte von der Endung „.exe“ nicht täuschen lassen: Es handelt sich um einen Webservice, nicht um ein lokales Programm.). Leider musste ich feststellen, dass die Bahn bei jeder (geplanten) Mini-Fahrplanänderung die URL komplett verändert. Auf Dauer war das also leider keine Lösung. Stattdessen verwende ich nun die „Vorstufe“ namens „query.exe“. Diese hat klar definierte und – hoffentlich – dauerhaft beständige Parameter. Als Parameter benötigen wir den Code des Startbahnhofs, den Code des Zielbahnhofs und die Startzeit.

Während die Startzeit natürlich jedem selbst überlassen bleibt und einfach in der Form hh:mm verwendet wird, muss man sich die Codes (sog. IBNR) der Bahnhöfe einmalig heraussuchen. Dies geht zum Glück sehr einfach mittels einer Onlinesuche.

Lautet die IBNR des Startbahnhofs bspw. 8000208, die des Zielbahnhofs 8000133 und die gewünschte Startzeit ist 17:00 Uhr, lautet die gesuchte URL:

http://reiseauskunft.bahn.de/bin/query.exe/dox?S=8000208&Z=8000133&time=17:00&start=1

Damit lässt sich nun für jede beliebige Verbindung und Kombination von Tageszeiten ein passender Anzeiger (eben ein „Mepevea“) bauen.

Für weitere Ideen, Verbesserungsvorschläge etc. bin ich jederzeit dankbar. Und wenn jemand die Bahn überreden könnte, doch mal eine entsprechende API bereitzustellen, das wäre ein Traum. 😉

Wie versprochen: Den vollständigen Text des Skriptes sowie eine Beispiel-HTML-Seite findet man unter http://dl.distinguish.de/mepevea.zip

Was ist ein CMS? Oder: Manchmal muss man das Einfache komplizierter machen, um das Komplizierte einfach machen zu können.

Die Uni Köln setzt schon seit vielen Jahren Content Management Systeme (CMS) für die Gestaltung ihrer Webseiten ein. Dabei werden verschiedenste Systeme bunt gemischt. Das Rechenzentrum setzt dabei auf TYPO3, für das ich als Webmaster verantwortlich bin.
Ich möchte hier auf kein spezielles CMS eingehen weil Joomla, Drupal, WordPress, TYPO3 und die vielen anderen Systeme vor der gleichen Aufgabe stehen. Die einen können das eine besser, die anderen etwas anderes, unterm Strich unterscheiden sie sich nicht viel.

Doch CMS werden häufig missverstanden. Im Gegensatz zu den Anfangszeiten des Internets, in denen jeder, der Webseiten erstellte, auch ein profundes Wissen über die zugrundeliegende Technik hatte, ist – zumindest an der Uni – die Verantwortung für die Erstellung von Web-Inhalten längst von den „Techies“ weg-gewandert und zählt nun im Grunde zur normalen Büro- und Schreibarbeit.

Das Internet lässt sich jedoch nur deswegen so kinderleicht bedienen, weil viele schlaue Köpfe sich die komplizierte Arbeit gemacht haben, es einfach zu machen.

Zudem wachsen – von vielen oft unbemerkt – die Anforderungen. Der Masse verborgen bleiben, zum Beispiel, die Bemühungen, die Webseiten auch für Sehbehinderte und Menschen mit anderen Handicaps bedienbar zu machen. Dies wird aber wieder interessant, wenn wir versuchen Webseiten mit unseren Smartphones und anderen Mobilgeräten zu bedienen.
Die neusten Generationen von Smartphones mögen mit ihren hohen Bildschirmauflösungen in der Lage sein, Webseiten darzustellen wie es ein Computer mit großem Monitor macht, aber die Schrift wird auf den kleinen Displays unleserlich klein, während – im Vergleich zur Bildschirmgröße – unsere Finger viel zu groß für Links sind, die für die Bedienung mit einem kleinen Mauszeiger optimiert sind.

Was ist „Content“?

Wikipedia bescheinigt Content Management Systemen: „Besonderer Wert wird bei CMS auf eine medienneutrale Datenhaltung gelegt. So kann ein Inhalt auf Wunsch beispielsweise als PDF- oder als HTML-Dokument abrufbar sein“.
In der Theorie schreibt ein Redakteur also seine Texte frei von den Beschränkungen des Mediums, welches zur Auslieferung der Inhalte verwendet wird. Die Inhalte wären in dieser Philosophie also reine Information.

Wer aber schon einmal unsäglich missverstanden wurde, weil eine eigene E-Mail vom Adressaten völlig anders interpretiert wurde, als sie gemeint war, weiß, dass die bloßen Wörter eines Texts nicht alle Informationen übertragen. Im persönlichen Gespräch kann man zusätzliche Gestik, Mimik, Betonung und dramatische Pausen nutzen. Im Geschriebenen versuchen wir diese Stilelemente mit Fettdruck, Kursivschrift, farbigen Unterlegungen und nicht zuletzt auch mit Smileys und anderen Emoticons zu simulieren.

Diese Methoden sind jedoch nicht „medienneutral“. Ein Farbenblinder übersieht vielleicht rote Unterlegungen. Und wie erklärt man einem Text-To-Speach-Programm, wie es von Blinden benutzt wird, was ein kursiver Text ist, und wie dieser vorzulesen ist?
Es ist aber nicht nur die Barrierefreiheit, in der Industrie werden teilweise „Hands-Free“-Systeme nachgefragt, wie Sie sie vielleicht von (SMS-)Vorlesefunktionen neumodischer Autoradios kennen.
In vielen Bereichen ist es einfach praktisch, sich das Medium, mit dem man Inhalte konsumiert jederzeit frei aussuchen zu können.

Ein weiteres Schlagwort ist dabei auch das „Semantische Web“. Gemeint ist dabei der Versuch, die Inhalte im Internet so aufzubereiten, dass Computer (Hauptsächlich die der großen Suchanbieter) auch die Bedeutung dessen verstehen, was auf einer Seite steht, anstatt Webseiten als einfache Zeichenketten zu betrachten. Wie viel besser wären Suchmaschinen, wenn sie unterscheiden könnten, ob ein Text von „Frau Rosa Blume“ handelt, oder von einer Blume, die rosa ist?

Wie kann mir ein CMS dabei helfen?

Natürlich muss zwischen der Theorie und dem praktisch Anwendbaren ein Kompromiss gefunden werden, der mal besser, mal weniger gut auf einen konkreten Anwendungsfall passt.

Die meisten Content-Managemant-Systeme haben natürlich ein Hauptausgabemedium, welches in den allermeisten Fällen eine normale Webseite ist. Daher werden von den meisten CMS Rich-Text- oder gar vollständige WYSIWYG-Editoren angeboten. Die Funktionen (Textstil, Überschriften, Absätze, Einrückungen, Einfügen von Tabellen und Bildern…) kennen die meisten aus Office-Programmen. Und an dieser Stelle kommt es häufig zu einem Missverständnis: Ein CMS ist kein Word. Man arbeitet nicht auf einer freien weißen Seite, dessen Layout frei bestimmt werden kann, sondern eher auf einem Formular mit Textbereichen, welche mit Inhalt gefüllt werden sollen.
Idealerweise positioniert man also nicht die Elemente, sondern man zeichnet sie aus, um die fehlenden Informationen medienneutral und für den Computer verständlich nachzutragen.

Beispiele:

Will man einen Textabsatz, zu dem ein Bild gehört, anlegen, so wäre es nicht medienneutral cm-genau oder Pixel-weise die Position des Bildes zu bestimmen. Besser wäre es, den Text und das Bild zu speichern und die Beziehung dazwischen einzutragen. Diese Text-Bild-Beziehungen könnten sein:

  • „Das Bild ist eng mit dem Inhalt des Textes verknüpft, beide bilden eine Einheit, der Text sollte das Bild umfließen.“
  • „Das Bild begleitet den Text eher lose, und kann auch einfach daneben stehen.“
  • „Der Text, erklärt das Bild, welches der eigentlich wichtige Inhalt ist. Das Bild sollte also so groß wie möglich dargestellt werden, und der Text darunter stehen.“

Dies ist natürlich nur ein kleiner Auszug der Möglichkeiten, die so vielseitig sein können, wie die Menschen, welche die Inhalte erstellen. Um dies also nicht allzu sehr ausufern zu lassen, wird ein CMS daher eher vereinfachte Optionen anbieten, ohne auf den konkreten Grund für die Text-Bild-Beziehung einzugehen:

  • „Text mit Bildumfluss“
  • „Text mit Bild daneben“
  • „Text mit Bild darüber“

Ein anderes Beispiel ist ganz pragmatischer Natur: Wichtige Textpassagen werden gerne rot markiert. Wenn man mal von den Schwierigkeiten von Menschen mit Rot/Grün-Schwäche absieht, kann das Problem entstehen, dass bei einem Wechsel des Designs diese Passage unleserlich wird, wenn sich auch die Farbe des Texthintergrundes im neuen Design geändert hat. Häufiger ist aber der Fall, dass die konkret gewählte Farbe nicht mehr mit dem Farbkonzept des Designs harmoniert. Vorleseprogramme kommen hier, wie gesagt, ebenfalls an ihre Grenzen.
In diesem Fall ist es ratsam, den Textteil als „wichtig“ zu markieren. Im Design würde man dann wiederum definieren, wie „wichtiger Text“ dargestellt werden soll – dies kann dann wieder, wenn es zum Design passt, rot sein, später aber leicht von zentraler Stelle dem Design entsprechend geändert werden können.

Dem Semantischen Web würden hier natürlich Auszeichnungen helfen, die besagen „Das ist ein Name“, „Hier steht eine Adresse“ oder auch „Dies ist ein Akronym“. Von Suchmaschinen ausgewertet, könnte man schnell Suchanfragen formulieren, die einem zum Beispiel alle Seiten anzeigen, auf denen eine bestimmte Person erwähnt wird. Dies ist jedoch – zumindest bei redaktionell erstellten Texten – Zukunftsmusik, für die aber derzeit die Grundlagen geschaffen werden.

Natürlich kann nicht mit allem so abstrakt verfahren werden, und dem Redakteur sollen durchaus noch Möglichkeiten bleiben, seine Inhalte auch optisch ansprechend zu gestalten. Ob ein Bild im Text Rechts oder linksbündig sein soll, um die Gesamtseite aufzulockern, oder ob er zum Verdeutlichen von Zusammenhängen auch Farbmarkierungen anbringen kann, auf die in nicht-visuellen Darreichungsformen verzichtet werden kann, sollte ihm dabei offen stehen.
Dennoch sollte man das Credo „Weniger ist manchmal mehr“ nicht aus den Augen verlieren und hin und wieder einen Kompromiss eingehen, um in der Zukunft weniger Probleme zu haben.

Fazit:

Zwischen dem utopischen Ideal, alle Informationen mitsamt aller Metadaten zu jeder Zeit und über jede denkbare Kommunikationsform in jeweils bester Weise zur Verfügung gestellt zu bekommen, und einem aramäischen Pergament, welches Sie nur nach jahrelangem Studium entziffern können, liegt irgendwo ein Kompromiss, der die Kommunikation für uns alle vereinfacht. Dazu ist es also manchmal nötig, etwas weniger darüber nachzudenken, wie ich einen Inhalt grafisch aufbereite, und dafür etwas mehr darüber, warum ich ihn genauso haben möchte, wie ich mir das vorgestellt habe.
Oder überspitzt ausgedrückt: „Frage nicht (immer) was das CMS für Dich tun kann, frage auch mal, was Du für das CMS tun kannst (damit es Dich besser versteht)“

MySQL-Upgrade wie es sein sollte

Nicht, dass ich im Allgemeinen zu extremer Prokrastination neige, aber im Falle des netten kleinen ToDos „Update der MySQL-Server auf 5.5“ bin ich eindeutig schuldig. Das schob ich nämlich bereits seit Ende 2012 leise vor mir her, da ich den Aufwand für außerordentlich hoch hielt. Zur Ausgangssituation: Aus historischen Gründen hatten wir eine recht heterogene Landschaft im Bereich MySQL-DB-Server, bestehend aus:

* 1 Master-Slave-Cluster, Version 5.1, basierend auf original MySQL-RPMs

* 2 Master-Slave-Clustern, Version 5.1, basierend auf IUS-RPMs

* 1 Master-Slave-Cluster, Version 5.5, basierend auf original MySQL-RPMs

* 1 Master-Master-Cluster, Version 5.1, basierend auf original MySQL-RPMs

Wohlgemerkt: Alle auf RHEL5! Die nun alle auf eine homogene Basis zu stellen (nämlich Version 5.5, basierend auf IUS-RPMs) und dabei sowohl die Daten als auch die Replikation leben zu lassen, schien nur durch komplette Dump-Restores mit zwischenzeitlicher Neuinstallation der Pakete zu funktionieren. Da wir hier über eine Datenmenge von insgesamt etwa einem Terabyte sprechen, rechnete ich mit einer ziemlich großen Downtime.

Ein wenig Recherche nach der optimalen Vorgehensweise brachte jedoch zutage, dass die Jungs und Mädels der IUS Community (http://iuscommunity.org), deren Repositories wir ja auch oft und gerne benutzen, tatsächlich auch an solche wirren Zustände gedacht haben. Genauer gesagt gibt es das hübsche Plugin „replace“ für die Paketverwaltung yum. Es lässt sich – natürlich nach Integration des IUS-Repos – per „yum install yum-plugin-replace“ installieren und eröffnet die Möglichkeit, yum mit der Option „replace-with“ aufzurufen.

So führt das folgende Kommando bspw. dazu, dass ein bisheriger 5.1-Server auf IUS-Basis nahtlos durch einen 5.5-Server ersetzt wird:

yum replace mysql51-libs --replace-with mysql55-libs

Der Wechsel ist aber – und das ist das eigentliche Erstaunliche – auch aus den MySQL-RPMs heraus möglich:

yum replace MySQL-server-community --replace-with mysql55-server

yum bzw. das Plugin löst selbst alle nötigen Abhängigkeiten auf. Ggf. beschwert es sich, dass die Herkunft einiger beteiligter Pakete nicht ermittelt werden konnte, dies kann man aber problemlos ignorieren.

Letztendlich war es mir so möglich, das gefürchtete Upgrade für alle Server in einer Stunde durchzuführen, ohne dass ich bislang ein Problem feststellen konnte. Einige Hinweise gilt es aber noch zu beachten:

  • Laut MySQL sollte immer der Slave zuerst aktualisiert werden.
  • Nach dem Upgrade von Slave und Master muss auf dem Master das Kommando „mysql_upgrade“ ausgeführt werden, um fehlende MySQL-Tabellen zu ergänzen. Zudem werden bei der Gelegenheit alle Tabellen geprüft und ggf. repariert.
  • Beim Wechsel von MySQL 5.5 aus MySQL-RPMs auf MySQL 5.5 aus IUS-RPMs musste ich zuvor manuell das Paket „MySQL-shared-compat“ entfernen. Das konnte das Plugin aus irgendwelchen Gründen nicht lösen.
  • Bei Statement-basierter Replikation wirft MySQL 5.5 im Gegensatz zu 5.1 Warnungen, wenn Anweisungen bspw. nicht-deterministische Ergebnisse liefern. Diese Warnungen waren nicht zu unterdrücken (jedenfalls habe ich den Schalter nicht gefunden), obwohl wir uns der Tatsache bewusst waren und die entsprechende Datenbank ohnehin von der Replikation ausgenommen hatten. Ein somit ohnehin fälliger Wechsel zum „Mixed“-Format war also unvermeidlich (Schalter „binlog-format = MIXED“)
  • In MySQL 5.5 fallen einige Konfigurationsoptionen weg bzw. sollten durch ihre Nachfolger ersetzt werden. Die Ersetzung kann bereits vor dem Upgrade in der my.cnf durchgeführt werden. Aufgefallen sind bei mir:
    • skip-locking
    • log-err (ersetzt durch log-error)
    • key_buffer (ersetzt durch key_buffer_size)
    • thread_cache (ersetzt durch thread_cache_size)

Mediawiki und LDAP – „Wollen Sie sich wirklich sperren?“

Ein lange gehegter Wunsch war die Anbindung der zentralen Mediawiki-Installation an die LDAP-Authentifizierung. Dank der Mediawiki-Erweiterung „LDAPAuthentication“ war dies prinzipiell auch überhaupt kein Problem. Dann aber kamen seltsame Fehlermeldungen, dass Benutzer plötzlich gesperrt seien, die definitiv noch Zugang zum Wiki haben sollten. Hier muss man nun wissen, dass nicht alle Wiki-User im LDAP verzeichnet sind, sodass zusätzlich auch lokale Accounts parallel existieren müssen. Also gibt es auch unabhängig vom LDAP die Möglichkeit, Benutzer direkt in Mediawiki zu sperren.

Ein Test meinerseits ergab die schöne Fehlermeldung „Sie sind dabei sich selbst zu sperren. Wollen Sie das wirklich?“ Okay, irgendwie geraten also die User bei der Sperrung durcheinander. Aber warum? Die Lösung fand ich in den Tiefen des PHP-Codes von Mediawiki, indem ich alle beteiligten Funktionen nacheinander durchtestete. In der Datei „functions/User.php“ heißt es in der Funktion „newFromName“:

$name = $wgAuth->getCanonicalName( $t->getText() );

Der LDAP-Server wird also nach dem kanonischen Namen des Users gefragt. In der Regel einfach nur unnötig, führt es genau hier sogar zu einem sehr unerfreulichen Ergebnis: Existiert der User nämlich nicht (mehr) im LDAP, werden ungültige Werte zurückgegeben. Dies führt dann dazu, dass plötzlich ein ganz anderer User – in diesem Fall z.B. ich selbst – als „Target“ dient.

Eine Änderung der o.g. Zeile brachte dementsprechend das gewünschte Verhalten:

$name = $t->getText();