Hash

Vergangene Nacht wurde auf meinem Server Courier gegen Dovecot ausgetauscht. Abgesehen davon, dass ich erstmal leicht verwirrt vom Umfang der Konfigurationsdatei war lief auch alles sehr gut. Die eigentliche Umstellung dauert ~1 1/2 Stunden.
Etwas mehr Kopfzerbrechen bereitete mir, als ich Postfix dazu bewegen wollte sein SMTP AUTH über Dovecots SASL abzuhandeln. Tun wollte ich dies, da ich über Dovecot beispielsweise Passwörter mit SHA1 + Salt gehasht speichern kann was, wie schon vor einer Weile erwähnt, mit Postfix und PAM nicht funktioniert. Es gibt zwar ein wunderbar einfaches Howto wie man Postfix dazu bringt Dovecots SASL Authentifzierung zu verwenden, allerdings erhielt ich nach befolgen der Anleitung einfach nur folgende Fehlermeldung in meinem Errorlog:

Jun 1 03:54:16 localhost postfix/master[7882]: reload configuration /etc/postfix
Jun 1 03:54:42 localhost postfix/smtpd[11518]: warning: SASL: Connect to smtpd failed: No such file or directory
Jun 1 03:54:42 localhost postfix/smtpd[11518]: fatal: no SASL authentication mechanisms
Jun 1 03:54:43 localhost postfix/master[7882]: warning: process /usr/lib/postfix/smtpd pid 11518 exit status 1
Jun 1 03:54:43 localhost postfix/master[7882]: warning: /usr/lib/postfix/smtpd: bad command startup — throttling

Ich rätselte ein paar Stunden woran das liegen könnte und kam keinen Schritt weiter. Aber dann fand ich doch den Übeltäter. In diesem Fall die Datei /etc/default/saslauthd. Dort waren als OPTIONS für Postfix folgende gesetzt:

OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”

Dies war ja aber nun obsolet geworden. Nach dem abändern der Zeile auf:

OPTIONS=”-c”

funktionierte dann das Ganze auch.
Grundlegend hab ich also nun alles wieder so funktionierend wie vorher, allerdings mit mehr Möglichkeiten was ich damit nun anstellen kann. Nun werden nach und nach die Passwörter auf salted-SHA1 umgestellt und auch einfach zu handhabende Anti-Spam-Maßnahmen für die Benutzer werden folgen, wenn ich mal die Zeit dafür habe.

Entweder ich übersehe grade einen wichtigen Punkt oder pam-mysql und MySQL selbst bieten keinen sinnvollen Hashing-Algorithmus für Passwörter. Aber zum eigentlichen Thema:

Die Informationen zu den E-Mail-Adressen und FTP-Accounts auf diesem Server befinden sich in einer MySQL-Datenbank. Unter anderem auch die gehashten Passwörter. Auf diese Informationen wird beispielsweise via pam-mysql zugegriffen. pam-mysql in Debian bietet zum Hashing der Passwörter drei Möglichkeiten. crypt(), md5 und die MySQl password()-Funktion.
Doch alle drei haben schwerwiegende Nachteile: crypt() weil es nur die ersten acht Zeichen der zu hashenden Zeichenkette beachtet, md5 weil der Algorithmus inzwischen gebrochen wurde und zu password() steht im MySQL-Manual ausdrücklich: “The PASSWORD() function is used by the authentication system in MySQL Server; you should not use it in your own applications.“.

Also alles irgendwie keine sinnvollen Möglichkeiten. Die neuste Upstreamversion von libpam-mysql unterstützt auch sha1, wobei dieses ja auch mehr oder weniger gebrochen ist.
Ich persönlich würde mir eher sowas wie sha512 + salt wünschen. Aber das unterstützt MySQL nicht und somit auch nicht pam-mysql.

Kennt da jemand irgendeine tolle Möglichkeit dieses Problem zu umgehen oder muss man zwangsläufig damit leben?

Update: Ich sehe grade, dass MySQL6 das Erzeugen von Hashs der SHA2-Famile ermöglichen wird. Das ist ja immerhin schon mal etwas. Fehlt nur noch das Salt.