URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 72886
[ Назад ]

Исходное сообщение
"EXIM + SMTP авторизация по LDAP"

Отправлено siegerstein , 15-Мрт-07 18:08 
Проблема такая:

Есть exim, ldap.
Надо чтобы пользователи отправляли почту через авторизацию:

LDAPCFG = user=cn=root,dc=firma,dc=com pass=xxx connect=5

plain:
driver = plaintext
public_name = PLAIN
server_prompts = :
server_condition = ${if ldapauth \
{user=${lookup ldapdn \
{LDAPCFG ldap:///ou=Mail_Users,dc=firma,dc=com?dn?sub?(uid=$2)}} \
pass=$3 connect=5 ldap:///} {true} {fail}}
server_set_id = $2

Это кусок канает, НО:

Пароли в этом случае должны храниться в LDAP в открытом виде (clear), что не хорошо.

Задача: как написать этот кусок кода, чтобы он сверял пароль в LDAP который зашифрованый к примеру по ssha хешу?

К примеру если пароль в LDAP храниться в виде 123 то все канает, если в виде хеша
{SSHA}k/sDi92JshICtX8EXhHb8f0vecEV5YQ8
то не прокатит.



Содержание

Сообщения в этом обсуждении
"EXIM + SMTP авторизация по LDAP"
Отправлено stas_v , 15-Мрт-07 19:17 
Судя по документации, да и по опыту, ldapauth просто биндится с указанным DN и указанным паролем к серверу и возвращает true или false в зависимости от результата (т.е. удалась авторизация или нет).

Если для любого из клиентских DN проходит биндинг из, скажем, командной строки (см. утилитку ldapwhoami, например), то и из exim всё должно быть отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA, MD5 и т.д.), на результат это не влияет: пароль проверяет не exim а slapd (в случае OpenLDAP).

Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но лучше всего тогда использовать SSL/TLS)


"EXIM + SMTP авторизация по LDAP"
Отправлено siegerstein , 16-Мрт-07 19:02 
>Судя по документации, да и по опыту, ldapauth просто биндится с указанным
>DN и указанным паролем к серверу и возвращает true или false
>в зависимости от результата (т.е. удалась авторизация или нет).
>
>Если для любого из клиентских DN проходит биндинг из, скажем, командной строки
>(см. утилитку ldapwhoami, например), то и из exim всё должно быть
>отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA,
>MD5 и т.д.), на результат это не влияет: пароль проверяет не
>exim а slapd (в случае OpenLDAP).
>
>Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с
>NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но
>лучше всего тогда использовать SSL/TLS)

Чорт! Действительно выходит с SSHA. Куда я смотрел?

Спасибо друг!



"EXIM + SMTP авторизация по LDAP"
Отправлено Nikolay , 05-Апр-07 15:24 
>Судя по документации, да и по опыту, ldapauth просто биндится с указанным
>DN и указанным паролем к серверу и возвращает true или false
>в зависимости от результата (т.е. удалась авторизация или нет).
>
>Если для любого из клиентских DN проходит биндинг из, скажем, командной строки
>(см. утилитку ldapwhoami, например), то и из exim всё должно быть
>отлично. Пароль может храниться в любой поддерживаемой ldap сервером схеме (SSHA,
>MD5 и т.д.), на результат это не влияет: пароль проверяет не
>exim а slapd (в случае OpenLDAP).
>
>Вот другое дело, если вы захотите использовать всякие CRAM да DIGEST с
>NTLM'ом - тогда вам действительно придётся хранить пароли открытым текстом. (Но
>лучше всего тогда использовать SSL/TLS)

А если неизвестен dn пользователя, а известен только uid? Т.е. dn = cn=Дядя Вася, ou=Администрация, ou=Организация, ou=ru



"EXIM + SMTP авторизация по LDAP"
Отправлено stas_v , 06-Апр-07 11:00 

>А если неизвестен dn пользователя, а известен только uid? Т.е. dn =
>cn=Дядя Вася, ou=Администрация, ou=Организация, ou=ru

А в этом примере так и есть:

server_condition = ${if ldapauth \
{user=${lookup ldapdn {LDAPCFG ldap:///ou=Mail_Users,dc=firma,dc=com?dn?sub?(uid=$2)}} \
pass=$3 connect=5 ldap:///} \
{true} {fail}}

Мы вначале ищем DN пользователя ниже базового, а потом этим найденным DN'ом биндимся.

А можно попробовать SASL. Там пользователь указывается только именем.