Neues Projekt: Huruhelpdesk für Joomla 1.6

Während meiner DEV-Tätigkeit für rising-gods.de stehe ich ab und zu einmal vor größeren Umwälzungen und muss dann entscheiden, wann sie durchzuführen sind. Bei über 150.000 (Stand zum Zeitpunkt der Artikelerstellung) registrierten Nutzern ist das keine einfache Frage.

Zuletzt trat so eine Situation auf, als ich von Joomla 1.5.22 auf das ausgereiftere 1.6.3 wechseln wollte. Schon vorher wurde ich mehrmals vom Admin-Team auf einen Wechsel angesprochen, allerdings halte ich bei Joomla Versionen kleiner als x.x.3 generell für relativ unsicher. Die Liste der Security-Fixes im Patchlog von 1.6.1 und 1.6.2 hat mich dann auch wieder in dieser Ansicht bestätigt. Mit dem Release von 1.6.3 kam dann die Entscheidung, jetzt zu wechseln. Dazu mussten etliche Komponenten, u.a. das Premiumsystem, und das Template umgeschrieben werden. Weitere Komponenten wie das Kunena-Forum mussten aktualisiert und wieder dem vorherigen Funktionsstand angepasst werden.

Die größte Änderung betraf jedoch Huruhelpdesk, für das es keine J!1.6-kompatible Version gibt. Zudem scheint der Entwickler James R. Erickson momentan ziemlich inaktiv zu sein. Daher habe ich beschlossen, den Huruhelpdesk 0.88d – den wir bei rising-gods.de als Ticket-System einsetzen – selbst 1.6-kompatibel zu machen. Alles in Allem kein besonders schwieriges Unterfangen, wenn auch zeitaufwändig, da die Joomla-Docs für 1.6 zurzeit noch einfach miserabel sind. Besonders das Herausfinden der neuen XML-Strukturen für die Installations-XMLs hat viel länger gedauert, als eigentlich nötig. Letztendlich jedoch war auch dieses Hindernis genommen und nach einer Woche Regelbetrieb in der 150k-Community von Rising Gods ohne Zwischenfälle habe ich mein Projekt auf Github veröffentlicht, um auch anderen Huru-Nutzern den Umstieg auf Joomla 1.6 zu ermöglichen.

VoIP mit Nokia 5800 XPress Music und Fritz!Box

Den neueren Symbian-Phones der Xpress-Serie (und vielen anderen auch) fehlt vor allem eines: ein SIP-Client. Während viele der älteren Phones und auch die meisten Geäte der N-Serie einen haben, gibt es im 5800 z.B. zwar SIP-Einstellungen aber keinen Client. Warum das so ist kann man nur spekulieren, vermutlich haben die Netzbetreiber ein Abkommen mit Nokia geschlossen, um sinkende Einnahmen durch die Verwendung von VoIP zu verhindern.

Um nun das 5800 doch noch in mein Richtfunk-WLAN-Prohjekt einbinden zu können benutze ich die (zurzeit noch kostenlos erhältliche) Software Tivi. Die hat – im Gegensatz zu den 4 oder 5 anderen Alternativen, die ich ausprobiert habe – den Vorteil, dass sie sich mit jedem SIP-Provider, also auch dem der Fritzbox, verbinden kann. Nimbuzz, Fring & Co. funktionieren nur mit echten Internet-SIP-Anbietern wie 1&1, voip-sip.de oder Sipgate.

Zunächst muss ein Registrierschlüssel für die Software erzeugt werden. Den gibt es momentan noch kostenlos bei tivi.com nach Eingabe der IMEI (nötig, damit tivi.com die App signieren kann). Die IMEI findet man bei allen Symbian-Handies übrigens via *#06# heraus. Im nächsten Schritt erhält man seinen Lizenzschlüssel.

Mit dem Handy navigiert man dann zu http://m.tivi.com und lädt sich die Software herunter. Die Installation startet nach dem Download selbstständig. Wichtig: ich musste die Software auf der SD-Karte (E:) installieren und die Warnung zur Inkompatibilität bestätigen. Eine Installation auf dem Telefon (C:) schlägt komischerweise – trotz ausreichend Speicherplatz – fehl. Nach der Installation steht die Software im Menü unter Programme zur Verfügung. Von wird sie jetzt auch gestartet und als Erstes werden die Einstellungen vorgenommen. Dabei gehe ich davon aus, dass wie im Artikel Projekt Richtfunk: Internet + Telefon beschrieben bereits ein zusätzlicher SIP-Account in der FritzBox (für das Handy) angelegt wurde. Folgende Einstellungen sind vorzunehmen (bei Lizenzschlüssel muss natürlich der soeben erhaltene Key eingetragen werden ;)):

 

Nach einem Klick auf OK sollte sich Tivi nun mit dem SIP-Server der Fritzbox verbinden und man kann in WLAN-Reichweite kostenlos telefonieren und auch unter seiner Festnetz-Nummer erreicht werden. Etwas gewöhnungsbedürftig ist nur die Bedienung: man ist immer versucht, mit der grünen Taste abzuheben… was allerdings nicht funktioniert. Stattdessen muss man den Touchscreen bemühen. Davon abgesehen ist Tivi der wohl ausgereifteste SIP-Client für Symbian-Phones ohne eigene SIP-Funktionalität.

Projekt Richtfunk: Internet + Telefon

Dieser Artikel passt wohl in die Kategorie „Was tut man nicht alles für schnelleres Internet“. Da es die auf meinem Blog aber nicht gibt, nenne ich es einfach mal ein besonderes Projekt. Hintergrund der ganzen Geschichte ist das Internet bei meinen Eltern und meiner Schwester gewesen. Seit Jahren gibt es dort nur DSL light (384 kbit/s) und Aussichten auf Besserung bestanden auch nicht.

Schon lange suche ich nach Alternativen, UMTS ist (in unserem Dorf) gerade mal so schnell wie DSL light und hat noch dazu Traffic-Beschränkungen. LTE sollte erst kommen, dann wieder doch nicht – jedenfalls nicht gleich – und hat außerdem bei der Telekom (der einzige Anbieter, der überhaupt ausbauen wollte) diese nervigen 3- und 5-GB-Grenzen drin. Beim Erreichen der 3 GB wird auf 1024 kbit/s gebremst und bei 5 GB surft man den Rest des Monats mit 384 kbit/s und hat nur 64 (statt 96 bei DSL light) kbit/s Upload. Da meine Schwester viel und gern auf Youtube unterwegs ist, wäre das wohl sowieso schief gegangen. Ebenso wären wahrscheinlich sehr viele Bewohner in der LTE-Zelle bei einem Ausbau auf „Call&Surf via Funk“ umgestiegen, was wiederum beim Shared Medium Funk bedeutet, dass für alle die Datenrate sinkt. Als weitere Alternative schien sich erst das im Nachbardorf etablierte WDSL Oberlausitz anzubieten. Der Carrier bietet seinen Kunden den Internetzugang via WLAN an und bezieht es mit Hilfe von 5GHz Richtfunk aus der nächsten größeren Stadt Löbau. Leider ist es für einen so kleinen Anbieter nicht möglich, unrentable Randgebiete anzuschließen und die benötigten 10-15 Kunden bekommt man in einem kleinen Dorf, in dem der Altersdurschnitt irgendwo jenseits der 55 liegt, eben nicht zusammen. Daher fiel auch diese Methode aus.

Parallel zu den alternativen Möglichkeiten habe ich auch auf Lösungen mit dem bisherigen Anschluss gehofft. Der zeigte nämlich eine Leitungskapazität von über 1500 kbit/s an – zwar bei entsprechend hoher Dämpfung, aber was solls. Leider hat die Telekom jahrelang nur über feste Dämpfungsgrenzen geschaltet, sodass ich mich auf offiziellen Start von DSL-RAM gefreut habe (ich habe öfters diesen Thread im Onlinekosten-Forum besucht, um zu sehen, wann es nun endlich los geht). Leider war diese Freude völlig unbegründet, an unserem Anschluss war DSL RAM nicht möglich – zu lange Leitung.

Nach dieser Enttäuschung hatte ich erst mal „die Nase voll“ bis ich auf die Idee kam, es auch mal beim Haus meiner Großeltern, nur 1.2km Leitungslänge und etwa 600m Luftlinie entfernt, zu versuchen. Und siehe da: DSL RAM 2000 ist verfügbar. Von diesem Zeitpunkt an plante ich eine Richtfunkstrecke für DSL und Telefon. Etwa 3 Wochen später wurde das Projekt in die Tat umgesetzt.

Hier das Konzept:

Zum Einsatz kommen:

  • 1 FritzBox 7270 v3 als DSL-Modem und Router
  • 2 Outdoor-Panel-Richtantennen mit 18dbi von Theta
  • 2 Koaxkabel N-zu-RP-SMA (H155 Belden Low Loss), 7m
  • 2 D-Link DAP 1160 mit RP-SMA-Anschluss als Access-Points für die Richtfunkstrecke
  • 1 Fritzbox 7050 aus Altbeständen zur Versorgung des Elternhauses mit WLAN (inkl. Telefon via SIP-Registrar an der FB7270) und als WDS-Basisstation
  • 1 „gefritzter“ Speedport W501V (für 10 Euro gebraucht bei eBay) als WDS-Repeater
  • 1 Siemens Gigaset A400A Trio an der FB7050 (1. Rufnummer)
  • 1 altes T-Sinus 620S [ISDN] an der FB7270 (2. Rufnummer)
  • 1 namenloses, altes, schnurloses Seniorentelefon an der FB7270 (3. Rufnummer)
  • eine ganze Menge Kabel, Schrauben etc.

Die Montage der beiden Panels war insgesamt relativ unkompliziert, ein bisschen rumzirkeln war natürlich nötig. Ausrichten lassen sie sich dank der beigefügten Masthalterung recht frei. Die Ausrichtung selbst konnte ich nur via Durchsatzmessung ausführen weil der DAP 1160 leider keine Signalstärkeanzeige besitzt – hätte ich das vorher gewusst, hätte ich mich wohl für einen TP-Link mit Atheros-Chipsatz entschieden und DD-WRT hochgeflasht. Ich dachte aber, das wäre selbstverständlich… na ja. Die beiden APs sind als Bridge (ohne AP) konfiguriert und per LAN mit den Fritzboxen verbunden. Die Verschlüsselung funktioniert dank gleicher Geräte auf WPA2-Basis.

Während die erste Fritzbox natürlich als Router konfiguriert ist, nutzen die andere Fritzbox und der gefritzte Speedport (Anleitung hier) das Internet der 7270 mit. Die 7050 hat dabei in den WLAN-Settings WPA2-Verschlüsselung und WDS-Basisstation eingestellt. Die Mac-Adresse des gefritzten Speedport ist als Repeater eingetragen. Umgekehrt hat der Speedport die Adresse der 7050 als Basisstation eingetragen und funkt ebenfalls bei gleicher SSID und auf dem gleichen Kanal mit der gleichen Verschlüsselung. Somit haben beide Häuser schon mal WLAN und damit Internet.

Das ISDN-Telefon und das schnurlose Seniorentelefon habe ich ganz einfach an die 7270 angehängt und wie gewohnt über die Telefonieeinstellungen eingerichtet. Beim ISDN-Telefon ist zu beachten, dass man im Telefon bzw. an der Basisstation selbst nochmal die entsprechende MSN einstellen muss. Sonst klingelt es bei allen Anrufen. Für das andere Haus hatte ich mir eine Lösung über WLAN ausgedacht: 2 TC-300 (aka Pirelli DP-L10) sollten als eigenständige Handgeräte am WLAN angemeldet werden und direkte Telefonie ermöglichen. Für das DP-L10 hatte ich mich vor allem wegen des günstigen Preises entschieden; andere WLAN-Telefone, z.B. aus der Nokia E- oder N-Serie, kosten das fünf- bis sechsfache. Nun ja, das hat auch einen Grund. Nach 2 Tagen Herumexperimentieren ist es mir nicht geglückt, beide Telefone einzubuchen. Sie waren in der FB als WLAN-Telefone eingerichtet, eines anmelden und darüber telefonieren ging. Die Sprachqualität ist allerdings miserabel (egal wo man sich befindet, auch ½m neben der Fritzbox), der Akku hält gerade einmal einen Tag durch und die Reichweite ist sehr gering. Zudem wechseln die Telefone nicht automatisch den AP (zum Speedport bzw. zur Fritzbox), wenn dieser ein besseres Signal liefern würde. Alles in Allem ist das TC-300 ein echter Reinfall gewesen, daher habe ich mich entschieden, das Gerät zurück zu geben und dafür das Gigaset A400A Trio bestellt. Das wird an die Fritzbox 7050 gehängt und diese wird als WLAN-Telefon in der 7270 eingerichtet. Wie das genau funktioniert, verrät AVM in diesem .pdf (lustigerweise mit dem Namen 11833).

So sind nun letztendlich alle zufrieden und insgesamt 3 Haushalte werden mittels eines Call&Surf-Pakets mit Internet und Telefon versorgt. Eine, wie ich finde, sehr elegante und kostensparende Alternative zu LTE & Co. Wie man auf den Screenshots sehen kann, liegt Vollsync trotz recht hoher Dämpfungswerte und eines zerhackten Spektrums an. Die SNR ließe theoretsich sogar noch auf etwas mehr Speed hoffen, zunächst ist die Versechsfachung der Geschwindigkeit ein toller Erfolg.

Zum Schluss noch ein paar Bilder vom Projekt:

Praktische Methode zum „Kopieren mit Ausschluss“ unter Linux

Das Linux-Command cp enthält leider keine „–exclude“-Funktion. Daher kann man, wenn man rekursiv kopieren will, keine Verzeichnisse oder Dateien angeben, die ausgeschlossen werden sollen. In einem Forum habe ich diesen Tipp gelesen (und dann ausprobiert), der wirklich clever ist.

Das Programm tar enthält eine exclude-Funktion. Also nutzen wir doch einfach dieses:

1
tar -cvf - --exclude dir1 --exclude dir2 --exclude file1.ext --exclude file2.ext /path/to/source | (cd /path/to/destination; tar -xvf -)

Danke für diesen Tipp an vsemaska von linuxforums.org.

Webhosting mit ACLs

Die bekannten Unix-Rechte 644 oder 755 mögen für das Hosting eines einzelnen Projekts oder mehrerer Projekte, auf die man Shell-Zugriff hat, ausreichen. Wenn man aber Usern anbietet, ihre Site zu hosten gelangt man damit schnell an einen Punkt, wo diese Rechte einfach nicht mehr ausreichen.

Wenn zum Beispiel das CMS Joomla eine Komponente oder ein Modul über das Webinterface installiert bekommt so haben die Dateien, die installiert werden, als „Owner“ den User, unter dem der Webserver läuft (meist www-data). Andererseits hat ein manuell über FTP eingespieltes Template als „Owner“ den Hosting-Nutzer. Auf den meisten Systemen kommt dazu eine default-umask von 022, die allen neu erstellten Dateien ausschließlich Schreibrechte für den Ersteller/Besitzer der Datei zugesteht. Das könnte man zwar theoretisch ändern, würde damit aber die Sicherheit bei mehreren Nutzern kompromittieren (z.B. indem man die Nutzer und www-data einer Gruppe zuordnet, die Schreibrechte hat).

Alles in allem eine sehr unbefriedigende Lösung. Aber es gibt Abhilfe: ACLs (Access Control Lists) erlauben die feingranulare Einstellung der Rechte auf Nutzerebene wie auch in Gruppen. Mit ihnen lassen sich Konstrukte schaffen wie „www-data und Hostingnutzer haben rwx-Rechte“ – und das auch für neu erstellte Dateien. Doch der Reihe nach.

Für die Nutzung von ACLs unter Ubuntu/Debian braucht es einen einigermaßen modernen Kernel (>2.5.46, ob man diesen Kernel von 2002 noch „einigermaßen modern“ nennen kann lasse ich jetzt mal dahingestellt ;)) und die Partitionen müssen mit ext2 oder höher formatiert sein. In der /etc/fstab muss bei den Mountoptions aller Partitionen, mit denen ACLs genutzt werden sollen, der Parameter acl hinzugefügt werden, z.B.:

