sysadmin - 12.5.2005 - 6.8.2005

man lernt doch nie aus

Ich hab ja bisher gedacht ich würde die meisten Tricks von ssh drauf haben. Aber ich bin dann doch mal über einen gestolpert, der banal und simpel ist, mir aber noch nicht bekannt war: die Option ProxyCommand. Mit dieser Option kann man für einen angegebenen Host einen Tunnel definieren der aufgebaut wird, bevor die eigentliche Verbindung gemacht wird. Mit dem Programm nc (Netcat) auf dem Rechner eins vor dem Zielsystem kann man sich damit wunderbar durch eine Kette von Firewalls tunneln, vor allem wenn man mit Auth-Forwarding arbeitet. Einfach in der .ssh/config einen Bereich ähnlich diesem einbauen:


 Host safe
 Protocol 2
 User me
 HostName 192.168.0.42
 ProxyCommand ssh door nc -q 0 safe 22

Hier wird jetzt einfach bei ssh safe intern mittels ssh door eine Verbindung zum Rechner door aufgebaut und dann dort eine Netcat-Verbindung zum ssh-Daemon auf dem eigentlichen Zielrechner safe erstellt. Das ganze kann man auch über mehrere ssh Hops wunderbar nutzen um dann direkt zwischen zwei Systemen durch eine Kette von Firewalls Files zu transportieren. ssh ist schon genial, wenns das nicht gäbe müsste man es glatt erfinden

(in meinem Fall brauchte ich das für darcs - das kann nämlich nur über ssh Repositories pushen)

Ciscos Kundenpasswörter sind weg - das ist so peinlich, das tut schon richtig weh. Oha. Und das Cisco.

Django, Apache und FCGI

In Django, lighttpd und FCGI, zweiter Versuch habe ich eine Methode beschrieben, wie man Django mit FCGI hinter einer lighttpd-Installation ausführen kann. Ich habe die Django-FCGIs als eigenständige Server ausgeführt, sodass Sie sie unter unterschiedlichen Benutzern als der Webserver ausführen können. Dieses Dokument gibt Ihnen die benötigten Informationen, um dasselbe mit Apache 1.3 zu tun.

Aktualisierung: Ich pflege meine Beschreibungen jetzt in meinem Trac-System. Siehe die Apache+FCGI-Beschreibung für Django.

Aktualisierung: Ich habe von der Verwendung von Unix-Sockets zur Verwendung von TCP-Sockets in der Beschreibung gewechselt. Der Grund ist, dass Unix-Sockets Schreibzugriff von beiden Prozessen - Webserver und FCGI-Server - benötigen und das manchmal schwer einzurichten ist. TCP-Sockets sind nur ein bisschen langsamer, aber viel einfacher einzurichten.

Zuerst die Hauptfrage, die einige stellen könnten: Warum Apache 1.3? Die Antwort ist einfach: Viele Menschen haben immer noch Apache 1.3 als ihren Hauptserver laufen und können nicht leicht auf Apache 2.0 aktualisieren - zum Beispiel, wenn sie große Codebasen in mod_perl oder mod_python ausführen, werden sie Probleme bei der Migration haben, weil Apache 2.0 mod_perl2 oder mod_python2 erfordert und beide nicht vollständig kompatibel mit älteren Versionen sind. Und obwohl lighttpd ein fantastischer Webserver ist, wenn Sie bereits Apache 1.3 ausführen, gibt es möglicherweise einfach keinen Bedarf für einen weiteren Webserver.

Was benötigen Sie also - neben den Python- und Django-Dingen - für Apache 1.3 mit FastCGI? Nur das mod_rewrite-Modul und das mod_fastcgi-Modul installiert, das ist alles. Beide sollten mit der Verteilung Ihres Systems geliefert werden. Sie werden immer noch alle Python-Dinge benötigen, die ich im lighttpd-Artikel aufgeführt habe.

mod_fastcgi ist etwas eigenwillig in seiner Installation, ich musste ein bisschen damit herumspielen. Es gibt ein paar Stolpersteine, an die ich denken kann:

  • Die Angabe des Sockets kann kein absoluter Pfad sein, sondern muss ein relativer Pfad in Bezug auf das FastCgiIpcDir sein.
  • Die Angabe des FCGI selbst (auch wenn es rein virtuell ist) muss in einer vollständig qualifizierten Form in Bezug auf das Dokumentenstammverzeichnis, das Sie verwenden möchten. Wenn Sie einen relativen Pfad verwenden, wird er relativ zum Dokumentenstammverzeichnis des Standard-Virtual-Hosts sein - und das ist mit Sicherheit nicht das Dokumentenstammverzeichnis, das Sie verwenden werden, wenn Sie einen Virtual-Host mit dem FCGI einrichten möchten.
  • Das FCGI selbst kann nicht innerhalb eines Virtual-Hosts definiert werden - es muss in der Hauptserverkonfiguration definiert werden. Hier kommt das Problem der relativen Adressierung ins Spiel.
  • Die Socket-Datei muss sowohl vom FCGI-Benutzer als auch vom Apache-Benutzer lesbar und beschreibbar sein. Normalerweise tun Sie dies, indem Sie die Socket-Datei gruppenschreibbar ändern und die Gruppe dieser Socket-Datei in eine Gruppe ändern, der sowohl der Benutzer als auch der Apache angehören.

Hier ist der Konfigurationsausschnitt, den Sie zu Ihrer httpd.conf hinzufügen müssen. Ich verwende die gleichen Verzeichnisse wie im lighttpd-Beispiel, Sie werden dies wahrscheinlich an Ihre Situation anpassen müssen.


FastCgiExternalServer /home/gb/work/myproject/publichtml/admin.fcgi -host 127.0.0.1:8000
FastCgiExternalServer /home/gb/work/myproject/publichtml/main.fcgi -host 127.0.0.1:8001

