В чем ошибка смены пароля в roundcube?

Добрый день! Имеется связка Openldap + dovecot + postfix + roundcube на Centos7. Авторизацию dovecot + postfix + roundcube я все настроил через Openldap. Я без проблем логинюсь в roundcube, аутлук, почта отправляется и приходит. Но вот встала задача сделать так чтобы производилась смена пароля в roundcube. Попробовал сменить пароль в текущей конфигурации получил ошибку "Не могу сохранить новый пароль. Ошибка соединения."
И дальше начались пляски с бубном.
Первое что пришло в голову это отсутствие прав записи у учетных записей служб в опенлдап, добавил возможность записывать и видеть пароли - резутат тот же(
Менял тип шифрования пароля через "phpldapadmin",
менял значения в файле (/usr/share/roundcubemail/plugins/password/config.inc.php ) "$config['password_ldap_encodage'] = 'ssha';" (было и clear и md5 и crypt),
пробовал добавлять "default_pass_scheme = CRYPT" в файл "/etc/dovecot/dovecot-ldap.conf.ext"
пробовал добавлять "cram-md5" в файле "/etc/dovecot/conf.d/10-auth.conf" в строке "auth_mechanisms = plain login", но тогда авторизация ломается, тк пытается авторизовываться через cram-md5.
В логах тоже ничего полезного не пишут (смотрел /var/log/maillog)
Помогите разобраться в чем проблема?!
немного конфигов
подключение довкот /etc/dovecot/dovecot-ldap.conf.ext
hosts = server.com:389
auth_bind = yes
dn = uid=dovecot,ou=services,dc=server,dc=com
dnpass = pass
ldap_version = 3
base = dc=server,dc=com
deref = never
scope = subtree
user_attrs = mailHomeDirectory=home,uidNumber=uid,gidNumber=gid
user_filter = (&(objectClass=PostfixBookMailAccount)(mail=%u))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=PostfixBookMailAccount)(mail=%u))

/usr/share/roundcubemail/plugins/password/config.inc.php
$config['password_driver'] = 'ldap';
$config['password_confirm_current'] = true;
$config['password_minimum_length'] = 6;
$config['password_require_nonalpha'] = false;
$config['password_log'] = false;
$config['password_login_exceptions'] = null;
$config['password_hosts'] = null;
$config['password_force_save'] = false;
$config['password_force_new_user'] = false;
$config['password_db_dsn'] = '';
$config['password_query'] = 'SELECT update_passwd(%c, %u)';
$config['password_crypt_hash'] = 'md5';
$config['password_idn_ascii'] = false;
$config['password_dovecotpw_method'] = '';
$config['password_dovecotpw_with_method'] = false;
$config['password_hash_algorithm'] = 'sha1';
$config['password_hash_base64'] = false;
$config['password_blowfish_cost'] = 12;
$config['password_pop_host'] = 'localhost';
$config['password_pop_port'] = 106;
$config['password_saslpasswd_args'] = '';
$config['password_ldap_host'] = 'server.com';
$config['password_ldap_port'] = '389';
$config['password_ldap_starttls'] = false;
$config['password_ldap_version'] = '3';
$config['password_ldap_basedn'] = 'dc=server,dc=com';
$config['password_ldap_method'] = 'user';
$config['password_ldap_adminDN'] = null;
$config['password_ldap_adminPW'] = null;
$config['password_ldap_userDN_mask'] = 'mail=%login';
$config['password_ldap_searchDN'] = 'uid=roundcube,ou=services,dc=server,dc=com';
$config['password_ldap_searchPW'] = 'pass';
$config['password_ldap_search_base'] = 'dc=server,dc=com';
$config['password_ldap_search_filter'] = '(mail=%login)';
$config['password_ldap_encodage'] = 'crypt';
$config['password_ldap_pwattr'] = 'userPassword';
$config['password_ldap_force_replace'] = true;
$config['password_ldap_lchattr'] = 'shadowLastChange';

запись в лдап
Запись 1: cn=Олег Михайлов,ou=auto LLC,dc=server,dc=com
dn:: cn=Олег Михайлов,ou=auto LLC,dc=server,dc=com
cn:: Олег Михайлов
givenname:: Олег
mail: o.mihailov@server.com
objectclass: inetOrgPerson
objectclass: top
objectclass: PostfixBookMailAccount
sn:: Михайлов
userpassword: {SSHA}iLzSGGk7PALysN+Ax+fAXxN6U2agQDje
  • Вопрос задан
  • 1851 просмотр
Решения вопроса 1
Используйте "ldap_simple" driver вместо "ldap".
Обязательно заведите в LDAP отдельного пользователя, который будет менять пароли и укажите его логин-пароль в конфиге.
В password_ldap_encodage укажите то же самое шифрование паролей, что и в самом LDAP'е.
Весь трафик к LDAP-серверу заверните в TLS с нормальными стойкими современными алгоритмами шифрования и используйте протокол ldaps на 636 порту.
Забудьте про Dovecot, он не участвует в смене пароля. Его задача - только пустить пользователя в веб-почту (ну и отдать письма, разумеется).

Вот пример работающего конфига:
$config['password_driver'] = 'ldap_simple';

$config['password_confirm_current'] = true;

$config['password_minimum_length'] = 8;
$config['password_require_nonalpha'] = true;

$config['password_log'] = true;

$config['password_ldap_host'] = 'ldaps://ldap.example.com';
$config['password_ldap_port'] = '636';
$config['password_ldap_starttls'] = false;
$config['password_ldap_version'] = '3';
$config['password_ldap_basedn'] = 'dc=example,dc=com';
$config['password_ldap_method'] = 'user';
$config['password_ldap_searchDN'] = 'cn=RoundcubePasswordChanger,dc=example,dc=com';
$config['password_ldap_searchPW'] = '*****';
$config['password_ldap_search_base'] = 'dc=example,dc=com';
$config['password_ldap_search_filter'] = '(&(objectClass=top)(objectClass=organizationalPerson)(objectClass=inetOrgPerson)(objectClass=person)(accountStatus=active)(uid=%login))';
$config['password_ldap_encodage'] = 'ssha';
$config['password_ldap_pwattr'] = 'userPassword';
$config['password_ldap_force_replace'] = true;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
athacker
@athacker
А расширенное логирование в Roundcube включить и посмотреть в логах Roundcube? Ну и посмотреть в логах openldap так же лишним не будет.
Ответ написан
Комментировать
Scarfase1989
@Scarfase1989 Автор вопроса
в лдап ниче не пишет, а вот роундкуб вариант, кстати там есть функция вывода сразу в браузер, забыл про нее, спасибо!
Ответ написан
Комментировать
@radiy77
Добрый день, уважаемые!
Кто может мне настроить создание паролей и сколько будет стоить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы