Fernwartung mit Freier Software

März 23, 2012

Grundlagen

Ein wichtiger Bestandteil der lernstick-Infrastruktur ist die Fernwartung, da es immer wieder Anwender gibt, die bei der Installation oder der Benutzung Hilfe brauchen.

Der erste Impuls, eine einfache und etablierte Software in die lernstick-Distribution zu integrieren, scheiterte daran, dass es leider bis jetzt noch keine wirklich einfache und etablierte Software zur Fernwartung im Open-Source-Umfeld gibt. Auch proprietäre (und trotzdem kostenlose) Software, wie z.B. TeamViewer, liess sich nicht auf dem lernstick integrieren, da entweder die jeweiligen Hersteller die Weitergabe ihrer Software nicht gestatteten oder in der (kostenlosen) Unterstützung von lernstick-Anwendern einen kommerziellen Einsatzzweck sahen und aus diesem Grund auf sehr heftigen Lizenzzahlungen bestanden. Also mussten wir wieder einmal eine Lösung auf Basis der bereits vorhandenen Open-Source-Komponenten aufbauen…

Bei der Recherche stellt man schnell fest, dass die meisten Open-Source-Programme, die Funktionen zur Fernwartung bereitstellen, VNC verwenden. VNC ist eine Client-Server-Software, bei der der Server die Bildschirmausgaben liefert und der Client die Bildschirmausgaben empfängt und die Maus- und Tastatureingaben des Benutzers an den Server schickt:

Wie so häufig im Open-Source-Umfeld gibt es in Debian (der Basis für den lernstick) verschiedene Softwarepakete für VNC. Wir haben uns für den VNC-Server x11vnc und für den VNC-Client xtightvncviewer entschieden.

Wenn man nun per VNC einem Anwender helfen möchte, so muss der Client auf unserer Seite mit folgendem Aufruf gestartet werden:

xtightvncviewer -listen

Ein Hilfe suchender Anwender muss die Verbindung zu uns mit folgendem Aufruf herstellen:

x11vnc -connect <unsere IP-Adresse>

Damit die Fernwartung auch über das Internet funktioniert, benötigen wir also für unsere eigene Supportstation eine öffentliche IP-Adresse. Wer über keine statische öffentlich IP verfügt, kann sich auch mit einer Kombination aus DynDNS und Portweiterleitung behelfen:

Mobile Supporter

Das ganze funktioniert wunderbar, hat jedoch einen entscheidenden Nachteil: Um Anwender zu unterstützen, müssen wir uns physisch immer direkt an der Supportstation befinden. Also brauchen wir noch eine Lösung, um von überall her auf den Bildschirm unserer Supportstation zugreifen zu können. Und das geht… wieder mit VNC!

Auf unserer Supportstation muss also ständig ein VNC-Server laufen. Dieser wird durch folgenden Aufruf gestartet:

x11vnc -forever

Jetzt könnte man unterwegs auch wieder einen VNC-Client starten, um auf die Supportstation zuzugreifen. Allerdings hat man nicht immer und überall eine VNC-Client-Software zur Verfügung. Aus diesem Grund haben wir auf der Supportstation Guacamole installiert, einen einfachen VNC-Client, der auf HTML5 basiert. Guacamole haben wir dann so konfiguriert, dass er auf den lokalen VNC-Server zugreift. So benötigt ein mobiler Supporter nur noch einen Browser und eine funktionierende HTTP-Verbindung zur Supportstation, um einem Anwender helfen zu können:

Absicherung

Im obigen Szenario werden alle Daten im Klartext übertragen, was gravierende Vertraulichkeitsprobleme (z.B. Mitschneiden von Bildschirminhalten, Passwörtern, …) mit sich bringen kann. Aus diesem Grund müssen beide Verbindungen durch Verschlüsselung der Daten abgesichert werden. Die Verbindung zum Supporter kann einfach abgesichert werden, indem anstatt HTTP die sichere Variante HTTPS verwendet wird. Dazu reicht es, Apache Tomcat, die Ausführungsumgebung von Guacamole, nach folgender Anleitung entsprechend zu konfigurieren: http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

Zur Absicherung der VNC-Verbindung verwenden wir stunnel, ein universeller SSL-Tunneling-Dienst. Zunächst müssen wir auf der Supportstation ein Zertifikat erzeugen, z.B. mit openssl:

openssl req -x509 -nodes -day 36500 -subj /C=/ST=/L=/CN=tmp -newkey rsa:1024 \
-keyout zertifikat.pem -out zertifikat.pem

Dieses Zertifikat kann dann verwendet werden, um einen sicheren Tunnel an einem bestimmten Port anzubieten, der alle Daten an den VNC-Client weiterleitet (der an Port 5500 lauscht). Beispiel für einen sicheren Tunnel an Port 50000:

stunnel -f -P '' -p zertifikat.pem -d 50000 -r 5500

Der Anwender muss dann den Aufruf zum Verbindungsaufbau um die Option „-ssl TMP“ ergänzen:

x11vnc -connect <unsere IP-Adresse> -ssl TMP

Jetzt wird eine verschlüsselte Verbindung zwischen Anwender und Supportstation aufgebaut. Somit sind beide Verbindungen gegen passives Abhören abgesichert:

Da die involvierten Zertifikate in diesem Szenario weder vom Supporter noch vom Anwender überprüft werden, ist die Verbindung nicht gegen Man-in-the-middle-Angriffe sicher. Die erforderlichen Massnahmen zur Absicherung gegen solche aktiven Angriffe würden jedoch den Rahmen dieses Artikels sprengen.

Vereinfachung

Da die benötigten Befehle recht kompliziert sind, haben wir eine grafische Oberfläche entwickelt, die sowohl für den Supporter als auch für den Anwender die syntaktischen Details versteckt. Der Supporter kann neben den sicheren Portnummern auch Bildeigenschaften wie Kompression, Qualität und Farbtiefe spezifizieren:

Da wir nicht die einzige Stelle sind, die Unterstützung für den lernstick anbietet, kann der Anwender aus einer Liste von Anbietern auswählen und diese Liste auch bearbeiten. Ausserdem kann er angeben, mit welcher Skalierung das Bild verkleinert wird, bevor es zum Supporter übertragen wird. Das kann z.B. dann sinnvoll sein, wenn der Supporter einen kleineren Bildschirm als der Anwender hat oder die Bandbreiten sehr gering sind.

Fazit und Ausblick

Die bisher entwickelte Lösung funktioniert sehr zufriedenstellend. Sie besteht ausschliesslich aus Freier Software und die Vertraulichkeit der Fernwartungsverbindungen ist sehr hoch, da die Daten nur zwischen den Anwendern und Supportern und nicht über die Infrastruktur eines Anbieters von Fernwartungssoftware ausgetauscht werden.

Wir haben allerdings auch Anwender, deren Computer sich hinter sehr restriktiven Firewalls befinden, die z.B. nur HTTP-Verkehr zulassen. Dort funktioniert die Fernwartung bisher nicht. Also müssen wir die Lösung irgendwann noch um eine Komponente erweitern, die Firewalls „austrickst“ und das VNC-Protokoll über HTTP tunnelt. Das klingt doch nach einer ziemlich spannenden Aufgabe! 🙂


Nicht ohne meine Daten(krake)

Juli 8, 2011

Vor kurzem habe ich mit meinen Arbeitskollegen über das Editorial der c’t „Nicht ohne meine Daten“ diskutiert. Ein Kollege meinte, dass der Verzicht auf Facebook und Co bedeutet, Freiheit mit dem Preis einer „virtuell/sozialen“ Isolation zu erkaufen.

Das hat mich irgendwie an meine Schulzeit erinnert. Viele Jahre war ich der einzige Nichtraucher in unserer Altersklasse und soziale Kontakte begannen ziemlich häufig mit „Haste mal Feuer?“. Sollte man jetzt anfangen zu rauchen, um nicht in Isolation zu verfallen? Ich bin den schwierigeren Weg gegangen, habe nicht mit rauchen angefangen und hatte trotzdem nicht weniger Kontakte als meine rauchenden Mitschüler. Mit unseren Händen haben wir Nichtraucher einfach interessantere Dinge gemacht, als uns an Glimmstengeln festzuhalten und dabei ein möglichst erwachsenes Gesicht zu machen. Es kommt eben auch bei Kontakten nicht auf die Quantität sondern die Qualität an.

Es gibt ja auch die „Nichtraucher“-Variante von sozialen Netzwerken, die für einen persönlich gesünder, da von Anfang an datenschutzfreundlich ausgelegt sind. Da sich mit solchen Lösungen keine Milliarden an Werbeeinnahmen  verdienen lassen, ist natürlich auch deren Sichtbarkeit geringer. Das hat Parallelen mit so vielen anderen Bereichen des Lebens (Gentechnik versus Bio, Maximalprofit versus Fairtrade, proprietär versus Open Source, …) dass ich das schon als  Gesetzmässigkeit ansehe: die guten Dinge sind selten die, die am lautesten beschrieen werden, sondern man muss sie häufig suchen. Eine kurze Suche (ja, mit Google, oje!) hat mich auf folgenden Vortrag von Eben Moglen gebracht: „Freedom in the cloud“. Sehr sehens- und hörenswert!

Mag natürlich sein, dass die datenschutzfreundlichen sozialen Netzwerke viele Grössenordnungen kleiner sind als die etablierten Monopole und einem das im direkten Vergleich fast als Isolation vorkommen mag aber auf jeden Menschen kommen auch angeblich 9 Milliarden Insekten. Ich möchte trotzdem lieber Mensch als Heuschrecke sein. 🙂


HP und die proprietären Plugins

Februar 18, 2011

Obwohl Hewlett-Packard eine vorbildlich gute Linux-Unterstützung für seine Drucker anbietet, benötigen leider einige HP-Drucker ein proprietäres Plugin, um vollständig zu funktionieren.

HP hat sogar die Installation dieser proprietären Plugins in seine Toolbox integriert. Leider schlägt die Installation dieses Plugins bei mir immer mit folgender Fehlermeldung fehl:

Plug-in install failed.
The printer you are trying to setup requires a binary driver plug-in and it failed to install.

Auf dem lernstick konnte ich die Installation des proprietären Plugins mit folgenden zwei Befehlen dennoch erfolgreich ausführen:

wget http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-3.10.6-plugin.run

kdesudo sh hplip-3.10.6-plugin.run

Optimistisch wie ich bin, gehe ich natürlich nicht davon aus, das HP eine schlechte Qualitätskontrolle hat, sondern einfach nur den Verkauf solcher Drucker fördern will, die eben kein proprietäres Plugin benötigen. 🙂


Es geht voran…

Februar 12, 2011

Der lernstick wird immer häufiger auch auf älteren Computern eingesetzt. Eine Herausforderung bei älteren Geräten ist der meist sehr kleine Arbeitsspeicher. Wenn der zu klein ist und grössere Programme gestartet werden, kann es passieren, dass der Computer einfach hängenbleibt oder komplett abstürzt. Um das zu verhindern, habe ich vor kurzem ein kleines Startskript erstellt, das beim Hochfahren überprüft, ob das System genügend Hauptspeicher hat und im Notfall eine Auslagerungsdatei erstellt. Damit es optisch auch etwas ansprechend aussieht, wollte ich, dass bei der Erstellung der Auslagerungsdatei dem Benutzer via dialog eine Fortschrittsanzeige präsentiert wird.

Das war deutlich schwieriger als ich zunächst vermutete. Das Programm der Wahl für die Erstellung einer Auslagerungsdatei ist dd. Leider bietet dd keine einfache Schnittstelle, um dessen Fortschritt abzufragen. Auch Google half nicht viel weiter. Alle Beispiele, die ich im Netz zu dem Thema gefunden hatte, funktionierten nicht. Also habe ich mich selbst in die Materie vertieft und eine funktionierende Variante erstellt:

#!/bin/bash
COUNT=500000
(
LC_ALL=C dd if=/dev/zero of=/dev/null bs=1M count=${COUNT} 2>&1 | while read LINE
do
    echo ${LINE} | grep -q "records out$"
    if [ $? -eq 0 ]
    then
        echo "$((${LINE%+*}*100/${COUNT}))" | dialog --gauge "dd progress..." 6 45
    fi
done
)&
sleep 1
DD_PID=$(pidof dd)
while kill -USR1 ${DD_PID} 2>/dev/null
do
    sleep 1
done

Falls jemand irgendwann über das gleiche Problem stolpert, darf er sich also gerne an obigem Beispiel bedienen.


Interpretationen einer Überschrift

Januar 24, 2011

Die Überschrift der educa-lernstick-Seite ist:

Am Schlüsselbund
Ihr personalisierter mobiler Computer

Diese Überschrift alleine hat gereicht, um eine recht intensive Diskussion in Gang zu setzen. Überschriften sind verkürzte Formulierungen, die komplexe Werke oder Texte möglichst prägnant beschreiben sollen, sie dürfen und müssen also auch Details weglassen können.

Niemand hat je behauptet, dass der lernstick ein vollständiger Computer sei. Dies ist eine Fehlinterpretation der Überschrift. Der lernstick ist der wichtige, personalisierte und mobile Teil eines Computers, der Platz am Schlüsselbund hat. Die anderen Teile  eines Computers (Tastatur, Bildschirm, CPU, RAM, Schnittstellen, …) sind frei austauschbar, unpersönlich, können komplett heterogen und müssen (z.B. im Fall von Desktop-Computern) selbst nicht einmal mobil sein. Im lernstick-Kontext sind Hard- und Software also komplett voneinander entkoppelt. Sobald ich irgendeinen Computer mit dem lernstick betreibe, ist es mein persönlicher Computer. Daheim, auf Arbeit und in der Schule kann das ein leistungsstarker Desktop oder ein grosses Notebook sein, unterwegs ein kleines Netbook oder sogar ein Smartphone.

