[exim] авторизация через dovecot2: несколько механизмов авторизации

Рассмотрим вариант когда вы хотите использовать несколько методов авторизации (plain, login, cram-md5) через dovecot или напрямую в базу.

Тестовый стенд: Exim 4.7, dovecot 2.0

Обязательное условие для обеих методов — пароль в базе хранится в открытом виде. Примечательно, что первый способ работает быстрее второго, но зато во втором методе мы имеем единый центр авторизации — dovecot

1) Авторизация без участия dovecot’a.

В раздел авторизации добавляем такой кусок кода:

plain_login:
        driver = plaintext
        public_name = PLAIN
        server_condition = ${lookup mysql{SELECT '1' FROM users \
                               WHERE username = '${quote_mysql:$2}' \
                               AND clear = '${quote_mysql:$3}'} {yes}{no}}
        server_set_id = $2

fixed_login:
        driver = plaintext
        public_name = LOGIN
        server_prompts = "Username:: : Password::"
        server_condition = ${lookup mysql{SELECT '1' FROM users \
                               WHERE username = '${quote_mysql:$1}' \
                               AND clear = '${quote_mysql:$2}'} {yes}{no}}
        server_set_id = $1

fixed_cram:
        driver = cram_md5
        public_name = CRAM-MD5
        server_secret = ${lookup mysql{SELECT clear FROM users \
                               WHERE username = '${quote_mysql:$1}'}{$value}fail}
        server_set_id = $1

2) Авторизация через dovecot

В dovecot’e делаем такие изменения:

файл dovecot-sql.conf:

default_pass_scheme = CLEARTEXT
password_query = SELECT clear AS password FROM users WHERE username = '%n@%d' AND enabled = '1

файл 10-auth.conf:

auth_mechanisms = plain login cram-md5 digest-md5

файл 10-master.conf:

service auth {
  unix_listener auth-master {
    mode = 0600
    user = _exim
    group = _exim
  }
  unix_listener auth-client {
    mode = 0660
    user = _exim
    group = _exim
  }
}

В exim’e делаем такие изменения — в раздел авторизации добавляем такой кусок кода:

auth_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

auth_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

auth_cram_md5:
driver = dovecot
public_name = CRAM-MD5
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *