courier-​IMAP mit MySQL-​Authentication

Von in linux

Ich habe vor kur­zem auf mei­nem root-​Server einen Cou­rier Mail Ser­ver auf­ge­setzt. Weil die Instal­la­ti­on mit meh­re­ren Domains und Mail­bo­xen und belie­big vie­len Mail­adres­sen umge­hen kön­nen muss, habe ich mich für eine Daten­bank­an­bin­dung ent­schie­den. Cou­rier Mail bie­tet hier her­vor­ra­gen­de Werk­zeu­ge und die Instal­la­ti­on war schnell abge­schlos­sen. Aber auch ich bin über die Pro­ble­ma­tik der Pass­wor­t­er­stel­lung gestol­pert und muss­te mich nicht uner­heb­lich lan­ge mit der Mel­dung “sup­plied pass­word ‘[…]’ does not match encryp­ted pass­word ‘[…]’” her­um ärgern. Mehr durch Zufall stieß ich dann auf die Lösung für mein Pro­blem und weil die­se mit­un­ter nicht leicht zu fin­den ist, möch­te ich hier kurz die Lösung beschrei­ben.

Wer die Authen­ti­fi­zie­rung für cou­rier über eine Daten­bank lau­fen las­sen möch­te, muss das File /​etc/​courier/​authmysqlrc anpas­sen. Unge­fähr in Zei­le 92 defi­niert man die Tabel­len­spal­te für das ver­schlüs­sel­te Pass­wort: MYSQL_​CRYPT_​PWFIELD. Lei­der fin­det sich in den Kom­men­ta­ren kein Hin­weis dar­auf, dass MyS­QL eine nicht stan­dar­di­sier­te Crypt-​Funktion benützt, die ande­re Ergeb­nis­se lie­fert, als die sys­tem­ei­ge­ne Funk­ti­on von Linux. Der ent­schei­den­de Hin­weis fin­det sich ent­we­der im Inter­net (sehr schwer zu fin­den, selbst wenn man weiß, wonach man suchen muss), oder in der Doku­men­ta­ti­on zu cou­rier: /usr/share/doc/courier-authlib-mysql/README.authmysql.html:

NOTE: this password must be crypted using the operating system's crypt
    function, NOT MySQL's crypt function. MySQL's crypt() function is
    non-standard and is not generally compatible with the operating
    system's crypt function.

Juhu. Bleibt die Fra­ge, wie man in Linux schnell ein Pass­wort ver­schlüs­selt. Das wie­der­um wird in dem Readme-​File unfreund­li­cher­wei­se nicht ver­ra­ten.

Dabei lie­fert cou­rier mit dem Paket courier-​authlib-​userdb das benö­tig­te Pro­gramm schon mit. Das dazu­ge­hö­ri­ge Pro­gramm ruft man stan­dard­mä­ßig mit dem Befehl

userdbpw [[-md5] | [-hmac-md5] | [-hmac-sha1]] |userdb {name} set {field}

auf, wobei das Ergeb­nis aber in das File userdb gepiped wird, was wir gar nicht benö­ti­gen. (Nähe­re Infor­ma­tio­nen fin­den sich unter “man userdbpw”).
Für unse­re Bedürf­nis­se reicht die Ein­ga­be

userdbpw

, even­tu­ell mit dem Para­me­ter -md5. Dar­auf­hin fragt das Pro­gramm zwei­mal nach dem Pass­wort, das Linux-​üblich nicht ange­zeigt wird. Die Aus­ga­be der Ver­schlüs­se­lung erfolgt jetzt direkt in der Stan­dard­aus­ga­be der Kon­so­le, die wir ein­fach kopie­ren und in die Daten­bank über­tra­gen kön­nen. Jetzt soll­te auch der Log­in funk­tio­nie­ren.

Wer nur das Ver­schlüs­se­lungs­pro­gramm ohne den Cou­rier Ser­ver benö­tigt, kann sich das Paket mit 

sudo apt-get install courier-authlib-userdb

besor­gen.

Share on LinkedInShare on Redditshare on TumblrShare on StumbleUponDigg thisShare on FacebookGoogle+Tweet about this on TwitterEmail to someone