1
2
3
4
5
6
7
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
UUID=c1234f7f-fb32-4199-342a-4a12342f9a9d       /               ext3    defaults,usrquota,acl   0       1
UUID=f12349d1-d7e1-4ce5-4f3w-ddf971234b7       /boot           ext2    defaults        0       2
UUID=a1234b2b-b6bb-4572-33df-9351234335a0       none            swap    sw              0       0

Für die Bootpartition und die Swap-Partition brauchen wir natürlich keine ACLs, daher erfolgt der Eintrag nur auf der ersten Festplatte. Nach einer Änderung an der fstab muss das System neu gestartet werden um die Mountoptions zu übernehmen. Alternativ kann man natürlich auch den entsprechenden Mountpoint aushängen und manuell mit dem zusätzlichen Parameter neu mounten.

Als nächstes gehen wir in das Verzeichnis, welches die neuen ACLs erhalten soll und vergeben sie entsprechend unseren Wünschen:

1
2
3
cd /var/www/vhosts/username/
setfacl -R -m u::rwX,u:www-data:rwX,u:username:rwX .
setfacl -R -d -m u::rwX,u:www-data:rwX,u:username:rwX .

Die Zeile 2 des Codeschnipsels sorgt dafür, dass die User www-data und username Lese-, Schreib- und Ausführungsrechte für bereits bestehende Dateien/Ordner im Verzeichnis und allen Unterverzeichnissen erhalten. Das groß geschriebene „X“ sorgt dabei für eine automatische Berechnung der Maske, ohne die es zu Einschränkungen im Zugriff kommen kann. Zeile 3 macht das Gleiche wie Zeile 2, nur für neu erstellte Objekte (Parameter d = default). Mit Hilfe dieses Konstrukts hat man eine Umgebung geschaffen, in der der Nutzer sich mit FTP und PHP-Fileuploads austoben kann und doch die Sicherheit des Systems gewahrt bleibt. Zugleich haben andere Nutzer nach wie vor keinen Zugriff auf die Dateien und Ordner von Benutzer username.

Für den „Hausgebrauch“ reichen diese Befehle schon aus, um ein komfortables Arbeiten zu ermöglichen. Wer aber noch mehr erfahren möchte, dem sei die Seite über ACLs im Ubuntu-Wiki empfohlen. Dort wird u.a. ausführlich erklärt, wie man mit Gruppenrechten hantiert, wie man erstellte ACLs wieder los wird und wie man ein Backup seiner Listen anlegen kann.

CPU klebt an Kühlkörper – was tun?

Gestern habe ich mich endlich durchgerungen, mein Notebook richtig zu reinigen. Seit einiger Zeit hatte es im Idle-Betrieb 63-65° C und ist bei diversen Games, z.B. dem fordernden „Episodes from Liberty City“, sogar (zum Schutz der CPU) heruntergefahren – bei über 95° C. Das konnte nicht so weiter gehen, aber nach prüfendem Blick auf die Innereien des Laptops (MSI GT627-8647VHP) vor ein paar Monaten hatte ich es ad Acta gelegt weil es schien, man müsste das ganze Notebook zerlegen um an den verschmutzten (das konnte man sogar von außen sehen!) Luftabzugsschacht zu kommen.

Glücklicherweise hat dann jemand – wahrscheinlich ein Mitarbeiter von MSI – ein Video gepostet, in dem das Zerlegen des baugleichen Modells GX620 beschrieben wird. Mit dieser Anleitung im Rücken habe ich das Notebook zerlegt und dabei fiel mir auf, dass es die CPU beim Anheben der Heatpipe direkt mit aus dem Sockel gezogen hat, so fest verband das Wärmeleitpad Heatpipe und Prozessor. Um aber die CPU später wieder korrekt einsetzen zu können musste ich aber Heatpipe und CPU trennen (der Feststellmechanismus war sonst verdeckt).

Dabei hat mir ein ganz einfacher Trick (gepostet in diesem Forum) geholfen, den ich hier weitergeben möchte: Man nehme einen Fön und erhitze die CPU so stark, dass man sie gerade noch anfassen kann. Dann dreht man einfach ein bisschen und zack: die CPU ist ab.

Nach dem Auftragen der neuen Wärmeleitpaste (ich kann hier die von mir verwendete Arctic MX-2 empfehlen) und dem Zusammensetzen schnurrt der Q9000 nun wieder mit akzeptablen 47° C im Leerlauf – bei 30° Raumtemperatur.

Netlimiter 3: Remote-Control richtig einrichten

Viele Anwender berichten von Problemen bei der Einrichtung des Remote-Control-Service von NetLimiter (speziell unter Windows 7). Ich selbst bin auch auf diverse Probleme gestoßen. Hier die Lösung:

  • Der wichtigste Schritt besteht darin, Windows 7 zu sagen, dass es Remote-Anmeldungen mit eingetragener Domäne nicht filtert sondern direkt weitergibt. Dafür erstellt man unter HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system\ den DWORD(32 Bit)-Eintrag LocalAccountTokenFilterPolicy mit dem Wert 1.
  • Als nächstes kontrolliert man, ob die Dienste „Server“ und der RPC-Dienst unter Verwaltung->Dienste auch läuft.
  • Last but not least muss man in der Windows-Firewall (so aktiv) den Netlimiter-Service (nicht dem Client!) als Serverdienst erlauben.

Mit diesen Einstellungen bekommt man sofort Verbindung zum Remote-Netlimiter und kann wie vom lokalen Benutzer gewohnt die Limits setzen und aufheben.

MySQL und Index – oder: warum %-Zeichen böse sind

Heute bin ich auf eine interessante Sache gestoßen, die eigentlich ganz logisch ist (wenn man ein wenig über Bäume Bescheid weiß), auf die man aber von allein trotzdem erst nach viel Nachdenken kommt wie ich finde. Daher will ich sie niemandem vorenthalten 🙂

Es fing alles damit an, dass MySQL-Queries des XMLArsenal (siehe Projekte) unglaublich lange brauchten. Ein JOIN über 3 Tabellen mit WHERE-Clause auf einer und Primärschlüsseln in allen Tabellen (die zum JOIN verwendet wurden) brauchte teilweise bis zu 2 Sekunden. Nun ist der Datenbestand recht groß, etwa 170.000 Zeilen (~2GByte) in der größten Tabelle. Trotzdem konnte es eigentlich nicht angehen zumal auf der Namensspalte, die ich in der WHERE-Clause verwende, bereits ein Index definiert war. An dieser Stelle muss ich mich bei Silvan Mühlemann von techblog.tilllate.com bedanken, sein Artikel „Optimierung von MySQL-Abfragen: Verwendung des Index“ hat mich auf die richtige Spur bzw. eigentlich gleich zur richtigen Lösung gebracht: Nutzt man

1
LIKE %Name%

kann MySQL den definierten Index nicht nutzen, d.h. wieder Scan über die ganze Tabelle. Lässt man das vordere % weg wird das Ergebis zwar kleiner aber es steht der Nutzung des Index nichts mehr im Wege – Speedup in diesem Fall: 50.000-fach. Merke: kein % vorn wo es nicht unbedingt nötig ist. Faszinierend. 🙂

Flash „drängelt sich vor“

Beim Erstellen von Websites, die Flash beinhalten, ist mir schon des öfteren eine kuriose Eigenschaft des Flash-Objekts aufgefallen: Es ignoriert die natürliche Reihenfolge der Elemente (z-Index) und wird grundsätzlich als oberster Layer angezeigt. Damit überdeckt es ggf. auch absolut positionierte Elemente, bei denen einen z-Index definiert ist. Dieses Verhalten wird von Adobe sogar in einem extra Knowledgebase-Artikel beschrieben (warum auch immer es nicht einfach gleich dem Standard angepasst wird): tn_15523.

Um dieses Verhalten zu umgehen muss man nur einen zusätzlichen Parameter

1
<param name="wmode" value="opaque" />

einfügen, gültige Werte für value sind dabei window (default), opaque, und transparent. Bei den letztgenannten tritt dabei die Missachtung der z-Reihenfolge nicht auf.

Postfix + Courier unter Debian/Ubuntu oder: einen Mailserver aufsetzen

Vor einigen Tagen habe ich mein Ubuntu-System wegen der vielen Neuerungen und Security-Updates auf die Version 10.04 (Lucid Lynx) gebracht. Vorher natürlich ein Vollbackup erstellt (stolze 16 GB, wusste garnicht dass so viel drauf ist *g*), aber glücklicherweise nicht benötigt. Das Upgrade ging einfach und schnell, ein paar Fragen zu Config-Dateien waren schnell beantwortet und nach einem Neustart mit frischem Kernel 2.6.32-22 lief auf den ersten Blick alles super. Auf den zweiten Blick dann ein (kleiner) Schock: Plesk ging nicht mehr. Es war garnicht mehr installiert. Auf der Website von Parallels findet sich nur der Hinweis, dass maximal Ubuntu 8.04 unterstützt wird (nicht mal 9.10 – schwach). Na ja im Grunde genommen waren mir Systeme wie Plesk schon immer suspekt, man hat manchmal mehr Ärger damit als Nutzen davon und so bin ich nicht zurück zu 8.04 gegangen sondern habe im Internet gesucht wie ich am besten einen Mailserver aufsetze – denn der funktionierte nichtmehr.

Eigentlich wollte ich ja das Courier-Gesamtpaket courier-mta + courier-pop und courier-imap einsetzen. Nach langem Herumprobieren inklusive zu Rate ziehen der Mailingliste von Courier (courier-users) musste ich aber leider zum Schluss kommen, dass die zur Zeit im Lucid Lynx vorhandene Version der courier-mta wohl einen Bug aufweist, der die MTA nicht mit dem Authentifizierungsdaemon kommunizieren lässt. So bekam ich immer beim Eingehen einer Mail den Fehler

courieresmtpd: authdaemon: s_connect() failed: Permission denied

Nachdem ich diesen Fehler also nicht lösen konnte (sogar die selbst kompilierte Variante bockte mit dem gleichen Fehler rum) habe ich mich schweren Herzens (ich hasse ungelöste Probleme^^) entschieden, Postfix als MTA einzusetzen und Courier für den IMAP- und POP-Zugriff.

 

Zuallererst müssen natürlich die erforderlichen Programme installiert werden (als root):

1
apt-get install postfix courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl sasl2-bin libsasl2-2 libsasl2-modules

Bei der Installation von Postfix wählt man als Betriebsmodus Internet-Site aus.

adduser vmail einen neuen Benutzer an. Dabei wird auch ein Nutzerverzeichnis /home/vmail angelegt, in dem später alle Mails gespeichert werden. Die User- und Gruppenid merken wir uns für später. Jetzt wechseln wir zu dem angelegten Nutzer vmail, z.B. mit su vmail --preserve-environment (preserve-environment verhindert, dass die default-shell des Nutzers vmail zum Einsatz kommt, die ist normalerweise nämlich nicht was wir wollen). Als User vmail erstellen wir jetzt die Unterverzeichnisse für die einzelnen Domains und Nutzer, also z.B. für 2 Nutzer auf the-enlightened.de:

1
2
3
4
5
cd /home/vmail
mkdir -p the-enlightened.de/amras
maildirmake the-enlightened.de/amras/Maildir
mkdir -p the-enlightened.de/aerith
maildirmake the-enlightened.de/aerith/Maildir

Als Nächses kommt die Postfix-Config dran. Dafür muss man wieder als root angemeldet sein (neues Terminal oder exit als user vmail). Die Config befindet sich in /etc/postfix/main.cf. Hier muss überprüft werden, dass myhostname auf den Rechnernamen gesetzt ist, ansonsten muss das nachgeholt werden. Das Feld mydestination muss meist nicht geändert werden, hier sollten localhost und ebenfalls der Rechnername eingetragen sein. Schlussendlich sollte inet_interfaces auf all stehen, aber das sollte ebenfalls bereits so sein. Wir springen ans Ende des file und fügen folgende Zeilen ein (die Domains sowie die uid und die gid [die wir uns ja gemerkt haben] sind natürlich entsprechend anzupassen):

