Waerde GOT-ers,
Probleem: Ik wil gebruikers met een username en password authenticeren op een postfix server. Die postfix server moet deze credentials valideren in mysql.
Dit lijkt geen rocket science, maar ik kom er niet uit. De MySQL-database is een reeds bestaande database met een 'username', 'salt' en 'hashed_password' veld. De eerste twee zijn plain-text, de laatste ook maar betreft een SHA2(CONCAT(salt, password), 512) van het wachtwoord.
Google, vele fora en de postfix documentatie zelf gooien mij overal naartoe behalve naar een oplossing die een situatie beschrijft die ik heb.
Vraag 1: Is deze aanpak (van de user-tabel) zo bijzonder? IMHO is dit zoals het zou moeten.
Postfix en (via Google, vele fora en postfix documentatie) ook SASL en PAM laten mij zien dat het mogelijk is om deze username/password authenticatie mogelijk is door een configuratie voor mysql te definieren, die lijkt op onderstaand:
Bijvoorbeeld PAM configureer je vervolgens zo:
Maar, zoals je ziet negeert deze configuratie de salt!
Ik heb een mysql-function gemaakt die als volgt aangeroepen kan worden:
Deze doet onder water de hash met salt op een manier die werkt met de manier waarop de database nu al in elkaar zit. Resultaat is colom met naam 'success' en met 1 record erin: 0 of 1.
Vraag 2: Weet iemand hoe ik Postfix/SASL/PAM zover kan krijgen dat hij de username en password die hij van de gebruiker binnenkrijgt doorpaast naar mysql (bijvoorbeeld door gebruik te maken van de mysql-functie) en het resultaat daarvan gebruikt?
(Het lijkt erop dat alle postfix/mysql combinaties die ik op internet vind ZELF de vergelijking wil doen met de (hashed_)password kolom. En dus zelf een query wil bouwen.)
Mijn dank is groot.
Probleem: Ik wil gebruikers met een username en password authenticeren op een postfix server. Die postfix server moet deze credentials valideren in mysql.
Dit lijkt geen rocket science, maar ik kom er niet uit. De MySQL-database is een reeds bestaande database met een 'username', 'salt' en 'hashed_password' veld. De eerste twee zijn plain-text, de laatste ook maar betreft een SHA2(CONCAT(salt, password), 512) van het wachtwoord.
Google, vele fora en de postfix documentatie zelf gooien mij overal naartoe behalve naar een oplossing die een situatie beschrijft die ik heb.
Vraag 1: Is deze aanpak (van de user-tabel) zo bijzonder? IMHO is dit zoals het zou moeten.
Postfix en (via Google, vele fora en postfix documentatie) ook SASL en PAM laten mij zien dat het mogelijk is om deze username/password authenticatie mogelijk is door een configuratie voor mysql te definieren, die lijkt op onderstaand:
code:
1
2
3
4
5
6
7
8
| mysqlhost = localhost mysqluser = postfix mysqlpassword = secret mysqldatabase = productdb mysqltable = users mysqlusernamecolumn = username mysqlpasswordcolumn = hashed_password mysqlusecrypt = sha2 |
Bijvoorbeeld PAM configureer je vervolgens zo:
code:
1
| auth required pam_mysql.so user=postfix passwd=secret db=productdb table=users usercolumn=username passwdcolumn=hashed_password crypt=1 |
Maar, zoals je ziet negeert deze configuratie de salt!
Ik heb een mysql-function gemaakt die als volgt aangeroepen kan worden:
code:
1
| select fn_user_login([USERNAME], [PASSWORD]) as success; |
Deze doet onder water de hash met salt op een manier die werkt met de manier waarop de database nu al in elkaar zit. Resultaat is colom met naam 'success' en met 1 record erin: 0 of 1.
Vraag 2: Weet iemand hoe ik Postfix/SASL/PAM zover kan krijgen dat hij de username en password die hij van de gebruiker binnenkrijgt doorpaast naar mysql (bijvoorbeeld door gebruik te maken van de mysql-functie) en het resultaat daarvan gebruikt?
(Het lijkt erop dat alle postfix/mysql combinaties die ik op internet vind ZELF de vergelijking wil doen met de (hashed_)password kolom. En dus zelf een query wil bouwen.)
Mijn dank is groot.
My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant