Posts contrassegnato dai tag ‘mysql’

Post

patch libpam-mysql

In Senza categoria on novembre 20, 2008 di poyblog Messo il tag: , , ,

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) :

Jun 12 12:53:47 ubuntu saslauthd[6028]: pam_mysql – non-crypt()ish MD5
hash is not supported in this build.
Jun 12 12:53:47 ubuntu saslauthd[6028]: DEBUG: auth_pam:
pam_authenticate failed: Permission denied
Jun 12 12:53:47 ubuntu saslauthd[6028]: do_auth : auth failure:
[user=postmaster] [service=imap] [realm=] [mech=pam] [reason=PAM auth error]

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:

  1. scaricare il sorgente da http://ftp.de.debian.org/debian/pool/main/p/pam-mysql/pam-mysql_0.6.2.orig.tar.gz
  2. decomprimerlo e modificare le linea 109 del file Makefile.ini in questo modo:

    DEFS = @DEFS@ -I. -I$(srcdir) -I. -DHAVE_OPENSSL

  3. installare i seguenti pacchetti di supporto, anche già compilati (

    libpam0g-dev, libmysqlclient15-dev, libssl-dev

    )

  4. classica procedura di compilazione ->

    ./configure –prefix=/usr –with-openssl — make — make install

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

Iscriviti

Get every new post delivered to your Inbox.