Проблема с LDAP или Попытка перенести базы из сломанной зимбры в старую, но рабочую версию

Post Reply
Zimbra_BIGGEST_Fan
Posts: 2
Joined: Tue Feb 11, 2025 10:43 am

Проблема с LDAP или Попытка перенести базы из сломанной зимбры в старую, но рабочую версию

Post by Zimbra_BIGGEST_Fan »

Добрый день, уважаемые форумчане! Пожалуйста, помогите решить проблему с Zimbra. Вы моя последняя надежда после более чем двух недель тщетных попыток восстановить работу сервиса. Я был бы очень признателен за любую помощь! Спасибо.
Имеем:
  • Сервер Ubuntu 16.04.3LTS
    ZCS 8.7.11.GA.1854.UBUNTU16.64 UBUNTU16_64 FOSS edition
    Старый (2020 года) снапшот с рабочей версией Zimbra
    Новый (2025 года) снапшот со сломанной версией Zimbra
Проблема
К сожалению, в начале года с Zimbra случилось нечто ужасное, и я не смогу объяснить точно, что конкретно произошло. В нашей серверной были неполадки с электропитанием. Кроме того, закончился срок действия TLS-сертификата Zimbra и были предприняты попытки пересоздать его при помощи certbot и acme.sh. Также закончился срок действия Zimbra Collaboration Suite, и все это произошло в один момент. Возможно, какая-то из этих причин стала фатальной для Zimbra, а возможно и их комбинация.
Все началось с того, что письма перестали ходить наружу (только в локальной сети). После этого я обнаружил, что закончился срок действия сертификата, после чего я предпринял несколько неудачных попыток пересоздать его с помощью перечисленных выше сервисов. В этот момент я обнаружил также, что пропало все содержимое каталога /opt/zimbra/bin. Я запустил ./install.sh для регенерации системы, но, к сожалению, стало только хуже. Теперь система больше не запускается, а я получаю ошибку:

Code: Select all

zimbra@zimbra:~$ zmcontrol status
Connect: Unable to determine enabled services from ldap.
Unable to determine enabled services. Cache is out of date or doesn't exist.
И еще характерная ошибка:

Code: Select all

zimbra@zimbra:~$ zmprov -l gaa | xargs -I {} zmprov ga {}
[] INFO: master is down, falling back to replica...
[] FATAL: failed to initialize LDAP client
com.zimbra.cs.ldap.LdapException: LDAP error: : An error occurred while attempting to connect to server localhost:389:  java.io.IOException: An error occurred while attempting to establish a connection to server localhost:389:  java.net.ConnectException: Connection refused (Connection refused)
ExceptionId:main:1738261831655:71b2b3932a3c9b02
Code:ldap.LDAP_ERROR
        at com.zimbra.cs.ldap.LdapException.LDAP_ERROR(LdapException.java:90)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapException.mapToLdapException(UBIDLdapException.java:74)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapException.mapToLdapException(UBIDLdapException.java:40)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnPool(LdapConnectionPool.java:117)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnectionPool(LdapConnectionPool.java:63)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapContext.init(UBIDLdapContext.java:111)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapClient.init(UBIDLdapClient.java:39)
        at com.zimbra.cs.ldap.LdapClient.getInstanceIfLDAPavailable(LdapClient.java:62)
        at com.zimbra.cs.ldap.LdapClient.getInstance(LdapClient.java:69)
        at com.zimbra.cs.ldap.LdapClient.initialize(LdapClient.java:94)
        at com.zimbra.cs.account.ldap.LdapProv.<init>(LdapProv.java:47)
        at com.zimbra.cs.account.ldap.LdapProvisioning.<init>(LdapProvisioning.java:279)
        at com.zimbra.cs.account.ldap.LdapProvisioning.<init>(LdapProvisioning.java:276)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at com.zimbra.cs.account.Provisioning.getInstance(Provisioning.java:287)
        at com.zimbra.cs.account.Provisioning.getInstance(Provisioning.java:244)
        at com.zimbra.cs.account.ProvUtil.initProvisioning(ProvUtil.java:1004)
        at com.zimbra.cs.account.ProvUtil.main(ProvUtil.java:3955)
Caused by: LDAPException(resultCode=91 (connect error), errorMessage='An error occurred while attempting to connect to server localhost:389:  java.io.IOException: An error occurred while attempting to establish a connection to server localhost:389:  java.net.ConnectException: Connection refused (Connection refused)')
        at com.unboundid.ldap.sdk.LDAPConnection.connect(LDAPConnection.java:754)
        at com.unboundid.ldap.sdk.LDAPConnection.connect(LDAPConnection.java:686)
        at com.unboundid.ldap.sdk.LDAPConnection.<init>(LDAPConnection.java:518)
        at com.unboundid.ldap.sdk.SingleServerSet.getConnection(SingleServerSet.java:229)
        at com.unboundid.ldap.sdk.ServerSet.getConnection(ServerSet.java:98)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.createConnection(LDAPConnectionPool.java:938)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.<init>(LDAPConnectionPool.java:876)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.<init>(LDAPConnectionPool.java:779)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.<init>(LDAPConnectionPool.java:726)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnPool(LdapConnectionPool.java:114)
        ... 18 more
Caused by: java.io.IOException: An error occurred while attempting to establish a connection to server localhost:389:  java.net.ConnectException: Connection refused (Connection refused)
        at com.unboundid.ldap.sdk.LDAPConnectionInternals.<init>(LDAPConnectionInternals.java:137)
        at com.unboundid.ldap.sdk.LDAPConnection.connect(LDAPConnection.java:744)
        ... 27 more
При этом отдельно (через команду ldap start) сервис запускается.
На этом этапе я сравнил конфигурацию старой рабочей Zimbra 2020 года [вложение 2020-old-n-working-conf.txt] со свежей поломанной Zimbra [вложение 2025-new-n-broken-conf.txt] и выяснил, что большинство переменных, в том числе связанных с ldap и mysql (а большинство ошибок связано как раз с этими сервисами) отличаются, в том числе пароли. Я думаю, что проблема связана в том числе и с этим фактом, однако не знаю, как это чинить. Я обновил сертификаты, починил права доступа с помощью zmfixperms, и даже попытался импортировать весь вывод zmlocalconfig -s из старой версии Zimbra в новую, но все равно продолжил сталкиваться с ошибкой запуска программы (возможно, нужно было сделать что-то еще).
Сломанная Zimbra не дает мне поменять пароль от ldap_root_password через команду (хотя, вроде бы, этот пароль хранится в открытом виде):

Code: Select all

zimbra@zimbra:~$ zmldappasswd -r new_root_pass
Updating local config and LDAP
connect: Connection refused at /opt/zimbra/bin/zmldappasswd line 101, <DATA> line 755.
Попытка импортировать базы
В какой-то момент я оставил попытки починить того монстра, которого отчасти создал сам, и решил попробовать перенести базы mysql и ldap из сломанной Zimbra в старую и рабочую ее версию.
Интересно, что в дампы mysql-базы были получены успешно. Я перенес их и развернул на старой Zimbra и, к моему удивлению, система запустилась. Однако пользователи в панели администратора остались старые. Вероятно, это связано с тем, что я не перенес ldap. Тогда я предпринял попытку перенести /opt/zimbra/data/ldap из новой системы в старую с помощью rsync, и на этот раз все закончилось неудачей:

Code: Select all

zimbra@zimbra:~$ zmcontrol start
Host zimbra.newinfosec.ru
        Starting ldap...Done.
Search error: Unable to determine enabled services from ldap.
Enabled services read from cache. Service list may be inaccurate.
        Starting zmconfigd...
Failed.
Starting zmconfigd...failed.
        Starting logger...Failed.
