Dennis: Konfiguration von SASL Auth für Postfix mit MySQL Backend #2

Hi,

Ich hatte vor längerer Zeit mal ein Problem mit der Konfiguration von SASL Auth für Postfix mit MySQL Backend.

Damals wollte das einfach nicht funktionieren, nun habe ich eine Lösung gefunden. Meine damalige Konfiguration sah so aus:

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
sql_engine: mysql
sql_hostnames: localhost
sql_database: system
sql_user: <MySQL Username>
sql_passwd: <MySQL Password>
sql_select: <MySQL Select Query>

Im STMP-Dialog sagte Postfix stets:

535 5.7.0 Error: authentication failed: authentication failure

Nun habe ich nachdem ich eine andere Vorlage gesehen habe mal die Zeile sql_database hinter sql_passwd geschoben, sodass meine Konfiguration nun so aussieht:

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: PLAIN LOGIN
sql_engine: mysql
sql_hostnames: localhost
sql_user: <MySQL Username>
sql_passwd: <MySQL Password>
sql_database: system
sql_select: <MySQL Select Query>

Postfix neu gestartet und *zack*, im Dialog mit Postfix:

235 2.0.0 Authentication successful

Das Ganze nochmal rückgängig gemacht und geprüft - es scheint in der Tat nur an der Reihenfolge der Parameter zu liegen. Ich wollte das nur mal hier zu Worte bringen, falls jemand später noch mal dasselbe Problem haben sollte ;-)

Im Anschluss habe ich aber auch noch eine neue Frage:

Die Passwörter liegen in diesem Fall im Klartext in der MySQL-Datenbank, was ich nicht allzu schön finde. Gibt es eine Möglichkeit irgendwie nur Hashs in der Datenbank abzulegen? Wie bringe ich das dem ausprop Plugin bei?

Desweiteren habe ich zufällig irgendwo gelesen, dass das auxprop Plugin veraltet sein sollte. Stimmt das? Als neue Alternative wurde in den Artikel saslauthd vorgeschlagen. Dieser kann (nach meinen Recherchen) aber nur über PAM eine Authentifizierung mit MySQL durchführen. Wenn das stimmt, wie soll ich dann eine Authentifizierung über MySQL-Backend durchführen, wenn ich PAM nicht benutzen und trotzdem aktuelle Software verwenden möchte?

Viele Grüße,
  ~ Dennis.

  1. Halo Dennis,

    Die Passwörter liegen in diesem Fall im Klartext in der MySQL-Datenbank, was ich nicht allzu schön finde. Gibt es eine Möglichkeit irgendwie nur Hashs in der Datenbank abzulegen? Wie bringe ich das dem ausprop Plugin bei?

    Ohne Patch geht das AFAIK nicht mittels auxprop.

    Desweiteren habe ich zufällig irgendwo gelesen, dass das auxprop Plugin veraltet sein sollte. Stimmt das?

    Nein (meines Wissens).

    Als neue Alternative wurde in den Artikel saslauthd vorgeschlagen.

    Der saslauthd hat diverse Vorteile und auch Nachteile gegenüber auxprop. Vorteile: Er kann PAM nutzen und somit können die Passwörter auch gehasht in der DB gespeichert werden. Andererseits unterstützt der saslauthd nur AUTH PLAIN und keine anderen Authentifizierungsmechanismen für CRAM-MD5. Das ist kein Problem, wenn die Verbindung verschlüsselt wird, wenn die Verbindung unverschlüsselt übertragen wird, können bei AUTH PLAIN dagegen Passwörter ausgehorcht werden.

    [saslauthd]
    Dieser kann (nach meinen Recherchen) aber nur über PAM eine Authentifizierung mit MySQL durchführen.

    Ja.

    Wenn das stimmt, wie soll ich dann eine Authentifizierung über MySQL-Backend durchführen, wenn ich PAM nicht benutzen und trotzdem aktuelle Software verwenden möchte?

    auxprop ist (meines Wissens) immer noch aktuell. Allerdings kann man mit auxprop ohne Patch wie gesagt die Passwörter nicht gehasht in der DB ablegen.

    Viele Grüße,
    Christian

    1. Hi Christian,

      Der saslauthd hat diverse Vorteile und auch Nachteile gegenüber auxprop. Vorteile: Er kann PAM nutzen und somit können die Passwörter auch gehasht in der DB gespeichert werden. Andererseits unterstützt der saslauthd nur AUTH PLAIN und keine anderen Authentifizierungsmechanismen für CRAM-MD5. Das ist kein Problem, wenn die Verbindung verschlüsselt wird, wenn die Verbindung unverschlüsselt übertragen wird, können bei AUTH PLAIN dagegen Passwörter ausgehorcht werden.

      Ok, danke - ich werde also wohl bei auxprop bleiben (warum finde ich eigentlich nirgendwo eine saubere Dokumentation zu auxprop?) oder eine ganz andere Software nutzen, wie Dork vorschlug. Letzteres wäre allerdings mit Administrationsaufwand für die Umstellung verbunden und das widerstrebt mir gerade etwas ;-)

      Viele Grüße,
        ~ Dennis.

  2. Die Passwörter liegen in diesem Fall im Klartext in der MySQL-Datenbank, was ich nicht allzu schön finde. Gibt es eine Möglichkeit irgendwie nur Hashs in der Datenbank abzulegen?

    Die Zeile

    sql_select: <MySQL Select Query>

    sieht für mich so aus, als wenn Du selbst bestimmen könntest, wie der Befehl an MySQL aussieht. Es würde Dich also nichts daran hindern, statt "select … where passwort='%s'" zum Beispiel "select … where passwort=sha('%s')" zu benutzen (%s wäre hier der Platzhalter für das von SASL-Seite kommende Passwort).

    Desweiteren habe ich zufällig irgendwo gelesen, dass das auxprop-Plugin veraltet sein sollte. Stimmt das? Als neue Alternative wurde in den Artikel saslauthd vorgeschlagen.

    saslauthd, ist das der von Cyrus? Igitt, ich bin froh, dass ich das unhandliche Teil los bin.

    Wenn das stimmt, wie soll ich dann eine Authentifizierung über MySQL-Backend durchführen, wenn ich PAM nicht benutzen und trotzdem aktuelle Software verwenden möchte?

    Dovecot ist zwar eigentlich ein IMAP- und POP3-Server, bringt aber einen feinen Türsteher mit, der unter anderem auch mit MySQL umgehen kann (und natürlich mit Postfix).

    1. Hi Dork,

      Die Zeile [...] sieht für mich so aus, als wenn Du selbst bestimmen könntest, wie der Befehl an MySQL aussieht. Es würde Dich also nichts daran hindern, statt "select … where passwort='%s'" zum Beispiel "select … where passwort=sha('%s')" zu benutzen (%s wäre hier der Platzhalter für das von SASL-Seite kommende Passwort).

      Interessante Idee ;-) Leider geht das hier prinzipiell erst mal nicht, der Query sieht so aus:

      SELECT password FROM mail_boxes WHERE address = '%u@%r' AND status = 'A'

      Das mit dem Status ist nur ein Flag von mir, ob das E-Mail Konto aktiviert ist. Auxprop möchte also das Passwort haben und es selber prüfen - was dann halt nur als Plaintext geht.

      Ich habe keinen Platzhalter gefunden, der zum Passwort expandiert, sonst könnte man Auxprop austricksen, in etwa so:

      SELECT '%p' AS password FROM mail_boxes WHERE address = '%u@%r' AND password = SHA('%p')

      Würde (wenn es überhaupt möglich wäre) allerdings dazu führen, dass Auxprop bei einem falschen Passwort denkt, dass der User gar nicht existiert.

      saslauthd, ist das der von Cyrus? Igitt, ich bin froh, dass ich das unhandliche Teil los bin.
      Dovecot ist zwar eigentlich ein IMAP- und POP3-Server, bringt aber einen feinen Türsteher mit, der unter anderem auch mit MySQL umgehen kann (und natürlich mit Postfix).

      Also Cyrus gegen Dovecot austauschen... Hm... Ich habe da mal einen Blick draufgeworfen und muss sagen, dass mir Dovecot recht gut gefällt. Allerdings zögere ich wegen dem Aufwand der Umstellung etwas ;-)

      Hat jemand hier zufällig noch Erfahrungsberichte mit Dovecot?

      Viele Grüße,
        ~ Dennis.