1
2
3
4
5
6
7
8
9
10
11
12
13
#virtual domains & smtp auth
virtual_mailbox_domains = the-enlightened.de domain2.tld domain3.tld
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:1006
virtual_gid_maps = static:1001
virtual_alias_maps = hash:/etc/postfix/virtual          
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options

Dann abspeichern und die in der config gerade angebenen files erzeugen:

1
2
touch /etc/postfix/vmailbox
touch /etc/postfix/virtual

Jetzt wird /etc/postfix/vmailbox editiert. Für jede Adresse wird die virtuelle Mailbox, in dem die Mails später landen sollen, angegeben, bei mir also z.B.

1
2
amras@the-enlightened.de        the-enlightened.de/amras/Maildir/
aerith@the-enlightened.de       the-enlightened.de/aerith/Maildir/

Wichtig ist hier der abschließende Slash, dadurch wird Postfix veranlasst, die Maildir-Struktur statt seiner eigenen zu benutzen. Die Angabe erfolgt also als Mailadresse + Leerzeichen/Tab + Pfad zum Maildir unter /home/vmail. Jetzt speichern und folgende Befehle ausführen:

1
2
3
postmap /etc/postfix/virtual
postmap /etc/postfix/vmailbox 
/etc/init.d/postfix reload

Ankommende Mails werden jetzt schonmal richtig einsortiert. Kommen wir also zum 2. Teil des Tutorials, dem Zugriff auf die Mails via Courier.

 

Hier kommen zuerst die Nutzerpasswörter an die Reihe. Dafür muss man weiter als root angemeldet sein. Wir ändern den Eintrag authmodulelist in /etc/courier/authdaemonrc auf
authmodulelist="authuserdb"

und legen mittels der folgenden Befehle die Nutzerpasswörter an:

1
2
3
4
5
6
7
8
9
userdbpw -md5 | userdb -f /etc/courier/userdb/the-enlightened.de amras@the-enlightened.de set systempw
(Passwort 2x eingeben)
userdb -f /etc/courier/userdb/the-enlightened.de amras@the-enlightened.de set home=/home/vmail/the-enlightened.de/amras/ gid=1001 uid=1006
 
userdbpw -md5 | userdb -f /etc/courier/userdb/the-enlightened.de aerith@the-enlightened.de set systempw
(Passwort 2x eingeben)
userdb -f /etc/courier/userdb/the-enlightened.de aerith@the-enlightened.de set home=/home/vmail/the-enlightened.de/aerith/ gid=1001 uid=1006
 
makeuserdb

Nach einem Neustart von courier-authdaemon (kA ob das nötig ist, schädlich ist es aber keinesfalls)
/etc/init.d/courier-authdaemon restart
können sich die eingetragenen Nutzer per POP oder IMAP (ggf. mit SSL) anmelden.

Um Mails versenden zu können (nicht von localhost sondern mit Anmeldung) erfordert es ein paar weitere Schritte. So muss die Datei /etc/postfix/master.cf editiert werden (als root). Hier wird beim ersten Eintrag (smtp) für den Parameter chroot ein „n“ festgelegt. Mit der chrooted-Umgebung habe ich es nach unzähligen Versuchen nämlich nicht zum Laufen bekommen.

1
2
3
4
5
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd

Als finaler Schritt editieren wir nun die /etc/postfix/sasl/smtpd.conf wie folgt:

1
2
3
4
pwcheck_method: authdaemond
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/courier/authdaemon/socket
#autotransition: true

autotransition:true wird meiner Erfahrung nach nur bei der Benutzung von saslauthd benötigt, authdaemond kommt ohne aus. Bei wem es nicht funktioniert möge trotzdem den Parameter mal testweise anstellen (Mailserver scheinen die verschiedensten Macken zu haben, die sie nicht-deterministisch auf diveren Konfigurationen behindern).

Nach einem Neustart von Postfix und ggf. dem Start von courier-authdaemon via /etc/init.d/courier-authdaemon start sollte der Mailserver nun voll funktionstüchtig sein.

css.php