Starting logswatch...[] INFO: master is down, falling back to replica...
[] FATAL: failed to initialize LDAP client
com.zimbra.cs.ldap.LdapException: LDAP error: : invalid credentials
ExceptionId:main:1739209164041:22eb43355ffc9535
Code:ldap.LDAP_ERROR
        at com.zimbra.cs.ldap.LdapException.LDAP_ERROR(LdapException.java:90)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapException.mapToLdapException(UBI                                                                                        DLdapException.java:74)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapException.mapToLdapException(UBI                                                                                        DLdapException.java:40)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnPool(LdapCo                                                                                        nnectionPool.java:117)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnectionPool(                                                                                        LdapConnectionPool.java:63)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapContext.init(UBIDLdapContext.jav                                                                                        a:111)
        at com.zimbra.cs.ldap.unboundid.UBIDLdapClient.init(UBIDLdapClient.java:                                                                                        39)
        at com.zimbra.cs.ldap.LdapClient.getInstanceIfLDAPavailable(LdapClient.j                                                                                        ava:62)
        at com.zimbra.cs.ldap.LdapClient.getInstance(LdapClient.java:69)
        at com.zimbra.cs.ldap.LdapClient.initialize(LdapClient.java:94)
        at com.zimbra.cs.account.ldap.LdapProv.<init>(LdapProv.java:47)
        at com.zimbra.cs.account.ldap.LdapProvisioning.<init>(LdapProvisioning.j                                                                                        ava:279)
        at com.zimbra.cs.account.ldap.LdapProvisioning.<init>(LdapProvisioning.j                                                                                        ava:276)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct                                                                                        orAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC                                                                                        onstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at com.zimbra.cs.account.Provisioning.getInstance(Provisioning.java:287)
        at com.zimbra.cs.account.Provisioning.getInstance(Provisioning.java:244)
        at com.zimbra.cs.account.ProvUtil.initProvisioning(ProvUtil.java:1004)
        at com.zimbra.cs.account.ProvUtil.main(ProvUtil.java:3955)
Caused by: LDAPException(resultCode=49 (invalid credentials), errorMessage='inva                                                                                        lid credentials')
        at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:1894)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.createConnection(LDAPConnec                                                                                        tionPool.java:988)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.<init>(LDAPConnectionPool.j                                                                                        ava:876)
        at com.unboundid.ldap.sdk.LD
18:58

APConnectionPool.<init>(LDAPConnectionPool.j                                                                                        ava:779)
        at com.unboundid.ldap.sdk.LDAPConnectionPool.<init>(LDAPConnectionPool.j                                                                                        ava:726)
        at com.zimbra.cs.ldap.unboundid.LdapConnectionPool.createConnPool(LdapCo                                                                                        nnectionPool.java:114)
        ... 18 more
zimbra logger service is not enabled!  failed.
        Starting mailbox...Failed.
        Starting memcached...Done.
        Starting proxy...Done.
        Starting amavis...Done.
        Starting antispam...Done.
        Starting antivirus...Done.
        Starting opendkim...Failed.
opendkim: /opt/zimbra/conf/opendkim.conf: ldap://zimbra.newinfosec.ru:389/?DKIMS                                                                                        elector?sub?(DKIMIdentity=$d): dkimf_db_open(): Invalid credentials
Failed to start opendkim: 0
        Starting snmp...Done.
        Starting spell...Done.
        Starting mta...Done.
        Starting stats...Done.
        Starting service webapp...
Failed.
        Starting zimbra webapp...
Failed.
Попытки экспортировать базу ldap из свежей сломанной Zimbra с помощью zmslapcat также закончились провалом:

Code: Select all

root@zimbra:/home/post# su - zimbra
zimbra@zimbra:~$ /opt/zimbra/libexec/zmslapcat /opt/zimbra/backup
67aafe65 mdb_db_open: database "": mdb_dbi_open(/opt/zimbra/data/ldap/mdb/db/id2v) failed: MDB_NOTFOUND: No matching key/data pair found (-30798).
67aafe65 backend_startup_one (type=mdb, suffix=""): bi_db_open failed! (-30798)
slap_startup failed
Различные логи во вложении.

Пожалуйста, помогите вернуть Zimbra к жизни! Либо заставить старую Zimbra принять новые данные LDAP. Я буду благодарен за любую вашу поддержку.
Большое спасибо за все!
Attachments
logs-and-conf.7z
Здесь логи и вывод zmlocalconfig -s
(249.92 KiB) Downloaded 593 times
Post Reply