Какие вещи портятся после перезагрузки в Linux? Очень странная проблема: LDAPS перестает работать только после перезагрузки

У меня есть снимок виртуальной машины Centos 6.3 с установленным LDAPS (openldap). Я настроил это несколько дней назад, следуя советам из разных источников, и потом все записал. Но когда я пытаюсь повторить установку (следуя моим собственным инструкциям), я не могу этого сделать: рукопожатие SSL сбрасывается, как если бы сервер полностью неверно настроил сертификаты SSL. Похоже, я указал конфигурацию сервера на несуществующий файл сертификата. Я запускаю все проверки локально (используя ldapsearch и "openssl s_client"). Что еще хуже, LDAPS на моем снимке перестает работать с той же проблемой после перезагрузки. Перезапуск сервисов slapd/nslcd/nscd без перезагрузки не нарушает его. 0_o Копирование точных настроек и сертификатов для очистки (без настройки LDAPS) снимка той же виртуальной машины и правильной конфигурации не работает. Вот почему проблема, кажется, не связана с конфигурацией и сертификатами. Я потратил более 10 часов на копание, но все еще очень хочу понять причину.

Для меня принципиально (познавательно) понять, почему эта проблема возникает только после перезагрузки, а не после перезапуска службы. Пожалуйста, не стесняйтесь публиковать любые идеи о том, что сбрасывается по умолчанию / разбито / испорчено при перезагрузке хоста Linux Другими словами, чем перезагрузка системы может отличаться от перезапуска службы в рамках отдельной службы, захваченной в снимке виртуальной машины?

Я уже проверил:

  • Конечно, логи / netstat / ps
  • каталог tmp (он очищается при каждой перезагрузке, но не содержит связанных файлов)
  • переменные среды
  • дата (на моментальном снимке дата неверна. Фиксирование даты и перезапуск служб не нарушают LDAPS)
  • hostname / ip (я использую назначенный вручную IP для этого экземпляра. После перезагрузки и восстановления настроек сети я попытался перезапустить службы безуспешно)
  • служебные аргументы и файл slapd.args в каталоге /var/run
  • запись мусора в конфигурационные файлы службы и перезапуск его, чтобы увидеть, если именно этот файл используется.
  • Файлы /etc/env / .bashrc / .bash_aliases НЕ были изменены и не должны мешать работе.

Может быть, причина в SELinux (может быть, он был отключен на снимке, проверим его завтра на работе)

Любые другие предложения? Слишком устал, чтобы бороться дальше сегодня...

2 ответа

Решение

Проблема действительно была вызвана SELinux сложным образом.

Для будущих людей, которые найдут этот ответ через Google, вот точный текст ошибки:

[root@va21 ~]# ldapsearch -d 1 -v -x -H ldaps://localhost:636
ldap_url_parse_ext(ldaps://localhost:636)
ldap_initialize( ldaps://localhost:636/??base )
ldap_create
ldap_url_parse_ext(ldaps://localhost:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP localhost:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 127.0.0.1:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap/certs' tokenDescription='ldap(0)'                 certPrefix='' keyPrefix='' flags=readOnly
TLS: using moznss security dir /etc/openldap/certs prefix .
TLS: error: tlsm_PR_Recv returned 0 - error 21:Is a directory
TLS: error: connect - force handshake failure: errno 21 - moznss error -5938
TLS: can't connect: TLS error -5938:Encountered end of file.
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

и вывод openssl s_client:

[root@va21 ~]# openssl s_client -connect localhost:636 -showcerts
CONNECTED(00000003)
140066435413832:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake     failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 113 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

Это означает (это должно означать!), Что ssl-сертификаты недоступны / не читаемы / доступны / действительны при запуске сервера slapd.

Я готовил образ виртуальной машины для тестирования некоторых приложений. Это приложение отключает SELinux во время установки. Поэтому я отключил SELinux во время настройки openldap, и у меня не было проблем при размещении сертификатов в папке / certs.

Мои проблемы начались, когда мне пришлось развернуть openldap с той же конфигурацией на чистой виртуальной машине или перезагрузить существующую. Здесь был включен SELinux, и он не позволял slapd читать сертификаты из недопустимого места. Журналы обслуживания или выходные данные не содержали явных жалоб на отказ в разрешении. Я должен поместить сертификаты где-нибудь в / etc / ssl / certs / и / etc / openldap / certs, чтобы он работал.

Сбой соединения SSL часто вызван несинхронизацией. Виртуальные машины, как правило, делают это, поэтому убедитесь, что вы запускаете ntpd на всех своих виртуальных машинах и что ntpdate запускается при загрузке до запуска ntpd.

Другие вопросы по тегам