A hitelesítés két részből áll. A Dovecot egyrészt önmaga számára hitelesíti a kapcsolódó felhasználókat, másrészt pedig a Postfix számára is elvégzi ugyanezt a feladatot, amikor a felhasználók leveleket küldenek a Postfixen keresztül. A felhasználói hitelesítés beállításainak egy része a 10-master.conf fájlban található, ahol meghatározunk egy auth nevű szolgáltatást:
... service auth { unix_listener auth-userdb { mode = 0660 user = vmail group = vmail } # Postfix SMTP-auth: unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } user = group = } ...
Két unix_listener sort találunk: az első meghatároz egy auth-userdb socket fájlt a /var/run/dovecot mappában, amelyet például az imap-login szolgáltatás használ a kapcsolódó IMAP kliensek hitelesítéséhez (lásd a következő oldalon).
A másik unix_listener sor a Postfix számára teszi lehetővé a kapcsolódó felhasználók Dovecot által történő hitelesítését a /var/spool/postfix/private/auth socket fájlon keresztül. A sockethez a postfix nevű felhasználó és csoport fér hozzá, más nem.
Ugyanebben a fájlban meg kell határozunk egy auth-worker nevű szolgáltatást is:
... service auth-worker { user = $default_internal_user } ...
Az auth szolgáltatás több auth-worker szolgáltatáshoz kapcsolódik a hitelesítési folyamat elvégézése során. Jelen esetben a felhasználók kikeresését a MySQL adatbázisból (a lekérdezések futtatását) az auth-worker szolgáltatás végzi el. Mivel most nem az alapértelmezett PAM hitelesítési módot használjuk (amelynek gyakran bele kell olvasnia például a /etc/shadow fájlba is), így nincs szükség arra, hogy a szolgáltatást a root felhasználó nevében futtassuk. Ebben az esetben a $default_internal_user az ajánlott beállítás.
A felhasználói hitelesítés további beállításai a 10-auth.conf fájlban találhatóak:
disable_plaintext_auth = yes auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ auth_username_format = %Lu auth_worker_max_count = 30 auth_failure_delay = 2 secs auth_ssl_require_client_cert = no auth_mechanisms = plain login !include auth-sql.conf.ext
A fontosabb beállítások az alábbiak:
Azaz nem támogatjuk a titkosítatlan jelszóküldést a hitelesítési folyamat során, csak akkor, ha a kapcsolat maga titkosított csatornán épül fel (SSL/TLS).
A hitelesítés során a felhasználói névben csak az itt megadott karaktereket fogadjuk el.
Mielőtt kikeresnénk a felhasználói nevet (jelen esetben a MySQL adatbázisból), végezze el azon az itt megadott formázást. A %Lu jelentése: konvertálás kisbetűs formátumba.
Az egyszerre futó auth-worker folyamatok maximális száma.
A felhasznált hitelesítési mechanizmusok listája. A plain mechanizmus szerint a kliens titkosítatlan formában küldi el a jelszót a szervernek. A login mechanizmus szintén titkosítatlan módon küldi el a felhasználói nevet és a jelszót a hálózaton keresztül, és azért van rá szükség, hogy az Outlook klienseket rávegyük arra, hogy az SMTP párbeszéd során el tudják küldeni a felhasználói nevet és jelszót is (ne felejtsd el, hogy a levelek küldésénél nem a Postfix, hanem a Dovecot hitelesíti a levelet küldeni próbáló felhasználókat). A login mechanizmus nélkül tehát a Microsoft levelezőkliensei nem lesznek képesek felhasználói hitelesítés mellett levelet küldeni a szerverünk segítségével!
A hitelesítési beállítások teljessé tételéhez vegyük be a csapatba az auth-sql.conf.ext fájlt is. Nézzük meg, itt mit találunk:
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }
Vagyis, meghatározzuk azokat az adatbázisokat (passdb és userdb), amelyből a felhasználói nevet és jelszót vissza lehet keresni. Mindkettő egy SQL adatbázisban található (driver = sql), a paraméterként átadott fájl pedig azt a konkrét lekérdezést tartalmazza, amelyet végre kell hajtanunk annak érdekében, hogy a MySQL adatbázisból kikeressük a kérdéses felhasználót és a hozzá tartozó jelszót is.
A dovecot-sql.conf.ext fájl tartalma ennek alapján:
driver = mysql connect = dbname=postfix user=postfix host=127.0.0.1 password=Pa$$w0rd default_pass_scheme = MD5-CRYPT password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active ='1' user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', CAST(quota AS CHAR)) AS quota_rule FROM mailbox WHERE username = '%u' AND active ='1'
A kapcsolódási adatok és az SQL lekérdezések tartalma önmagáért beszél. Az is látható, hogy a levelező kliensek nem a jelszót küldik el a hitelesítés során, hanem annak az MD5 algoritmus szerinti hash értékét (default_pass_scheme = MD5-CRYPT). Természetesen ehhez arra van szükség, hogy a MySQL adatbázisban se a jelszavak legyenek eltárolva, hanem szintén az MD5 algoritmus szerinti hash értékeik. Így a hitelesítés során valójában nem két jelszó, hanem két hash érték kerül összehasonlításra egymással.
A user_query sorban pedig megfigyelhető a kvóta adatok lekérdezése is.