Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by hever »

Hallo zusammen,
ich habe einen Postfix SMTP Server bereitgestellt.
Er erwartet eine Authentifizierung mit Klartext-Passwort via AUTH PLAIN.
Das Klartext-Passwort wird an Cyrus SASL 2 weitergegeben und dort mit einer Klartext-Passwort-Spalte in einer MySQL Datenbank vergleichen.

Soweit klappt ja alles.

Das simple Problem:
Die Passwörter stehen im Klartext in der Datenbank.
Ich möchte die Passwörter aber als MD5-Hash ablegen.

Postfix soll das Passwort wie gewohnt als Klartext-Passwort an Cyrus SASL 2 weitergeben. Cyrus SASL 2 soll dann den MD5-Hash des Passwortes mit dem in der Datenbank gespeicherten MD5-Hash vergleichen.

Diese Anforderung an ein Programm das extra für Authentifizierung geschrieben wurde ist denke ich nicht sehr hoch.

Noch ein paar relevante configs:
/etc/postfix/main.cf

Code: Select all

# SMTP - SASL Configuration
###########################
# Enable SASL authentication in the Postfix SMTP server.
smtpd_sasl_auth_enable = yes

# Report the SASL authenticated user name in the smtpd(8)
# Received message header.
smtpd_sasl_authenticated_header = yes
 
# Enable inter-operability with SMTP clients that implement an
# obsolete version of the AUTH command (RFC 4954).
broken_sasl_auth_clients = yes

# The access restrictions that the Postfix SMTP server
# applies in the context of the RCPT TO command.
smtpd_recipient_restrictions = reject_sender_login_mismatch
                               permit_sasl_authenticated
                               reject

# Postfix SMTP server SASL security options
smtpd_sasl_security_options = noanonymous

# Optional lookup table with the SASL login names that own sender
# (MAIL FROM) addresses.
smtpd_sender_login_maps =  mysql:/etc/postfix/mysql_smtpd_sender_login_maps.cf


/etc/postfix/sasl/smtpd.conf

Code: Select all

# Whitespace separated list of mechanisms used to verify passwords
pwcheck_method: auxprop

# Name of auxiliary plugin to use
auxprop_plugin: sql

# Specify a list of authentication mechanisms
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5

# Specify database backend
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: xxx
sql_database: xxx

# Authentication SQL Query
sql_select: SELECT password FROM view_emailaccount WHERE address REGEXP '(^%u@%r.?$)'


Etwas über SASL:
http://mod-authn-sasl.sourceforge.net/sasl/index.html
http://mod-authn-sasl.sourceforge.net/sasl/options.html
... und Postfix:
http://www.postfix.org/SASL_README.html

