[exim] PAM / file аутентификация

Тестовый стенд: Debian linux, exim 4.80

PAM аутентификация

— exim

В конфиге exim’a в разделе аутентификации пишем такой блок (при этом должна быть установлена версия exim4-daemon-heavy, так как в ней включена поддержка PAM):

begin authenticators

plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_condition = "${if pam{$2:$3}{1}{0}}"
server_set_id = $2

login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = "${if pam{$1:$2}{1}{0}}"
server_set_id = $1

— pam

Создаём файл /etc/pam.d/exim такого содержания:

auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth required pam_deny.so
account required pam_unix.so
password required pam_cracklib.so retry=3 type=
password sufficient pam_unix.so nullok use_authtok md5shadow
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so

File’овая аутентификация

— exim

begin authenticators

plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_set_id = $auth2
server_condition = "${if exists{/etc/exim4/passwd}{${lookup{$auth2}lsearch{/etc/exim4/passwd}\
{${if crypteq{$auth3}{\\\{md5\\\}${extract{1}{:}{$value}{$value}fail}}{true}{false} }}}}}"

login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_set_id = $auth1
server_condition = "${if exists{/etc/exim4/passwd}{${lookup{$1}lsearch{/etc/exim4/passwd}\
{${if crypteq{$auth2}{\\\{md5\\\}${extract{1}{:}{$value}{$value}fail}} {true}{false} }}}}}"

— file

Создаём файл /etc/exim4/passwd такого содержания:

user:passwordhash

где хешь получаем такой командой:

$ perl -MDigest::MD5=md5_hex -e 'print md5_hex($ARGV[0]),"\n"' PASSWORD

На выходе получаем хеш такого плана:

90244047e3f0178fec0d01a9373e2ea8

Соответственно в файл /etc/exim4/passwd вставляем:

user@domain.com:90244047e3f0178fec0d01a9373e2ea8

PAM/File аутентификация

А теперь попытаемся соединить эти 2 аутентификации вместе, что бы использовать одновременно либо ту, либо ту. Приведу только куски из блока begin authenticators, остальное можно взять из пунктов выше:

begin authenticators

plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_set_id = $auth2
server_condition = "\
${if exists{/etc/exim4/passwd}\
{${lookup{$auth2}lsearch{/etc/exim4/passwd}\
{${if crypteq{$auth3}{\\\{md5\\\}${extract{1}{:}{$value}{$value}fail}} {true}{false} }}\
{${if pam{$auth2:${sg{$auth3}{:}{::}} } {true}{false}} } }}\
{${if pam{$auth2:${sg{$auth3}{:}{::}} } {true}{false}} }}"

login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_set_id = $auth1
server_condition = "\
${if exists{/etc/exim4/passwd}\
{${lookup{$auth1}lsearch{/etc/exim4/passwd}\
{${if crypteq{$auth2}{\\\{md5\\\}${extract{1}{:}{$value}{$value}fail}} {true}{false} }}\
{${if pam{$auth1:${sg{$auth2}{:}{::}} } {true}{false}} } }}\
{${if pam{$auth1:${sg{$auth2}{:}{::}} } {true}{false}} }}"

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

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