- Глава 4.1.3 Установка OpenLDAP в Windows
- 4.1.3 Установка в Windows
- Установка OpenLDAP для Windows
- Исторические заметки по установке OpenLDAP 2.4.35 для Windows
- ldap_connect function (winldap.h)
- Syntax
- Parameters
- Return value
- Remarks
- How to enable LDAP signing in Windows Server
- Summary
- How to discover clients that do not use the Require signing option
- How to configure the directory to require LDAP server signing for AD DS
- Using Group Policy
- How to set the server LDAP signing requirement
- How to set the client LDAP signing requirement by using local computer policy
- How to set the client LDAP signing requirement by using a domain Group Policy Object
- How to set the client LDAP signing requirement by using registry keys
- How to verify configuration changes
Глава 4.1.3 Установка OpenLDAP в Windows
4.1.3 Установка в Windows
Если Вы хотите развернуть LDAPv3-совместимый Open Source сервер в Windows (XP, Windows 7, 10 или даже, по недоразумению, в Windows Vista), у Вас есть три варианта:
Разработчики установщика cygwin проделали большую работу, чтобы установка была хоть и многословным, но очень простым процессом (полная установка может занять более 30 минут). И спрятали они OpenLDAP так, чтобы никто не догадался (он в категории Libs установщика, но мы Вам этого не говорили). Главный недостаток — то, что версия OpenLDAP обновляется нерегулярно (хотя, по совести говоря, пакеты обновляются довольно регулярно). Если Вы собираетесь заниматься разработкой, либо запускать другие *nix-пакеты под Windows — выбор очевиден.
ApacheDS. Работает под Java и включает прекрасный LDAP-клиент/систему разработки, называемую Apache Directory Studio. Этот превосходный инструмент можно использовать в качестве клиента к любой системе, в том числе OpenLDAP. Возможно, процесс установки покажется Вам немного сложным, поскольку система встроена в среду разработки Eclipse (которая любит всё всегда усложнять), но усилия стоят того.
Если же Вы хотите простую инсталляцию текущей версии OpenLDAP на Windows в пару кликов, то нет ничего лучше сборки OpenLDAP для Windows. Она периодически обновляется (по состоянию на ноябрь 2016 года версия OpenLDAP 2.4.44). Она опционально устанавливает различные механизмы манипуляции данными, в том числе базы данных (bdb и hdb OpenLDAP), OpenSSL (обеспечивает поддержку TLS в OpenLDAP) и даже Cyrus SASL (обеспечивает поддержку Kerberos). OpenLDAP выполняется не как задача Windows, а как dos-приложение.
Установка OpenLDAP для Windows
При последней установке данного программного обеспечения (ноябрь 2016 года) стало ясно, что процесс инсталляции с момента нашей предыдущей установки (OpenLDAP 2.4.35) поменялся радикально. Теперь доступны 32-х и 64-битные версии, а процесс инсталляции предоставляет много (слишком много?) опций. Получить программное обеспечение можно здесь, а инструкции по установке находятся здесь. Мы установили 64-битную версию на Windows 10 Home Edition. В нашем случае процесс инсталляции не прошёл гладко (64-битная версия, Home Edition, сами понимаете), но после небольшой доработки напильником за 20 минут мы получили вполне работоспособный OpenLDAP. Не так уж и плохо. Немного сбивало с толку то, что имена директорий/папок сильно отличаются от тех, которые мы привыкли видеть при инсталляции в Lunux/BSD.
Мы оставили наши записи об установке OpenLDAP 2.4.35 в назидание потомкам (не поддавайтесь искушению использовать их для чего-либо, кроме версии 2.4.35). Мы добавили записи о текущей инсталляции (ноябрь 2016 года, OpenLDAP 2.4.44), которые могут оказаться для Вас полезными (или бесполезными).
Возможно, вследствие ошибок при инсталляции, мы получили полностью установленный, но не запущенный OpenLDAP. В разных местах мы встречали намёки на то, что OpenLDAP может выполняться как служба Windows, но, как всегда, мы не стали читать документацию целиком. Скрипт запуска: C:\OpenLDAP\run\run.cmd (C:\OpenLDAP — корневая директория при инсталляции по умолчанию). Для удобства использования мы сделали себе ярлык на него на рабочем столе.
При инсталляции по умолчанию slapd при запуске использует slapd.conf (расположен в корневой директории (по умолчанию это C:\OpenLDAP), а не в привычной /etc/openldap как в Linux/BSD).
Конвертация в slapd.d тривиальна. После внесения необходимых изменений в файл slapd.conf, просто создайте новую директорию/папку с названием slapd.d. Откройте командную строку, перейдите в C:\OpenLDAP (или туда, куда Вы произвели установку) и выполните:
Откройте C:\OpenLDAP\run\run.cmd в любимом редакторе:
Запустите сервер, выполнив C:\OpenLDAP\run\run.cmd.
По умолчанию в скрипте запуска (смотрите предыдущее примечание) используется аргумент -d -1, генерирующий огромное количество отладочной информации и серьёзно снижающий производительность сервера. На первоначальном этапе это полезно, так как Вы получаете максимум диагностической информации. После того, как Вам удастся добиться от сервера стабильной работы, можно либо совсем удалить -d -1 в файле run.cmd, либо задать значение поменьше.
Примечание: Значение аргумента -d, используемое при старте OpenLDAP (slapd), благоразумно отменяет любые попытки динамически изменять значение атрибута oldLogLevel (при использовании OLC, cn=config), либо значения директивы loglevel в slapd.conf. Чтобы эти настройки имели эффект, удалите аргумент -d из строки запуска slapd.
Исторические заметки по установке OpenLDAP 2.4.35 для Windows
Далее следуют некоторые заметки об установке и использовании OpenLDAP (2.4.35) для Windows. При прочтении документации к пакету складывается впечатление, что его возможности значительно больше, чем предоставление основных сервисов OpenLDAP, в частности, там обсуждается использование Microsoft-SQL. Мы проигнорировали все эти новомодные штучки (поскольку не являемся пользователями MS-SQL) и всё равно получили отличную, высоко функциональную инсталляцию OpenLDAP. Порядок действий:
Скачайте программное обеспечение отсюда в подходящую директорию файловой системы.
Распакуйте архив и дважды щёлкните для запуска OpenLDAP-2.y.xx-x86.exe (y — старший номер версии, а xx — младший номер версии). Следуйте запросам мастера установки. Установка может быть запущена с правами обычного пользователя (административных привилегий не требуется). Далее показаны экраны с немного путанным содержимым, для которых приводятся дополнительные разъяснения.
На этом экране Вас просят ввести Ваши данные, но ввод данных не позволяется. Попробуй разберись! Проигнорируйте его и нажмите «Next». Ничего страшного не случится.
На этом экране показана директория по умолчанию, куда будет произведена установка. Измените её в соответствии с Вашими потребностями или просто нажмите «Next».
После установки файлов этот экран показывает некоторую общую информацию о конфигурации сервера. Большая часть её пригодна лишь в том случае, если Вы собираетесь использовать конфигурацию по умолчанию.
На следующем за этим экране запрашивается, хотите ли Вы прочитать документ readme.pdf. Наш совет — не стоит. Снимите галочку и читайте дальше эту инструкцию.
Когда последний экран мастера установки закроется и станет историей, у Вас будет следующая конфигурация (подразумевается, что Вы произвели инсталляцию в директорию по умолчанию C:\OpenLDAP, либо, если Вы один из тех, кого раздражает всё, что по умолчанию, скорректируйте значения на свои):
Система настроена на использование файла slapd.conf в директории \etc\openldap (директория slapd.d отсутствует — смотрите заметки по olc/cn=config здесь). Этот slapd.conf полностью работоспособен, в него стоит заглянуть хотя бы потому, что в нём содержатся относительные пути, указывающие на поддиректории и файлы внутри установочной директории. Обслуживание осуществляется на стандартных номерах портов LDAP (389 и 636 для ldaps). Если Вы собираетесь использовать свой собственный файл slapd.conf, обратите внимание на стандартные расположения, на которые указывают директивы pidfile, argsfile (по умолчанию \var\run) и logfile (по умолчанию \var\log) стандартного файла и для упрощения процесса подкорректируйте свои значения, аналогично проверьте расположение файлов наборов схемы данных (\etc\openldap\schema) и директивы directory (\var\db\openldap-data) в Вашем разделе (разделах) database (используйте указанную и при необходимости создайте новые директории).
Один из самых запутанных аспектов этой инсталляции OpenLDAP — собраны ли модули статически или динамически. В OpenLDAP для Windows они собраны статически (правильный выбор), это означает, что в директивах loadmodule или loadpath нет необходимости.
В назидание потомкам мы приводим файл slapd.conf по умолчанию пакета OpenLDAP для Windows:
Для запуска сервера выполните «Пуск» (Start) -> «Все программы» (All Programs) -> OpenLDAP -> Start LDAP Server:
Примечание: OpenLDAP для Windows использует инсталляционный файл типа .exe, а не .msi, и потому до появления значков в меню «Все программы» (All Programs) может пройти довольно много времени (до 30 минут).
Если Вы нетерпеливы, перейдите в директорию libexec и дважды щёлкните на StartLDAP.cmd. Это приведёт к немедленному запуску LDAP-сервера.
При старте сервера откроется окно сессии dos, куда будет выведена тонна информации, после чего окно останется открытым (Вы должны явно завершить OpenLDAP, нажав CTL-C в этом окне dos). Если что-то пошло не так, окно немедленно закроется. Если Вы используете директиву logfile (поставляемый по умолчанию файл slapd.conf использует \var\log\openldap.log), то ищите ошибки в файле журнала. Если Вы не используете директиву logfile, значит Вам не повезло.
Большой объём информации, выводимой в окне dos, может серьёзно замедлить работу сервера. Чтобы его уменьшить или ликвидировать, просто откройте (с помощью notepad) файл \libexec\StartLDAP.cmd и из последней строки этого файла либо вообще удалите аргумент -d -1 (для отмены вывода, за исключением катастрофических ошибок), либо измените -1 на какое-либо другое значение (подробнее здесь). Например, если значение равно 8, будет выводиться только информация о соединениях. Вот этот файл во всей красе, чтобы Вы могли увидеть, что представляет из себя последняя строка:
Стандартные ldap-утилиты OpenLDAP (ldapsearch и другие) располагаются в директории bin. В OpenLDAP для Windows есть удобное окно командной строки, предварительно сконфигурированное на эту директорию:
Вы также можете открыть любое окно с сессей dos и перейти в c:\openldap\bin, либо поместите этот путь в свою переменную path («Пуск» (Start) -> «Панель управления» (Control panel) -> «Система» (System) -> в открывшемся окне «Свойства системы» (Advanced system settings) выберите вкладку «Дополнительно» (Advanced) -> нажмите кнопку «Переменные среды» (Environmental settings) -> в открывшемся окне «Переменные среды» в нижней части найдите переменную path и добавьте ;c:\openldap\bin). Откройте любое окно с сессией dos («Пуск» (Start)->»Выполнить» (Run)->cmd) и можете запускать утилиты ldap. Примечание: slap-утилиты (slapadd и другие) находятся в директории sbin, возможно, Вы захотите добавить в переменную path также и путь ;c\openldap\sbin.
Как мы уже говорили, для остановки сервера OpenLDAP перейти в окно с сессией dos, в котором он выполняется, и нажать CTRL-C. Сервер остановится, и Вам будет выведен запрос «Terminate Batch Job?«; если в ответ на него вы нажмёте «y», окно закроется.
Если эта процедура не была соблюдена (например, Вы завершили работу компьютера, не остановив LDAP-сервер), сервер, вероятнее всего, откажется стартовать при следующем запуске. В этом случае перейдите в директорию c:\openldap\var\run и удалите все файлы в этой директории (slapd.args и slapd.pid). Теперь сервер должен запуститься. Если нет — обратитесь к файлу журнала (по умолчанию в \var\log). Ведь Вы же установили директиву logfile, правда?
Проблемы, комментарии, предположения, исправления (включая битые ссылки) или есть что добавить? Пожалуйста, выкроите время в потоке занятой жизни, чтобы написать нам, вебмастеру или в службу поддержки. Оставшийся день Вы проведёте с чувством удовлетворения.
ldap_connect function (winldap.h)
The ldap_connect function establishes a connection with the server.
Syntax
Parameters
The session handle obtained from ldap_init.
A pointer to an LDAP_TIMEVAL structure that specifies the number of seconds to spend in an attempt to establish a connection before a timeout. If NULL, the function uses a default timeout value.
Return value
If the function succeeds, LDAP_SUCCESS is returned.
If the function fails, an error code is returned. For more information, see Return Values.
Remarks
Although it is not required that a client call ldap_connect to establish a connection to the server, it is good programming practice to do so. If the connection does not exist, other functions, for example, ldap_bind_s, perform the call internally. However, if you have to troubleshoot this part of your application, establishing the connection prior to making the call to some other function, for example ldap_bind_s, will also separate the possible problems if the connection fails. Alternately, you can specify additional options on the connection block. For example, a client can call ldap_init to initialize a session, then call ldap_connect, with a non-NULL timeout parameter value, to connect to the server with a specified time-out.
If the call to ldap_connect succeeds, the client is connected to the LDAP server as an anonymous user. The session handle should be freed with a call to ldap_unbind when it is no longer required.
If the ldap_connect call fails, the session handle should be freed with a call to ldap_unbind when no longer required for error recovery.
How to enable LDAP signing in Windows Server
This article describes how to enable LDAP signing in Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, and Windows 10.
Original product version: В Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10 — all editions
Original KB number: В 935834
Summary
You can significantly improve the security of a directory server by configuring the server to reject Simple Authentication and Security Layer (SASL) LDAP binds that do not request signing (integrity verification), or to reject LDAP simple binds that are performed on a clear text (non-SSL/TLS-encrypted) connection. SASL binds may include protocols such as Negotiate, Kerberos, NTLM, and Digest.
Unsigned network traffic is susceptible to replay attacks. In such attacks, an intruder intercepts the authentication attempt and the issuance of a ticket. The intruder can reuse the ticket to impersonate the legitimate user. Additionally, unsigned network traffic is susceptible to man-in-the-middle (MIM) attacks in which an intruder captures packets between the client and the server, changes the packets, and then forwards them to the server. If this occurs on an LDAP server, an attacker can cause a server to make decisions that are based on forged requests from the LDAP client.
How to discover clients that do not use the Require signing option
After you make this configuration change, clients that rely on unsigned SASL (Negotiate, Kerberos, NTLM, or Digest) LDAP binds or on LDAP simple binds over a non-SSL/TLS connection stop working. To help identify these clients, the directory server of Active Directory Domain Services (AD DS) or Lightweight Directory Server (LDS) logs a summary Event ID 2887 one time every 24 hours to indicate how many such binds occurred. We recommend that you configure these clients not to use such binds. After no such events are observed for an extended period, we recommend that you configure the server to reject such binds.
If you must have more information to identify such clients, you can configure the directory server to provide more detailed logs. This additional logging will log an Event ID 2889 when a client tries to make an unsigned LDAP bind. The log entry displays the IP address of the client and the identity that the client tried to use to authenticate. You can enable this additional logging by setting the 16 LDAP Interface Events diagnostic setting to 2 (Basic). For more information about how to change the diagnostic settings, see How to configure Active Directory and LDS diagnostic event logging.
If the directory server is configured to reject unsigned SASL LDAP binds or LDAP simple binds over a non-SSL/TLS connection, the directory server logs a summary Event ID 2888 one time every 24 hours when such bind attempts occur.
How to configure the directory to require LDAP server signing for AD DS
Logging anomaly of Event ID 2889
Applications that use third-party LDAP clients may cause Windows to generate incorrect Event ID 2889 entries. This occurs when you log of LDAP interface events and if LDAPServerIntegrity is equal to 2. The use of sealing (encryption) satisfies the protection against the MIM attack, but Windows logs Event ID 2889 anyway.
This happens when LDAP clients use only sealing together with SASL. We have seen this in the field in association with third-party LDAP clients.
When a connection does not use both signing and sealing, the connection security requirements check uses the flags correctly and disconnect. The check generates Error 8232 (ERROR_DS_STRONG_AUTH_REQUIRED).
Using Group Policy
How to set the server LDAP signing requirement
- Select Start >Run, type mmc.exe, and then select OK.
- Select File >Add/Remove Snap-in, select Group Policy Management Editor, and then select Add.
- Select Group Policy Object >Browse.
- In the Browse for a Group Policy Object dialog box, select Default Domain Controller Policy under the Domains, OUs, and linked Group Policy Objects area, and then select OK.
- Select Finish.
- Select OK.
- Select Default Domain Controller Policy >Computer Configuration >Policies >Windows Settings >Security Settings >Local Policies, and then select Security Options.
- Right-click Domain controller: LDAP server signing requirements, and then select Properties.
- In the Domain controller: LDAP server signing requirements Properties dialog box, enable Define this policy setting, select Require signing in the Define this policy setting list, and then select OK.
- In the Confirm Setting Change dialog box, select Yes.
How to set the client LDAP signing requirement by using local computer policy
- Select Start >Run, type mmc.exe, and then select OK.
- Select File >Add/Remove Snap-in.
- In the Add or Remove Snap-ins dialog box, select Group Policy Object Editor, and then select Add.
- Select Finish.
- Select OK.
- Select Local Computer Policy >Computer Configuration >Policies >Windows Settings >Security Settings >Local Policies, and then select Security Options.
- Right-click Network security: LDAP client signing requirements, and then select Properties.
- In the Network security: LDAP client signing requirements Properties dialog box, select Require signing in the list, and then select OK.
- In the Confirm Setting Change dialog box, select Yes.
How to set the client LDAP signing requirement by using a domain Group Policy Object
- Select Start >Run, type mmc.exe, and then select OK.
- Select File >Add/Remove Snap-in.
- In the Add or Remove Snap-ins dialog box, select Group Policy Object Editor, and then select Add.
- Select Browse, and then select Default Domain Policy (or the Group Policy Object for which you want to enable client LDAP signing).
- Select OK.
- Select Finish.
- Select Close.
- Select OK.
- Select Default Domain Policy >Computer Configuration >Windows Settings >Security Settings >Local Policies, and then select Security Options.
- In the Network security: LDAP client signing requirements Properties dialog box, select Require signing in the list, and then select OK.
- In the Confirm Setting Change dialog box, select Yes.
How to set the client LDAP signing requirement by using registry keys
Follow the steps in this section carefully. Serious problems might occur if you modify the registry incorrectly. Before you modify it, back up the registry for restoration in case problems occur.
By default, for Active Directory Lightweight Directory Services (AD LDS), the registry key is not available. Therefore, you must create a LDAPServerIntegrity registry entry of the REG_DWORD type under the following registry subkey:
The placeholder represents the name of the AD LDS instance that you want to change.
How to verify configuration changes
Sign in to a computer that has the AD DS Admin Tools installed.
Select Start > Run, type ldp.exe, and then select OK.
Select Connection > Connect.
In Server and in Port, type the server name and the non-SSL/TLS port of your directory server, and then select OK.
For an Active Directory Domain Controller, the applicable port is 389.
After a connection is established, select Connection > Bind.
Under Bind type, select Simple bind.
Type the user name and password, and then select OK.
If you receive the following error message, you have successfully configured your directory server:
Ldap_simple_bind_s() failed: Strong Authentication Required