Lo so, il titolo non è poi così comprensibile.
Partiamo da lontano:
in questi giorni sto configurando ed ottimizzando le funzionalità di un server di posta. Il server di posta è già in produzione e funziona degnamente.
Non sto a dilungarmi sulle modalità di installazione e configurazione, comunque il sistema operativo è ubuntu 8.04 server, con installato:
- postfix
- dovecot
- mysql come back-end di autenticazione degli utenti e dei domini
- clamav
- amavis
- postgrey
- spamassassin
- squirrelmail
- postfixadmin
Gli utenti ed i domini risiedono sul database mysql ed in particolare le password degli utenti vengono memorizzate con l’algoritmo MD5.
Per quanto riguarda servizi pop3, imap e la webmail stessa, l’autenticazione non da problemi, i dolori arrivano con l’autenticazione smtp.
Gli strumenti che utilizzo per l’autenticazione smtp sono:
- cyrus-sal
- pam
In particolare postfix delega al demone sasl la procedura di autenticazione e questa si appoggia alle librerie pam per la procedura vera e propria. Sostanzialemnte pam effettua una query sql per estrapolare nome utente e password e controllare le credenziali così ottenute con quelle inviate dal client di posta elettronica.
Pam, per interrogare il database mysql, sfrutta le librebrie libpam-mysql. Con questa metolodogia è possibile cifrare la password inviata in 4 modi, impostando il valore crypt:
- crypt(0) -> valore di default, password in chiaro
- crypt(1) -> valore cifrato con la funzione mysql crypt
- crypt(2) -> valore cifrato con la funzione mysql password
- crypt(3) -> valore cifrato con la funzione mysql md5 (la scelta adottata)
Tutto chiaro, ecco che la query da inserire nel file di configurazione di pam per l’autenticazione smtp:
auth required pam_mysql.so verbose=1 user=postfix passwd=password host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=3
La configurazione sembra a posto, ma la procedura di autenticazione fallisce inesorabilmente, ecco l’errore specifico da file di log pam (ottenuto aumentando la verbosità del log , con il paramentro Verbose=1) :
Dopo varie ricerche in internet sono riuscito a scoprire che questo è un bug riconosciuto del pacchetto pam_mysql.
Per risolvere, l’unica soluzione ora attuabile è scaricarsi il sorgente di libpam_mysql e ricompilarlo a mano, effattuando delle opportune modifiche.
Ecco i passi da fare:
- scaricare il sorgente da http://ftp.de.debian.org/debian/pool/main/p/pam-mysql/pam-mysql_0.6.2.orig.tar.gz
- decomprimerlo e modificare le linea 109 del file Makefile.ini in questo modo:
- installare i seguenti pacchetti di supporto, anche già compilati (
)
- classica procedura di compilazione ->
Finalmente viene generato il file lib_mysql.so corretto in /lib/security/pam, in modo tale che l’autenticazione con password md5 funziona senza ostacoli.
Fonti:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=373834
http://packages.debian.org/sid/libpam-mysql
http://pam-mysql.sourceforge.net/Documentation/package-readme.php?seemore=y