<VirtualHost *>
ServerAdmin gb@bofh.ms
Servername www.example.com
ErrorLog /home/gb/work/myproject/logs/django-error.log
CustomLog /home/gb/work/myproject/logs/django-access.log combined
DocumentRoot /home/gb/work/myproject/public_html
RewriteEngine On
RewriteRule ^(/admin/.)$ /admin.fcgi$1 [L]
RewriteRule ^(/main/.)$ /main.fcgi$1 [L]
</VirtualHost> ```

Sie müssen dem Webserver Schreibzugriff auf das Log-Verzeichnis ermöglichen, daher möchten Sie möglicherweise einen anderen Ort dafür verwenden - möglicherweise in `/var/log/apache/` oder wo auch immer Ihr Apache seine Logs hinstellt. Die FastCgiExternalServer-Direktiven müssen außerhalb der Virtual-Host-Definitionen stehen, müssen aber auf Dateien innerhalb des Dokumentenstammverzeichnisses der Virtual Hosts verweisen. Diese Dateien müssen jedoch (und sollten wahrscheinlich nicht) im Dateisystem existieren, sie sind rein virtuell. Die gegebene Einrichtung spiegelt die Einrichtung wider, die ich für das lighttpd-Szenario vorgenommen habe.

Starten Sie nun Ihren Apache neu, starten Sie Ihr django-fcgi.py und Sie sollten auf Ihre Django-Anwendung zugreifen können. Vergessen Sie nicht, die admin_media-Dateien in das Dokumentenstammverzeichnis zu kopieren, sonst wird Ihr Admin sehr hässlich aussehen.

django-fcgi.py --settings=myproject.settings.main --host=127.0.0.1 --port=8000 --daemon django-fcgi.py --settings=myproject.settings.admin --host=127.0.0.1 --port=8001 --daemon


Viel Spaß.

Das Äquivalent zum Apple FileSafe unter Linux: Automatically mount dm-crypt encrypted home with pam_mount. Gerade für Notebooks sehr sinnvoll, aber auch bei Arbeitsplatzrechnern von Administratoren (wegen der vielen sicherheitsrelevanten Files die sich so im Homeverzeichnis ansammeln).

Wer sich mal mit grösserer Erlang-Software beschäftigen möchte und einen Jabber-Server ausprobieren will, für den ist vielleicht ejabberd interessant - ein Jabber-Server der all die netten Features von Erlang ausnutzt um zum Beispiel einfaches Clustering und gute Datenverteilung zu bieten.

Und noch einer Linux-auf-Mac Story. Diesmal ein iBook und Gentoo. Für eine kleine und preiswerte Linux-Kiste für Unterwegs ganz brauchbar.

Die Linux on an Apple Powerbook HOWTO liefert genau das was ich bräuchte, wenn ich mein 12" Powerbook auf Linux umstellen wollen würde - der Autor benutzt sogar genau mein Modell. Und nein, noch will ich nicht umsteigen

(Un)trusted platform Apple?

Da es gerade modern ist zu erklären das man switched, wenn Apple TPA - oder wie auch immer das Zeugs dann in Zukunft heissen mag - einsetzt: erstmal abwarten. Angucken was Apple macht und wie - Gerüchte gibts vorher immer.

Wenn dann tatsächlich TPA drin ist: Linux kann auch ein brauchbares System sein, auch wenn die Oberflächen ziemlich krank sind (wobei aktuelle XFCE-Versionen garnicht mal so übel aussehen) und wenn in Apple-Hardware eh kein PPC mehr drin steckt und man Linux draufpackt: da kann man auch sein Notebook bei IBM kaufen. Die haben nette Geräte die auch ganz hervorragend unter Linux funktionieren.

Und last but not least: nur weil neue Apple-Hardware anders ist verändert sich die schon gekaufte Hardware nicht - und die hält Apple-typisch meist ein paar Jahre länger. Und unter Linux wird mancher Mac sogar schneller als unter OS X

Zerospan scheint eine P2P-Software mit Verschlüsselung und Integration von Bonjour (ex-Rendevouz, ex-Zeroconf) zu sein. So richtig schlau werd ich nicht draus, denn der Download enhält keine Doku und das Wiki mit der Doku ist zur Zeit kaputt, daher mal geblogmarked um es mir später mal anzugucken.

Novell will SCO an den Kragen

Und ihre Betrachtungen über die Rechtslage würden - wenn sie denn vor Gericht Bestand haben - SCO wirklich eine empfindliche Schlappe verpassen.

Der ganze SCO-Linux-Film ist ja recht spannend, aber ganz ehrlich: die Längen zwischen den Actionszenen sind doch ein bischen übertriebn

Vom Umgang mit Security

Unter ISS geht gegen Veröffentlichung des Vortrags über Cisco-Schwachstellen vor findet man eine Beschreibung wie sich Cisco und ISS Sicherheit vorstellen: massive Eingriffe in die Äusserungsrechte eines Vortragenden auf der Black-Hat-Konferenz. Ok, der war Ex-Mitarbeiter von ISS und hat wohl Informationen genutzt die er nicht veröffentlichen sollte - aber genau diese hirnrissige Geheimniskrämerei ist es ja, die Sicherheit unterminiert - denn das die Angreifer dieses Wissen früher oder später erlangen ist garantiert - wenn Sicherheitslücken existieren, werden sie früher oder später gefunden. Findet Sie jemand der darüber öffentlich berichtet, kann man sich wenigstens dagegen wehren und Gegenmaßnahmen einleiten. Wird die Veröffentlichung unterdrückt, ist der Leidtragende letztendlich der Endanwender - der keine Möglichkeit bekommt sich überhaupt abzusichern - und sei es im Notfall durch Wechsel zu einem anderen Routerhersteller.

Von daher ist es in der Tat so: weder ISS noch Cisco machen damit ein gutes Bild in der Öffentlichkeit. Im Gegenteil, deren Zensurversuche sind eigentlich nur noch ein Argument bei zukünftigen Produktentscheidungen sich gegen Cisco zu entscheiden - denn man kann deren Sicherheitsaussagen ja ganz offensichtlich nicht trauen.

Sysadmins Day

Lisa9 zeigt wie man anständig einem Sysadmin huldigt! Sogar DAU-tauglich mit bebilderter Anleitung

Linux-VServer ist ein Kernel-Patch und ein Satz Utilities die es ermöglichen auf einer Basismaschine eine Reihe von virtuellen Linux-Kisten laufen zu haben deren Resourcen stark gegeneinander abgeschottet sind. chroot on steroids, oder am ehesten mit BSD Jails zu vergleichen. Interessant für Hosting-Projekte bei denen virtuelle Rootserver gefordert sind. Ist sogar in der aktuellen Debian drin.

Tor Network Status liefert eine Übersicht über Exit-Nodes im tor Netzwerk mit Trafficangaben, erlaubten Ports und IP-Daten. Nett. (gefunden über den Rabenhorst)

Django, lighttpd und FCGI, zweiter Versuch

In meinem ersten Versuch mit diesem Zeug habe ich ein Beispiel gegeben, wie man Django-Projekte hinter lighttpd mit einfachen FCGI-Skripten, die in den Server integriert sind, ausführen kann. Ich werde ein wenig mehr über dieses Zeug erzählen, mit einer Möglichkeit, lighttpd und Django zu kombinieren, die viel mehr Flexibilität bei der Verteilung von Django-Anwendungen über Maschinen bietet. Dies ist besonders wichtig, wenn Sie mit hohen Lasten auf Ihren Servern rechnen. Natürlich sollten Sie den Django-Caching-Middleware verwenden, aber es gibt Zeiten, in denen selbst das nicht ausreicht und die einzige Lösung darin besteht, mehr Hardware an das Problem zu werfen.

Aktualisierung: Ich pflege meine Beschreibungen jetzt in meinem Trac-System. Siehe die lighty+FCGI-Beschreibung für Django.

Hinweis: Da Django sehr neue Software ist, habe ich keine Produktionserfahrungen damit. Daher handelt es sich hier eher um einen theoretischen Standpunkt, in den Wissen einfließt, das ich durch den Betrieb von Produktionssystemen für mehrere größere Portale gewonnen habe. Am Ende kommt es nicht so sehr darauf an, welche Software Sie verwenden - es kommt nur darauf an, wie Sie sie über Ihren Server-Farm verteilen können.

Um dieser Dokumentation zu folgen, benötigen Sie die folgenden Pakete und Dateien, die auf Ihrem System installiert sind:

  • [Django][2] selbst - derzeit aus dem SVN geholt. Folgen Sie den Setup-Anweisungen oder verwenden Sie python setup.py install.
  • [Flup][3] - ein Paket mit verschiedenen Möglichkeiten, WSGI-Anwendungen auszuführen. In dieser Dokumentation verwende ich den threaded WSGIServer.
  • [lighttpd][4] selbstverständlich. Sie benötigen mindestens die FastCGI-, die Rewrite- und die Accesslog-Module, diese werden in der Regel mit dem System kompiliert.
  • [Eunuchs][5] - nur erforderlich, wenn Sie Python 2.3 verwenden, da Flup socketpair in den vorkompilierten Servern verwendet und dies erst ab Python 2.4 verfügbar ist.
  • [django-fcgi.py][6] - mein FCGI-Server-Skript, das eines Tages Teil der Django-Distribution sein könnte, aber für den Moment einfach hier herunterladen. Legen Sie dieses Skript irgendwo in Ihren $PATH, z.B. /usr/local/bin und machen Sie es ausführbar.
  • Wenn das oben genannte aus irgendeinem Grund nicht funktioniert (vielleicht unterstützt Ihr System socketpair nicht und kann daher den vorkompilierten Server nicht verwenden), können Sie [django-fcgi-threaded.py][7] - eine Alternative, die den Threading-Server mit all seinen Problemen verwendet. Ich verwende es zum Beispiel auf Mac OS X für die Entwicklung.

Bevor wir beginnen, lassen Sie uns ein wenig über Serverarchitektur, Python und hohe Last sprechen. Die noch bevorzugte Installation von Django erfolgt hinter Apache2 mit mod python2. mod python2 ist eine recht leistungsfähige Erweiterung für Apache, die einen vollständigen Python-Interpreter (oder sogar viele Interpreter mit unterschiedlichen Namensräumen) in den Apache-Prozess integriert. Dies ermöglicht es Python, viele Aspekte des Servers zu steuern. Aber es hat einen Nachteil: Wenn der einzige Zweck darin besteht, Anfragen von Benutzern an die Anwendung weiterzuleiten, ist es eine ziemliche Übertreibung: Jeder Apache-Prozess oder Thread wird einen vollständigen Python-Interpreter mit Stack, Heap und allen geladenen Modulen enthalten. Apache-Prozesse werden auf diese Weise etwas fett.

Ein weiterer Nachteil: Apache ist einer der flexibelsten Server da draußen, aber im Vergleich zu kleinen Servern wie lighttpd ein Ressourcenfresser. Und - aufgrund der Architektur der Apache-Module - wird mod_python die vollständige Anwendung im Sicherheitskontext des Webservers ausführen. Zwei Dinge, die Sie in Produktionsumgebungen nicht oft mögen.

Ein natürlicher Ansatz ist also die Verwendung leichterer HTTP-Server und das Hinterlegen Ihrer Anwendung dahinter - unter Verwendung des HTTP-Servers selbst nur zum Servieren von Medien und unter Verwendung von FastCGI, um Anfragen vom Benutzer an Ihre Anwendung weiterzuleiten. Manchmal stellen Sie diesen kleinen HTTP-Server hinter einen Apache-Front, der nur mod_proxy (entweder direkt oder über mod_rewrite) verwendet, um Anfragen an den Webserver Ihrer Anwendung weiterzuleiten - und glauben Sie es oder nicht, dies ist tatsächlich viel schneller als das Servieren der Anwendung direkt mit Apache!

Die zweite Falle ist Python selbst. Python hat eine recht schöne Threading-Bibliothek. Es wäre also ideal, Ihre Anwendung als Thread-Server zu erstellen - weil Threads viel weniger Ressourcen als Prozesse verbrauchen. Aber das wird Sie beißen, wegen einer speziellen Funktion von Python: der GIL. Der gefürchtete globale Interpreter-Lock. Dies ist kein Problem, wenn Ihre Anwendung zu 100% Python ist - der GIL greift nur, wenn interne Funktionen verwendet werden oder wenn C-Erweiterungen verwendet werden. Schade, dass fast alle DBAPI-Bibliotheken mindestens einige Datenbank-Client-Code verwenden, der eine C-Erweiterung verwendet - Sie starten einen SQL-Befehl und das Threading wird deaktiviert, bis der Aufruf zurückkehrt. Keine mehreren Abfragen laufen ...

Die bessere Option ist also die Verwendung eines Fork-Servers, weil der GIL dann nicht greift. Dies ermöglicht einem Fork-Server, mehrere Prozessoren in Ihrer Maschine effizient zu nutzen - und so auf lange Sicht viel schneller zu sein, trotz des Overheads von Prozessen gegenüber Threads.

Für diese Dokumentation nehme ich einen dreischichtigen Ansatz zur Verteilung der Software: Die Front wird Ihr vertrauenswürdiger Apache sein, der einfach alles an Ihren projektspezifischen lighttpd weiterleitet. Der lighttpd hat Zugriff auf das Dokumentenstammverzeichnis Ihres Projekts und leitet spezielle Anfragen an Ihren FCGI-Server weiter. Der FCGI-Server selbst kann auf einem anderen Rechner laufen, wenn dies für die Lastverteilung erforderlich ist. Er wird einen vorkompilierten Server verwenden, weil es in Python ein Threading-Problem gibt, und er kann Multiprozessor-Maschinen nutzen.

Ich werde nicht viel über die erste Ebene sprechen, weil Sie dies leicht selbst einrichten können. Leiten Sie einfach Dinge an die Maschine weiter, auf der Ihr lighttpd läuft (in meinem Fall läuft der Apache normalerweise auf anderen Maschinen als die Anwendungen). Schauen Sie in der mod_proxy-Dokumentation nach, normalerweise ist es nur ProxyPass und ProxyPassReverse.

Die zweite Ebene ist interessanter. lighttpd ist ein bisschen seltsam in der Konfiguration von FCGI-Dingen - Sie benötigen FCGI-Skripte im Dateisystem und müssen diese mit Ihrem FCGI-Serverprozess verbinden. Die FCGI-Skripte müssen tatsächlich keinen Inhalt enthalten - sie müssen nur im Dateisystem vorhanden sein.

Wir beginnen also mit Ihrem Django-Projektverzeichnis. Legen Sie einfach ein Verzeichnis public_html dort hinein. Das ist der Ort, an dem Sie Ihre Mediendateien ablegen, z.B. das Admin-Media-Verzeichnis. Dieses Verzeichnis wird das Dokumentenstammverzeichnis für Ihren Projekt-Server sein. Stellen Sie sicher, dass Sie nur Dateien dort ablegen, die keine privaten Daten enthalten - private Daten wie Konfigurationen und Module sollten besser an Orten bleiben, die nicht vom Webserver zugänglich sind. Als Nächstes richten Sie eine lighttpd-Konfigurationsdatei ein. Sie werden nur die Rewrite- und die FastCGI-Module verwenden. Keine Notwendigkeit, ein Zugriffsprotokoll zu führen, dies wird von Ihrer ersten Ebene, Ihrem Apache-Server, geschrieben. In meinem Fall befindet sich das Projekt in /home/gb/work/myproject - Sie müssen dies an Ihre eigene Situation anpassen. Speichern Sie den folgenden Inhalt als /home/gb/work/myproject/lighttpd.conf


 server.modules = ( "mod_rewrite", "mod_fastcgi" )
 server.document-root = "/home/gb/work/myproject/public_html"
 server.indexfiles = ( "index.html", "index.htm" )
 server.port = 8000
 server.bind = "127.0.0.1"
 server.errorlog = "/home/gb/work/myproject/error.log"

fastcgi.server = (
"/main.fcgi" => (
"main" => (
"socket" => "/home/gb/work/myproject/main.socket"
 )
 ),
"/admin.fcgi" => (
"admin" => (
"socket" => "/home/gb/work/myproject/admin.socket"
 )
 )
 )

url.rewrite = (
"^(/admin/.*)$" => "/admin.fcgi$1",
"^(/polls/.*)$" => "/main.fcgi$1"
 )

mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "audio/x-wav",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv"
 )

Ich binde den lighttpd nur an die localhost-Schnittstelle, weil in meiner Testumgebung der lighttpd auf demselben Host wie der Apache-Server läuft. In Multi-Server-Einstellungen werden Sie den lighttpd-Servern natürlich an die öffentliche Schnittstelle binden. Die FCGI-Skripte kommunizieren in dieser Einstellung über Sockets, weil in dieser Testumgebung ich nur einen Server für alles verwende. Wenn Ihre Maschinen verteilt wären, würden Sie die "host" und "port" Einstellungen anstelle der "socket" Einstellung verwenden, um mit FCGI-Servern auf verschiedenen Maschinen zu verbinden. Und Sie würden mehrere Einträge für die "main" Sache hinzufügen, um die Last der Anwendung auf mehrere Maschinen zu verteilen. Schauen Sie in der lighttpd-Dokumentation nach, welche Optionen Sie haben werden.

Ich richte zwei FCGI-Server für dies ein - einen für die Admin-Einstellungen und einen für die Haupt-Einstellungen. Alle Anwendungen werden durch die Haupt-Einstellungen FCGI weitergeleitet und alle Admin-Anfragen werden an den Admin-Server geleitet. Dies geschieht mit den beiden Rewrite-Regeln - Sie müssen eine Rewrite-Regel für jede Anwendung hinzufügen, die Sie verwenden.

Da lighttpd die FCGI-Skripte benötigt, um sie zu existieren, um den PATH_INFO an das FastCGI weiterzugeben, müssen Sie die folgenden Dateien berühren: /home/gb/work/myprojectg/public_html/admin.fcgi ``/home/gb/work/myprojectg/public_html/main.fcgi

Sie müssen keinen Code enthalten, sie müssen nur im Verzeichnis aufgeführt sein. Ab lighttpd 1.3.16 (zum Zeitpunkt der Abfassung dieser Zeilen nur in svn) können Sie ohne die Stubs für die .fcgi laufen - Sie fügen einfach "check-local" => "disable" zu den beiden FCGI-Einstellungen hinzu. Dann sind die lokalen Dateien nicht mehr erforderlich. Wenn Sie also diese Konfigurationsdatei erweitern möchten, müssen Sie nur einige sehr grundlegende Regeln beachten:

  • jede Einstellungsdatei benötigt ihren eigenen .fcgi-Handler
  • jeder .fcgi muss im Dateisystem berührt werden - dies könnte in einer zukünftigen Version von lighttpd verschwinden, aber für den Moment ist es erforderlich
  • die Lastverteilung erfolgt auf Ebene der .fcgi - fügen Sie mehrere Server oder Sockets hinzu, um die Last auf mehrere FCGI-Server zu verteilen
  • jede Anwendung benötigt eine Rewrite-Regel, die die Anwendung mit dem .fcgi-Handler verbindet

Jetzt müssen wir die FCGI-Server starten. Das ist eigentlich ganz einfach, verwenden Sie einfach das bereitgestellte django-fcgi.py-Skript wie folgt:


 django-fcgi.py --settings=myproject.work.main
 --socket=/home/gb/work/myproject/main.socket
 --minspare=5 --maxspare=10 --maxchildren=100
 --daemon

django-fcgi.py --settings=myproject.work.admin
 --socket=/home/gb/work/myproject/admin.socket
 --maxspare=2 --daemon

Diese beiden Befehle starten zwei FCGI-Serverprozesse, die die angegebenen Sockets zur Kommunikation verwenden. Der Admin-Server wird nur zwei Prozesse verwenden - dies liegt daran, dass der Admin-Server oft nicht der Server mit den vielen Hits ist, das ist der Hauptserver. Daher erhält der Hauptserver eine höhere als Standard-Einstellung für Reserveprozesse und maximale Kindprozesse. Natürlich ist dies nur ein Beispiel - passen Sie es an Ihre Bedürfnisse an.

Der letzte Schritt ist das Starten Ihres lighttpd mit Ihrer Konfigurationsdatei: lighttpd -f /home/gb/work/myproject/lighttpd.conf

Das war's. Wenn Sie jetzt entweder den lighttpd direkt unter http://localhost:8000/polls/ oder durch Ihren Front-Apache zugreifen, sollten Sie die Ausgabe Ihrer Anwendung sehen. Zumindest, wenn alles richtig gelaufen ist und ich nicht zu viele Fehler gemacht habe.

es gibt Tage da hasst mein Computer mich

Zum Beispiel wenn ich mit Flup spiele und statt des threaded Servers einen forked Server nehmen will. Und feststelle, das der dann aber die Funktion socketpair benötigt. Die aber dummerweise nur ab Python 2.4 verfügbar ist, welches zwar auf Debian Sarge da ist, aber dafür gibts in der Debian Sarge für Python 2.4 keinen Psycopg - welcher wiederum Voraussetzung für Django und PostgreSQL ist, weshalb ich mich überhaupt ja nur mit FastCGI beschäftige. PsycoPG selber installieren macht keinen Spaß, da man dafür nicht nur die PostgreSQL Header braucht, die normal installiert werden, sondern auch ein paar interne Header - also im Prinzip einen Build-Tree. Und dann braucht man noch die egenix-mx-base Header, die man nur für Python 2.3 kriegt, also müsste man das auch selber installieren. Backports aus der nächsten Debian geht auch nicht, da die gerade auf PostgreSQL 8.0 umbauen und Sarge ja noch 7.4 benutzt und ich nicht gleich das ganze System upgraden wollte. Und so dreht man sich im Kreis und kommt sich leicht verarscht vor vor lauter Abhängigkeiten und Versionskonflikten.

Und was macht man also als Lösung, weil der threaded Server dummerweise nur Segfaults im Psycopg produziert? Man nimmt den threaded Server, verbietet ihm das threaden und startet ihn über den spawn-fcgi vom lighttpd, oder direkt vom lighttpd. Was aber irgendwie auch wieder dämlich ist, da dann immer pro FCGI-Server 3 Threads rumgammeln, von denen 2 nur in der Prozessliste stehen und nix zu tun haben. Und das alles nur weil mod python2 (was für Django gebraucht wird) Apache2 voraussetzt, der wiederum mod perl2 voraussetzt, welches inkompatibel zum alten mod perl ist, weshalb bei mir eine ganze Reihe von meinen Sites nicht mehr laufen würden, würde ich auf Apache2 umstellen. Was ich eh nicht will, weil Apache2 mit mod python arschlangsam ist. Und schon wieder verarscht worden. Ich hätte mir echt einen sinnvolleren Beruf suchen sollen.

Wer nix kapiert hat: macht nix, ist Technik, ist nicht wichtig, wollte das einfach nur mal gesagt haben.

Django mit FCGI und lighttpd ausführen

Diese Dokumentation ist für einen grösseren Kreis als nur .de gedacht, daher das ganze in Neuwestfälisch Englisch. Sorry. Update: I maintain the actually descriptions now in my trac system. See the FCGI+lighty description for Django. There are different ways to run Django on your machine. One way is only for development: use the django-admin.py runserver command as documented in the tutorial. The builtin server isn't good for production use, though. The other option is running it with mod_python. This is currently the preferred method to run Django. This posting is here to document a third way: running Django behind lighttpd with FCGI.

First you need to install the needed packages. Fetch them from their respective download address and install them or use preinstalled packages if your system provides those. You will need the following stuff:

  • [Django][2] selbst - derzeit aus dem SVN. Folgen Sie den Setup-Anweisungen oder verwenden Sie python setup.py install.
  • [Flup][3] - ein Paket mit verschiedenen Möglichkeiten, WSGI-Anwendungen auszuführen. Ich verwende den threaded WSGIServer in dieser Dokumentation.
  • [lighttpd][4] selbstverständlich. Sie benötigen mindestens die FastCGI-, die Rewrite- und die Accesslog-Module, diese sind in der Regel mit dem System kompiliert.

Nach der Installation von ligthttpd müssen Sie eine lighttpd-Konfigurationsdatei erstellen. Die hier angegebene Konfigurationsdatei ist an meine eigenen Pfade angepasst - Sie müssen diese an Ihre eigene Situation anpassen. Diese Konfigurationsdatei aktiviert einen Server auf Port 8000 auf localhost - genau wie der runserver-Befehl dies tun würde. Aber dieser Server ist ein Server für die Produktion mit mehreren FCGI-Prozessen und einer sehr schnellen Medienauslieferung.


 # lighttpd-Konfigurationsdatei
 #
 ############ Optionen, die Sie wirklich beachten müssen ####################

server.modules = ( "mod_rewrite", "mod_fastcgi", "mod_accesslog" )

server.document-root = "/home/gb/public_html/"
 server.indexfiles = ( "index.html", "index.htm", "default.htm" )

 diese Einstellungen binden den Server an dieselbe IP und denselben Port wie runserver

server.errorlog = "/home/gb/log/lighttpd-error.log"
 accesslog.filename = "/home/gb/log/lighttpd-access.log"

fastcgi.server = (
"/myproject-admin.fcgi" => (
"admin" => (
"socket" => "/tmp/myproject-admin.socket",
"bin-path" => "/home/gb/public_html/myproject-admin.fcgi",
"min-procs" => 1,
"max-procs" => 1
 )
 ),
"/myproject.fcgi" => (
"polls" => (
"socket" => "/tmp/myproject.socket",
"bin-path" => "/home/gb/public_html/myproject.fcgi"
 )
 )
 )

url.rewrite = (
"^(/admin/.*)$" => "/myproject-admin.fcgi$1",
"^(/polls/.*)$" => "/myproject.fcgi$1"
 )

Diese Konfigurationsdatei startet nur einen FCGI-Handler für Ihre Admin-Angelegenheiten und die Standardanzahl von Handlern (jeder davon mehrthreadig!) für Ihre eigene Website. Sie können diese Einstellungen mit den üblichen ligthttpd FCGI-Einstellungen feinabstimmen, sogar externe FCGI-Erzeugung und Auslagerung von FCGI-Prozessen auf einen verteilten FCGI-Cluster nutzen! Admin-Medien-Dateien müssen in Ihr lighttpd-Dokumentenverzeichnis.

Die Konfiguration funktioniert, indem alle Standard-URLs so übersetzt werden, dass sie vom FCGI-Skript für jede Einstellungsdatei behandelt werden - um weitere Anwendungen zum System hinzuzufügen, würden Sie nur die Umschreiberegel für die /polls/-Zeile duplizieren und diese in choices oder was auch immer Ihr Modul heißt ändern. Der nächste Schritt wäre die Erstellung der .fcgi-Skripte. Hier sind die beiden, die ich verwende:


 #!/bin/sh
 # dies ist myproject.fcgi - legen Sie es in Ihr Docroot

export DJANGOSETTINGSMODULE=myprojects.settings.main

/home/gb/bin/django-fcgi.py

 #!/bin/sh
 # dies ist myproject-admin.fcgi - legen Sie es in Ihr Docroot

export DJANGOSETTINGSMODULE=myprojects.settings.admin

/home/gb/bin/django-fcgi.py

Diese beiden Dateien nutzen nur ein django-fcgi.py-Skript. Dies ist nicht Teil der Django-Distribution (noch nicht - vielleicht werden sie es einbeziehen) und der Quellcode ist hier gegeben:


 #!/usr/bin/python2.3

def main():
 from flup.server.fcgi import WSGIServer
 from django.core.handlers.wsgi import WSGIHandler
 WSGIServer(WSGIHandler()).run()

if name == 'main':
 main()

Wie Sie sehen, ist es eher einfach. Es verwendet den threaded WSGIServer aus dem fcgi-Modul, aber Sie könnten genauso leicht den geforkten Server verwenden - aber da lighttpd bereits Preforking durchführt, denke ich, dass es nicht viel Sinn hat, auf der FCGI-Ebene zu forken. Dieses Skript sollte sich irgendwo in Ihrem Pfad befinden oder einfach mit vollständig qualifiziertem Pfad wie ich es tue referenziert werden. Jetzt haben Sie alle Teile zusammen. Ich habe meine lighttpd-Konfiguration in /home/gb/etc/lighttpd.conf, die .fcgi-Skripte in /home/gb/public_html und das django-fcgi.py in /home/gb/bin. Dann kann ich das ganze mit /usr/local/sbin/lighttpd -f etc/lighttpd.conf starten. Dies startet den Server, preforkt alle FCGI-Handler und trennt sich vom tty, um ein richtiger Daemon zu werden. Das Schöne daran: Dies wird nicht unter einem speziellen Systemkonto, sondern unter Ihrem normalen Benutzerkonto ausgeführt, sodass Ihre eigenen Dateibeschränkungen gelten. lighttpd+FCGI ist recht leistungsfähig und sollte Ihnen eine sehr schöne und sehr schnelle Option zum Ausführen von Django-Anwendungen bieten. Probleme:

  • Unter hoher Last stürzen einige FCGI-Prozesse ab. Ich habe zunächst die fcgi-Bibliothek verdächtigt, aber nach etwas Herumspielen (Core-Debugging) stellte sich heraus, dass es tatsächlich der psycopg auf meinem System ist, der abstürzt. Sie könnten also mehr Glück haben (es sei denn, Sie laufen auch Debian Sarge)

  • Die Leistung hinter einem Front-Apache ist nicht das, was ich erwartet hätte. Ein lighttpd mit Front-Apache und 5 Backend-FCGI-Prozessen erreicht nur 36 Anfragen pro Sekunde auf meinem Rechner, während django-admin.py runserver 45 Anfragen pro Sekunde erreicht! (immer noch schneller als mod_python über apache2: nur 27 Anfragen pro Sekunde) Updates:

  • Die Trennung der beiden FCGI-Skripte funktionierte nicht richtig. Jetzt passe ich nicht nur auf die .fcgi-Erweiterung, sondern auf den Skriptnamen an, so dass /admin/ wirklich das myproject-admin.fcgi verwendet und /polls/ wirklich das myproject.fcgi verwendet.

  • Ich habe [ein anderes Dokument online][6], das mehr Details zur Lastverteilung enthält

Apache modauthtkt ist ein Framework für Single-Signon in Apache-basierten Lösungen über Technikgrenzen (CGI, mod_perl und was sonst noch so existiert) hinweg. Müsste ich mir mal angucken, könnte für mich interessant sein.

SCO stolpert über die eigenen Füsse

Zumindestens scheint es so wenn es eine eMail über No 'smoking gun' in Linux code gibt.

The e-mail, which was sent to SCO Group CEO Darl McBride by a senior vice president at the company, forwards on an e-mail from a SCO engineer. In the Aug. 13, 2002, e-mail, engineer Michael Davidson said "At the end, we had found absolutely nothing ie (sic) no evidence of any copyright infringement whatsoever."

Die Mail ist schon länger bekannt, aber jetzt erst veröffentlicht worden - vorher war sie als Teil der Gerichtsunterlagen noch unter Verschluss. Schon peinlich für SCO wenn so nach und nach die ganzen traurigen Details zum Vorschein kommen. Vor allem peinlich: SCO argumentiert mit dem gleichen Consultant der wohl hier nix gefunden hat aber vorher mal behauptet hat es gäbe gleichen Code. Irgendwie sollte SCO mal so langsam die Argumentation auf die Reihe bringen, sonst bringts das ganze Gelüge und Erpressen auf Dauer nicht ...

Kaum mit sauberen Mitteln

kann die Übergabe der .net Registrator an VeriSign abgegangen sein, wenn man sich ansieht wie ICANN unter VeriSigns Knute ist:

VeriSign kann ab 1. Januar 2007 nach Belieben die Preise der .net-Adressen erhöhen. Außerdem sicherte ihnen die Internet Corporation for Assigned Names and Numbers (ICANN) eine automatische Verlängerung der Laufzeit nach sechs Jahren zu.

Wer jetzt noch glaubt das da kein Geld geflossen ist, dem verkaufe ich gerne ne Waschmaschine mit Gummibandantrieb ...

Microsoft liebt SpyWare

Jedenfalls klassifiziert Microsoft diese jetzt anders:

Demnach empfiehlt das Programm seit dem Update von Ende März, verschiedene als mäßig gefährlich klassifizierte Claria-Produkte ebenso wie solche der Spywareschmieden WhenU und 180solutions zu ignorieren.

Sorry, aber Nachrichten aufpoppende Hintergrundprogramme sind grundsätzlich abzulehnen, dabei interessiert mich auch nicht die Bohne welche Samtpfotenargumentationen die Hersteller dieses Mülls sich einfallen lassen.

Sorry, aber ein Hersteller von Betriebssystemsoftware der mit einer Anti-Spyware-Prüfung solchen Schrott nicht als zu deinstallieren vorschlägt ist schlichtweg unglaubwürdig.

macminicolo Mac Mini colocation - eigene Mac Mini in Datacenter aufstellen. Gibts sowas auch in Deutschland?

Plash: the Principle of Least Authority shell

Interessantes Konzept: Plash ist eine Shell die Programmen eine Library unterschiebt über die alle Zugriffe auf das Filesystem schicken. Dadurch kann man kontrollieren welche Funktionen ein Programm wirklich ausführen darf. Das dient diesmal nicht dem Schutz vor Aktivitäten des Benutzers, sondern dem Schutz des Benutzers vor Aktivitäten des Programms. Gerade wenn man Programme installiert die man nicht kennt kann man unter Umständen sich Trojaner einfangen - Plash hilft da, indem man explizit nur die Bereiche der Platte für das Programm freischaltet, die dieses auch braucht.

Dazu werden alle Zugriffe auf das Dateisystem intern über einen eigenen Miniserver geroutet - das eigentliche Programm wird unter einem frisch allozierten Benutzer in einem eigenen chroot-Jail ausgeführt, hat also gar keine Chance irgendwas ausserhalb zu machen das nicht explizit erlaubt wird.

Sehr interessantes Konzept, vor allem für Systemadministratoren. Funktioniert leider (erwartungsgemäß) nicht mit grsecurity zusammen - klar, grsecurity soll ja gerade einige der in Plash verwendeten Tricks genau verhindern helfen. In diesem Fall scheitert es an der Anforderung von executable Stack.

Boot KNOPPIX from an USB Memory Stick - vielleicht eine Alternative zu spblinux, speziell mit der c't-Knoppix-Variante?

SPB-Linux ist ein sehr kleines Linux das man von einem USB-Memory-Stick booten kann und mit diversen Erweiterungen (X, Mozilla, XFCE Desktop) aufgewertet werden kann. Müsste man auch relativ leicht um diverse Systemadmin-Tools erweitern können.

Spyce ist ein Webframework in Python mit verdammt guter Performance: eine einfache Seite mit einem Template hinterlegt bringt auf meiner Kiste über 90 Hits pro Sekunde (Spyce über mod_python in den Apache integriert, Memory-Cache). Take that, PHP!

Manchmal treibt mich DarwinPorts zur Verzweiflung

Zum Beispiel wenn ich ghc (einen Haskell-Compiler) installieren will, aber der als erstes mal Perl 5.8 installieren will. Als ob ich unter Tiger nicht schon ein durchaus brauchbares Perl 5.8.6 auf der Platte hätte, nein, die DarwinPorts wollen eigene Versionen davon. Und dann hab ich je nach Pfadeinstellung mal das Apple-Perl oder eben das von DarwinPorts aktiv. Ziemlich dämlich - ich finde da müssten in die DarwinPorts Pseudopakete rein, die dann auf die vorinstallierten Versionen von Apple verweisen.

Das macht ganz besonders dann Probleme, wenn man selber auch Pakete so von Hand installiert. Denn dann wird teilweise das über den Pfad erreichbare Perl genommen - und mit aktiven DarwinPorts ist das halt das dort. Was aber absolut nicht der gewünschte Effekt ist - schliesslich ist das Perl in diesem Fall nur deshalb reingekommen, weil der Port für ghc eine build-dependency hat. Ich will aber garnicht das DarwinPorts Perl benutzen ...

Aus dem gleichen Grund sind die ganzen Python und Ruby Module in DarwinPorts IMHO unbrauchbar: sie ziehen automatisch eine neue Installation von Python und Ruby nach sich und nutzen nicht die vorinstallierte Version. Selten dämlich ...

Im Ergebnis kann man DarwinPorts auf einer OS X Kiste nur für gut isolierte Tools benutzen - was aber irgendwie schade ist, denn die Idee und die Umsetzung an sich ist ziemlich klasse. Nur wird halt zu wenig Rücksicht auf die schon installierten Sachen genommen.

ghc hab ich übrigens einfach über das Binary-Paket von haskell.org installiert. Da steht zwar das sei für 10.3, tuts aber auch mit 10.4 - jedenfalls das was ich damit mache. Und erspart mir das ganze Zeugs zu builden.

SSL-VPN mit Browsersteuerung

Kollege hat ein ziemlich geniales Teil gefunden: SSL Explorer, ein kleiner https-Server der mit einem Java-Applet im Browser zusammen ein VPN realisiert. Und zwar werden beim Appletstart (der bestätigt werden muss, da das Applet zusätzliche Fähigkeiten braucht) Tunnelverbindungen über https aufgebaut und darüber dann diverse Anwendungen integriert. Zum Beispiel kann man dann per Klick auf einen Link eine VNC-Verbindung zu einem internen Server aufbauen, oder über Webformulare im lokalen Windows-Netz browsen, Files transferieren oder z.B. per SSH auf Linux-Server hinter der Firewall zugreifen. Und das ganze funktioniert mit einem einfachen Java-fähigen Webbrowser - ich habs zum Beispiel mit dem Safari getestet, klappt problemlos. Ganz ohne extra zu installierende Client-Software. Ideal für Roaming-User die nicht immer ein eigenes Gerät mit dabei haben.

Achso, und das ganze ist dann auch noch unter der GPL.

Hardened-PHP project

Keine Ahnung wie gut das wirklich ist, aber das Hardened-PHP Projekt klingt schon mal ganz nett. Gerade durch die hohe Verbreitung von PHP für Webanwendungen ist es ein zentraler Einbruchsweg in Server. Sollte ich mir mal auf die ToDo-Liste schreiben.

Quengelköppe und Open Source

IT-Entscheider fordern in einem offenen Brief mehr Konzentration auf die ihnen wichtigen Bereiche:

In einem offenen Brief an "die" Open-Source-Community haben IT-Entscheider aus verschiedenen Bereichen dazu aufgefordert, sich mehr an den tatsächlichen Bedürfnissen von Nutzern aus dem Unternehmensbereich zu orientieren.

Ich finds ja immer wieder faszinierend mit welcher Dreistigkeit manche Menschen Forderungen an freiwillige Arbeit stellen, um dann diese für eigene Zwecke zu nutzen. Die einen fordern die Abschaffung der GPL, weil ihnen die Bedingungen nicht passen, die nächsten fordern die Konzentration auf den Desktop, weil sie halt was als Alternative zu Microsoft wollen, andere fordern mehr Konzentration auf Hochleistungsserver, weil ihnen SUN-Maschinen mit Solaris oder IBM-Server mit AIX zu teuer sind.

Komischerweise höre ich aber immer nur in offenen Briefen irgendwelche Forderungen - es wäre aber wesentlich sinnvoller schlicht und einfach das entsprechende Projekt finanziell und mit Manpower zu unterstützen. Aber das wäre ja eigene Leistung, das will man ja gerade vermeiden. Dazu passen dann auch Forderungen nach besserem Support und bessere Dokumentation - beides Sachen, die Firmen ohne weiteres selber auf die Beine stellen könnten. Aber man ist sich da zu fein zu.

Sorry, aber für mich klingen solche offenen Briefe an Open Source Entwickler immer wie quengelige kleine Kinder, die unbedingt ein Eis wollen.

Sorry, Leute, aber so läuft das nicht. Ein grosser Teil der Open Source Community besteht eben noch aus Hackern und begeisterten Amateuren und Fricklern. Das produziert oftmals grosse Scheisse und immer wieder mal geniale Lösungen. Und es produziert eben nur das, wozu die Leute Lust haben - wenn Dokumentation schreiben für jemanden langweilig und nervig ist, wird er seine Freizeit nunmal nicht darauf verwenden.

You have an itch? Scratch it. Yourself.

Shit hits Fan

Denn der Scharfe Internet-Explorer-Exploit der jetzt veröffentlicht wurde sollte selbst Microsoft klarmachen das ihre Haltung zum jüngsten Loch im IE ein bischen extrem blauäugig war. Sie hätten wohl doch besser statt eines simplen Advisories gleich einen Patch rausgeben sollen. Am besten einen Patch der gleich den ganzen IE beseitigt ...

Microsoft lernts nie

Fehler im Internet Explorer mit ungewissen Folgen:

Microsoft kann laut Bernhard Müller von SEC Consult zwar ebenfalls die Abstürze nachvollziehen, sieht aber keine Gefahr, dass fremder Code zur Ausführung kommen könnte. Deshalb wolle Microsoft zwar demnächst die Behandlung von COM-Objekten robuster gestalten, aber kein Sicherheits-Update herausgeben.

Es geht um einen Crash der harten Art - in direktem Maschinencode. Jeder der nur rudimentäre Ahnung von sowas hat weiss, das es sich dabei um ein potentielles Einfallstor für Schadcode handelt - passend gesetzte Daten für den Crash und man hat unter Umständen einen Durchmarsch in das System. Aber Microsoft sieht keine Gefahr ...

Wer mal wieder lachen will ...

Study Shows Windows Beats Linux on Security - diesmal hat sich Microsoft die gewünschten Ergebnisse von der Firma Wipro gekauft. Genauso hanebüchen wie frühere Versuche in die gleiche Richtung. Enthält dann so Perlen wie:

“We already know how to secure a Windows-based solution and keep it running smoothly,” says Stephen Shaffer, the airline’s director of software systems. “With Linux, we had to rely on consultants to tell us if our system was secure. With Windows, we can depend on Microsoft to inform us of and provide any necessary updates.”

Sorry, aber jetzt mal ganz ernsthaft: wenn mir mein IT-Leiter erzählt das er sich bei der Sicherheit seiner Systeme auf Microsoft verlässt, wär das für mich ein Grund den Typen schnellstmöglich zu feuern

WordPress 1.5.1.3

WordPress 1.5.1.3 hat einen wichtigen Security-Fix. Also mindestens das xmlrpc.php aus dem Release übernehmen.

CardSystems Exposes 40 Million Identities

Bruce Schneier mit einigen Überlegungen und möglichen Forderungen zum kürzlichen Sicherheitsdebakel bei einem grossen amerikanischen Kreditkartenauthorisierer. Scheinbar hätten die Daten überhaupt nicht auf deren System gewesen sein dürfen - aufgrund der hohen Ansprüche die Kreditkartenunternehmen (zumindestens in den Unterlagen) an Authorisierer stellen, müsste eigentlich Card Systems rausfliegen bei Mastercard und Visacard.

Microsofts Allmachtsphantasien

Microsoft will Sender ID erzwingen:

Nun will Microsoft das System offenbar im Alleingang durchsetzen, denn demnächst sollen alle E-Mails an Hotmail-Nutzer, die ohne Sender ID kommen, für die Hotmail-Nutzer sichtbar markiert und damit als potenzieller Spam ausgewiesen werden.

Toll. Ganz grosse Strategie. Die Workinggroup wurde aufgelöst weil es keine Einigung geben konnte weil die Patentsituation bei Sender-ID nicht gelöst wurde von Microsoft - und jetzt will Microsoft das ganze einfach mal wieder erzwingen.

Ich denke aber mal das in diesem Fall Microsoft sich ins eigene Fleisch schneidet: es gibt längst deutlich bessere Webmaildienste, die auch deutlich besser in der Netzgemeinde mitspielen. Hotmail hat lange nicht mehr die Bedeutung die es noch vor dem Verkauf an Microsoft mal hatte. Von daher ist meine Prognose das sich nicht sonderlich viele von diesem Schritt beeindrucken lassen. Leidtragende sind eh die Hotmail-User und evtl. deren Korrespondenten, die eben auf einem dann noch minderwertigeren Maildienst hocken als sowieso schon ...

OXlook - Open-XChange verbindet sich mit Outlook - geblogmarkt für die Firma. Don't ask ...

Wieder eine gefärbte Studie von Microsoft

Studie: Sicherheitsupdates bei Windows kostengünstiger als bei Open Source - nichts neues, nur eine weitere von Microsoft bezahlte und daher im Ergebnis vorher festgelegte Studie ohne jeden Wert. Interessant an den Studien ist nur der Name des jeweiligen Unternehmens was die Studie macht - das kann man dann auf die Korruptionsliste schreiben und sich merken, falls man selber mal irgendwelche Aussagen mit gefälschten und gefärbten Studien untermauern muss ...

Ansonsten? Naja, die Standardfehler halt. Erstmal keine wirklichen Belege, sondern eine nicht näher spezifizierte Liste von Unternehmen die gefragt wurden was sie dazu meinen (im Gegensatz zu Erhebung von harten Fakten). Und natürlich die Gleichsetzung von Red Hat mit Linux - was an sich schon grober Unfug ist.

Aus persönlicher Erfahrung mit beiden Systemen kann ich sagen das unsere Debian GNU/Linux Systeme wesentlich einfacher auf aktuellem Stand zu halten sind und damit beim Patchen wesentlich billiger sind als die Windows-Kisten. Und das obwohl beide dazu ihre integrierten Update-Mechanismen über das Netz nutzen (und für unsere Windows-Systeme sogar Betankungsplätze und interne Update-Server existieren). Aber mich fragt man für so eine Studie ja auch nicht - ich würd ja nicht ins von Microsoft bezahlte Bild passen ...

Tunnelblick - GUI for OpenVPN on the Mac

Tunnelblick ist eine grafische Benutzeroberfläche für OpenVPN auf dem Mac. Das schöne: die neuesten Installer kommen gleich mit OpenVPN zusammen. Wer also bei sich OpenVPN als Infrastruktur laufen hat und auch Macs reinhängen muss – das ist jetzt einfach wie nie zuvor. Und anbetracht der Tatsache das OpenVPN eine der nettesten Open Source VPN Lösungen ist, lohnt es sich sogar da mal reinzugucken wenn man noch am Überlegen ist auf welche VPN-Lösung man setzen will.

ICANN als Erfüllungsgehilfe für VeriSign-Monopolansprüche

Bei Heise: .net-Registry: And the winner is ... VeriSign!. Ja, genau der Laden der sich mit dem Wildcard-A-Record auf .com und .net so beliebt hat und der immer wieder sich dadurch hervorgetan hat das er sich nicht an Absprachen hielt und vorpreschte bevor ICANN oder andere zentrale Gremien auch nur eine Basis für das geschaffen haben wo sie vorpreschten (zum Beispiel bei den internationalen Domains) und dadurch immer wieder Probleme gemacht hat, genau der Laden der sich garnicht für eine demokratischere Regulierung des Internet interessiert und sowieso nur auf Monopolkurs ist, genau der Laden bekommt vom ICANN den Zuschlag. Kein Wunder - die Konkurrenten waren keine amerikanischen Unternehmen und wie ICANN zu nicht-amerikanischen Bestrebungen (und eventueller Mehrbeteiligung der Internet-Nutzer) steht hat man ja bei der Demontage der regionalen gewählten Vertreter gesehen.

VS Vertraulich nfD und Outlook?

Laut Heise: cryptovision sichert Bundeswehr-Mails - ein Grund war, das deren Plugin mit Outlook und Notes zusammen arbeitet. Hallo? Die wollen vertrauliche und eingeschränkte Informationen über ein Cryptoplugin verschlüsseln, aber benutzen dann Outlook? Da können die sich doch das Verschlüsseln auch sparen, der nächste Wurm schickt den Inhalt des Eingangskorbes doch eh in alle Welt ...

Teufelsgrinsen

Systemupgrade auf simon.bofh.ms

Da ich irgendwo eine Debian 3.0 auf 3.1 upgraden muss um mal damit Erfahrungen für die Firma zu sammeln, nehme ich einfach meinen eigenen Server. Kann also sein das hier in der nächsten Zeit einiges durcheinander geht oder einem Sachen um die Ohren fliegen. You have been warned

Systemupgrade simon.bofh.ms Part 2

Ok, der Systemupgrade ist im Prinzip durch. Verluste soweit nur das Mailinglistensystem - allerdings das auch hauptsächlich weil ich einfach kein Interesse mehr daran habe es zu betreiben. Im Prinzip war es komplett aktualisiert, ich habs dann einfach nur rausgeworfen weil ich mit dem Teil nichts weiter machen will - war nur eine Liste drin. Und auch sonst ist hauptsächlich alter Schrott rausgeflogen.

Allerdings muss ich nach zwei Systemupgrades sagen, das ich nicht so wirklich begeistert vom Upgrade dieses mal bin - es zeigt sich schon das Problem des extrem langen Release-Zyklus. Der erste Upgrade lief noch ziemlich problemlos durch - die betreffende Maschine war aber auch eine Maschine die schon auf Sarge lief, nur halt auf einer alten Version aus Testing und nicht die aktuelle Stable. Der Upgrade machte keinerlei Probleme.

Der zweite Upgrade war aber eben simon.bofh.ms - einer Maschine die in weiten Teilen noch auf Stable war, mit einer ganzen Reihe von Backports (selbst gemachte und aus dem Netz). Letzteres ist natürlich das eigentliche Problem - weil die Releasezyklen sehr lang sind, ist es oft mals notwendig sich selber Pakete zu installieren. Der Debian-Upgrade-Mechanismus sollte damit trotzdem klar kommen. Die Realität zeigt aber das Pakete aus Backports sich oftmals eben auf Zwischenstände beziehen in denen Bugs in Testing-Paketen drin sind oder einfach Besonderheiten die nicht berücksichtigt wurden. Dadurch waren eine ganze Reihe von Paketupgrades sehr hakelig und ich möchte das keinem normalen User zumuten das durchzumachen.

Highlight der ganzen Probleme war der PostgreSQL-Upgrade, der zwar alles sauber durchführte, aber dann wegen einer veralteten Option in der Config nicht startete. Die Meldungen waren aber so kryptisch, das selbst ich nicht auf Anhieb erkennen konnte was es war - erst wühlen in den Logs und gucken in den Scripts bestätigte mir das der Upgrade sauber war und wirklich nur der Start geklemmt hat.

Allerdings muss ich trotzdem sagen das der Upgrade einer Maschine mit teilweise bis zu 3 Jahre alten Programmversionen erstaunlich gut ging und 99% der Pakete völlig problemlos aktualisiert wurden - selbst so Sachen wie meine recht exotische Exim4-Installation (ein selbstgemachter Backport mit Besonderheiten) lief recht problemlos durch - es waren allerdings schon manuele Fixes nötig, aber die hatte ich selber verbrochen. Der Apache und das ganze PHP-Geraffel lief völlig problemlos, auch die MySQL-Datenbank lief auf Anhieb. Und man sollte auch beachten das der ganze Upgrade - obwohl von mir als suboptimal beschrieben - nur 1:45 Stunden gebraucht hat. Und das meisste davon war warten auf das Auspacken der Pakete ...

Nunja, in den nächsten Tagen wird sich zeigen was sonst noch alles kaputt gegangen ist und welche der ganzen Scripte nicht mehr laufen, die ich bisher übersehen habe

Debian GNU/Linux 3.1 released - wow. Hat ja lange genug gedauert

PGP Corporation stört PGP Freeware Mirror

Beim rabenhorst gefunden: PGP Corporation stört PGP Freeware Mirror. Ich finds immer wieder zum Kotzen wenn ich mir angucke was aus dem alten PGP Projekt mitlerweile für ein kommerzieller Mist geworden ist. PGP war mal der Antritt überhaupt brauchbare Kryptographie für Normalbürger verfügbar zu machen -und zu Zeiten der PGP 2 Versionen auch durchaus offen verfügbar (bis Version 2.3 unter GPL). Auch genau dem Grund habe ich die PGP-Portierungen nach DOS damals überhaupt gemacht. Und jetzt schlägt die PGP Corporation um sich und geht gegen freie Mirror der Freeware-Versionen vor. Ein guter Beleg dafür warum man besser kein Energie in Projekte steckt die Firmen gehören sondern lieber gleich in Freeware mit free wie in free speech steckt ...

Von daher: benutzt gnupg. Da ist auch der Code besser - ich erinnere mich noch mit Grausen an den Pseudo-Objektorientierten Code in PGP 5, das Zeugs zu reparieren war nicht wirklich unterhaltsam.

Übrigens war der Changelog zur DOS-Version von PGP 5 (nach unten scrollen) mein erstes Weblog, sozusagen - und das hat schon im Oktober 97 angefangen. Schlag ich jetzt Dave Winer?

Unsere Computer gehören uns - noch

Denn wie rabenhorst(dessen Site übrigens meinen Safari in die ewigen Jagdgründe schickt) verlinkt: Intel hat DRM-Techniken in die neuen Dual-Core-Prozessoren eingebaut die z.B. Microsoft dazu dienen darauf im System aufzubauen. Danach bestimmt dann Microsoft im Auftrag der Unterhaltungsindustrie oder aus Eigennutz welche Software und welche Daten auf dem System genutzt werden dürfen. Privatkopien stehen dann garnicht mehr zu Diskussion und warten wir ab wann Microsoft dann Open Source als nicht vertrauenswürdig einstuft und blockiert.

Performance vom Tiger

Da ich gestern gefragt wurde, ob ich was von der Performance merke: jein. Ja, denn die ganzen Anzeigegeschichten sind deutlich schneller - vor allem die Browser kriegen ihren Kram wesentlich fixer angezeigt. Da ist ein drastischer Gewinn zu sehen.

Nein, denn durch die netten - durchaus brauchbaren - Features wie Spotlight und FileVault (gabs ja unter Jaguar noch nicht) wird einiges der Systemperformance auch wieder aufgefressen. Gerade heftigere Speicheraktionen in meinem Homeverzeichnis schlagen so natürlich zu. Andererseits sind die Features wirklich brauchbar, also zahle ich den Performancepreis gerne.

Also alles in allem ist die Anzeige flotter und der Rest nicht langsamer. Dafür das ich gerade zwei major Releases weiter bin auf der gleichen Hardware wie vorher (867 Mhz 12" PowerBook mit 640 MB Speicher) ist das ein gutes Fazit. Der Sprung über zwei Windows-Versionen erfordert jedenfalls häufiger Hardwareupgrades um noch Spaß zu machen.

Paypal verschickt Phishing-Mails

Paypal verschickt Phishing-Mails - sie haben eben nichts kapiert. Mich nervt die ziemlich dämliche Haltung von eBay, PayPal und dem ganzen Rudel von Banken zum Thema Phishing sowieso - warum benutzen die nicht endlich mal signierte Mails? Das ganze Thema wäre sehr leicht zu erledigen: Mail von eBay die nicht mit dem korrekten Key signiert ist: ab in die Tonne.

Das aber PayPal jetzt sogar so blöd ist und selber Phishing-Mails schickt - bzw. Mails die genauso wie die üblichen Phishing-Attacken aussehen - ist wirklich selten dämlich.

Schlüsselklau auf Hyperthreading-Systemen - cool. Ich mein, klar, scheisse, ist ein Sicherheitsloch. Aber das ist echt cool. Hyperthreading und Cache-Timing benutzen um dem zweiten Pseudoprozessor Daten unterm Arsch wegzuklauen - auf sowas muss man erstmal kommen.

Bill Gates Hirnfürze

Bill Gates: Der iPod hat keine Chance. Das Internet ist unwichtig. Niemand braucht Java. 640 KB sind genug für jeden Benutzer. Windows ist das sicherste Betriebssystem. Der PowerPC Chip ist unwichtig. Benutzer wollen Bob, das Social Interface. Unix spielt keine Rolle.

Der Mann hat ein echtes Problem