A felhasználók hitelesítése

  • Beküldve: 2015. október 21, 22:30
  • Szerző: Bolemányi Attila

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:

disable_plaintext_auth = yes

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

auth_username_chars

A hitelesítés során a felhasználói névben csak az itt megadott karaktereket fogadjuk el.

auth_username_format

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.

auth_worker_max_count

Az egyszerre futó auth-worker folyamatok maximális száma.

auth_mechanisms

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!

!include auth-sql.conf.ext

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.