Natürlich muss man beim Einsatz des lernsticks entweder vorhandene Hardware weiterverwenden odere neue beschaffen. Im lernstick-Szenario kann man, sollte man vielleicht sogar, muss aber nicht für jeden Benutzer dedizerte Hardware vorhalten. So kann auch mit weniger Computern als lernsticks jeder seinen persönlichen Computer haben, solange nicht alle Benutzer gleichzeitig die Hardware in Anspruch nehmen müssen.

Aus diesen Gründen bringt meiner Meinung nach die Überschrift auf der educa-Seite die Grundidee des lernsticks wunderbar auf den Punkt. Auch wenn es eben eine verkürzte Aussage ist.

Ihr personalisierter mobiler Teil eines Computers

… klingt einfach ziemlich daneben. Aber das ist keine Tatsache sondern nur (m)eine Meinung. Und über Meinungen kann man ja vortrefflich streiten…


Was ist ein Computer?

Januar 22, 2011

Seit einiger Zeit leite ich das lernstick-Projekt. Der lernstick ist ein auf Debian Live basierendes System, das auf handelsüblichen USB-Sticks, USB-Festplatten oder Speicherkarten installiert werden kann, so dass (fast) jeder beliebige Computer von diesen Speichermedien gestartet werden kann.

Wir entwickeln den lernstick im Auftrag der Hasler Stiftung seit 2009 an der Pädagogischen Hochschule der Fachhochschule Nordwestschweiz und haben nun ein paar tausend Schülerinnen und Schüler mit dem lernstick ausgerüstet. Seit kurzem beteiligt sich nun auch die Educa, die nationale Anlaufstelle für Fragen rund um Informations- und Kommunikationstechnologien in der Bildung der Schweiz, an unserem Projekt, siehe educa-lernstick.

Mein von mir hoch geschätzter Kollege Beat Doebeli hat sich daraufhin in einem Blog-Eintrag sehr über die Wortwahl der educa „personalisierter mobiler Computer am Schlüsselbund“ mokiert und festgestellt, dass der lernstick kein Computer sei.

Ich will die Gelegenheit nutzen, ein paar Gedanken über die Definition von „Computer“ loszuwerden.

Als ich 1987 meinen ersten Computer in die Hände bekam, einen KC 87, war relativ klar, was ein Computer ist: hauptsächlich eine Recheneinheit, Arbeitsspeicher, Tastatur noch ein paar zusätzliche Schnittstellen für Bildschirm, Drucker, usw.

Heutzutage ist die IT jedoch viel komplexer, vielfältiger und auch kombinierbarer geworden.

Daheim haben wir ziemlich viele Computer rumstehen, ich administriere jedoch nur einen einzigen (recht leistungsstarken) Computer. Alle anderen Computer sind (leistungsschwache und stromsparende) Thin-Clients, die lediglich der Ein- und Ausgabe dienen. Um arbeitsfähig zu sein, „borgen“ sich Thin-Clients also den RAM, die Festplatte und die CPU eines Servers. Ist ein Thin-Client kein Computer?

Der Server wiederum hat weder Bildschirm noch Tastatur, Maus, Drucker, Joystick, Webcam, Headset oder Lautsprecher. Das „borgt“ sich der Server alles ganz dynamisch von den jeweiligen gerade angeschlossenen Thin-Clients. Ist ein Server kein Computer?

Genauso wie ein Thin-Client oder ein Server allein nicht sinnvoll einsetzbar sind, ist es auch ein lernstick nicht. Der lernstick muss sich von einem Wirtssystem RAM, CPU und Schnittstellen borgen. Ist ein lernstick (k)ein Computer?

Natürlich ist er kein Computer im klassischen Sinn, da er Daten nicht selbst verarbeitet. Er kann jedoch jederzeit mit der überall vorhandenen Hardware (grosse, leistungsstarke Desktops daheim und in der Schule und kleine, sparsame Notebooks unterwegs) so kombiniert werden, dass man einen personalisierten Computer in den Händen hält oder (im Falle eines Desktops) er vor einem steht.

Da der lernstick so klein ist, dass er am Schlüsselbund Platz hat, wird jetzt vielleicht auch verständlich, warum die educa das Projekt mit der Überschrift „personalisierter mobiler Computer am Schlüsselbund“ bewirbt. Das wird vielleicht nicht der klassischen Definition gerecht, klingt aber deutlich besser als:

Betriebssystem mit automatischer Hardwareerkennung und Speichermöglichkeit für zusätzliche Programme, persönliche Daten und Einstellungen auf einem physisch kleinen Datenträger, der (fast) jeden Computer in Ihr persönliches Gerät verwandelt, den Sie auch am Schlüsselbund befestigen können

Frieden?