Ich habe versucht in der smtpd.conf einfach
password_format: crypt
srp_mda: md5 (Message digest algorithm for SRP calculations (possible values: 'md5', 'sha1', 'rmd160')
zu setzen, das hat aber leider auch nichts gebracht.
Wenn "srp_mda" nicht dafür ist, was macht es dann ??


Dann habe ich noch gelesen courier-authlib dazwischenzuschalten. Meiner Meinung nach muss es aber auch irgendwie mit SASL gehen, was ja genau dafür gemacht wurde.

Edit: Ach ja und ich hab noch was von nem Patch gelesen, den ich aber nicht benutzten möchte.

Für Ideen wäre ich dankbar!
Top

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

Re: Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by flo »

hever wrote:password_format: crypt
srp_mda: md5 (Message digest algorithm for SRP calculations (possible values: 'md5', 'sha1', 'rmd160')


Crypt und MD5 sind zwei verschiedene Methoden zur Verschlüsselung, aber logisch betrachtet unterstützt SQL ja nur PLAIN, insofern müsstest Du Dich per PAM authentifizieren und die Login-Daten verschlüsselt in der Datenbank ablegen - wie das mit Hash und Salt ablaufen soll - k.A. ...
Top

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by hever »

Crypt und MD5 sind zwei verschiedene Methoden zur Verschlüsselung, aber logisch betrachtet unterstützt SQL ja nur PLAIN, insofern müsstest Du Dich per PAM authentifizieren und die Login-Daten verschlüsselt in der Datenbank ablegen - wie das mit Hash und Salt ablaufen soll - k.A. ...


password_format wird von meiner Cyrus SASL Version eigentlich garnicht unterstützt soweit ich weiß. Ich hatte das nur gesetzt weil es im Patch angeblich funktioniert: Auf crypt, wegen der Info von der HP. Crypt() als funktion hab ich garnicht vor...

http://frost.ath.cx/software/cyrus-sasl-patches/
Configuration directive can be set to the following values:

* plaintext - passwords are stored in plaintext format - this is default
* crypt - passwords are stored as modular crypt hashes (md5 or blowfish crypt)
* crypt_trad - passwords are stored as des crypt hashes (2 character salt crypt)


Da MySQL ja selber nicht das Hashen vornehmen kann möchte ich ja auch das Cyrus SASL das macht und dann einfach mit dem Hash in der DB vergleicht.

Die PAM Sache hört sich glaube ich interessant an.
Muss ich dann aus Cyrus SASL irgendwie zu PAM verbinden?
Wie wird PAM realisiert, ist das dann ein eigener Deamon ?!
Top

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by hever »

Oder kennt ihr andere SASL implementationen die es ermöglichen einen MD5-Hash zu erstellen?
Hat schonmal jemand GNU SASL mit Postfix verwendet ?
Top

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by Roger Wilco »

Grundsätzlich gilt: Verschlüsselte/gehashte Passwörter in der Datenbank -> Nur Plaintext Authentifizierungsmechanismen (PLAIN, LOGIN) möglich. Und andersherum.

Es gibt (den bereits genannten) Patch für Cyrus SASL, allerdings willst du den wohl eher nicht benutzen. Wenn die Verbindung zum MTA via SSL oder TLS verschlüsselt ist, sind Plaintext Mechanismen aber nicht so schlecht. Auf der anderen Seite sind auch Klartext Passwörter in der Datenbank zu verantworten, wenn diese korrekt gesichert ist.

Du könntest auch Dovecot SASL mit einem speziellen Passwortschema benutzen. Das lohnt sich allerdings nur, wenn du Dovecot auch als POP3-/IMAP-Server nutzt oder einen MRA, bei dem der Umstieg auf Dovecot einfach ist (Courier IMAP etwa).
Top

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Authentifizierung mit Cyrus SASL 2 über MD5-Hash in MySQL-Datenbank

Post by hever »

Es gibt (den bereits genannten) Patch für Cyrus SASL, allerdings willst du den wohl eher nicht benutzen. Wenn die Verbindung zum MTA via SSL oder TLS verschlüsselt ist, sind Plaintext Mechanismen aber nicht so schlecht. Auf der anderen Seite sind auch Klartext Passwörter in der Datenbank zu verantworten, wenn diese korrekt gesichert ist.


Ich möchte einfach keine Klartext-Passwörter haben, TLS wirds geben. Da habe ich noch eine Frage: Kann ich konfigurieren, das PLAIN, LOGIN nur über TLS geht und das CRAM-MD5, DIGEST-MD5 auch ohne TLS funktioniert?

Du könntest auch Dovecot SASL mit einem speziellen Passwortschema benutzen. Das lohnt sich allerdings nur, wenn du Dovecot auch als POP3-/IMAP-Server nutzt oder einen MRA, bei dem der Umstieg auf Dovecot einfach ist (Courier IMAP etwa).


Von Dovecot hab ich auch im Postfix SASL Howto gelesen.
Ich wollte aber bei Cyrus bleiben, weil ich auch Cyrus POP/IMAP vorhatte. (Ich plane/teste ein neues System).
Ich hab aber nochmal nen Artikel (http://www.linux-magazin.de/heft_abo/ausgaben/2007/06/auf_der_teststrecke?category=0) gelesen und Dovecot erhält von mir eine Chance. Ich geh also komplett zu Dovecot.

Ich denke es müsste auch möglich sein Dovecot zu verwenden um SASL SMTP-AUTH gegen eine DB zu machen und als POP/IMAP Server trotzdem jeden anderen zu verwenden... (Das hätte ich wahrscheinlich versucht, wenn ich einen anderen POP/IMAP Server nutzen wollen würde. Aber wenn man schonmal soweit ist kann man auch courier-authlib dazwischenschalten.)

Naja, vielen dank für die Tipps und Anregungen!
Top