Всем привет.
По работе потребовалось рассмотреть вопрос возможности мигрировать почту с Exchange 2007 на Dovecot (iRedMail). Так же заодно возможность переноса домена с Windows Server 2008 на Windows Server 2012 R2.
Я хотел обновить заметку и использовать Windows Server 2016 или 2019, но там всплыли свои особенности:
— из-за ошибок синхронизации на домен контроллере 2019-я никак не хотела повышаться до уровня домен контроллера. С 2016-й такой проблемы не было.
— если AD у меня был 2016, а Exchange на 2012, то не давал продолжить установку из-за какой-то там несовместимости структуры AD, хотя все подготовительные действия были сделаны.
Так же будет рассмотрена настройка фильтрации по группе (не по всему контейнеру (OU)), а по конкретной группе. Те, кто будет состоять в этой группе, смогут залогиниться и отправить почту только пользователям из этой группы.
Пока что остается не решенным один вопрос: адресная книга, т.к. пока не разобрался как организовать фильтр по группам.
В данном конкретном примере не будет рассмотрена отправка на внешние почтовые адреса (тот же Яндекс или Gmail), т.к. почта будет работать исключительно во внутренней сети и не будет иметь доступа в Интернет.
Всё делалось в вирт среде, с бэкапами после каждой важной операции и snapshot’ами, для быстроты (но это уже на последних шагах).
И так, по порядку.
Сразу прошу прощения и извиняюсь, если где-то на скринах или на каких-то шагах фигурирует Windows Server 2016\2019 — пробовал и так, и этак, и мог где-то не заменить скрины.
На момент дополнения заметки — 18.09.2023 — всё делал на Windows Server 2012 R2.
!!!Внимание: будьте внимательны при наборе команд. Перед началом необходимо обязательно выполнить резервную копию мигрирующих ОС средствами MS Windows Server Backup, либо сторонними — Acronis True Image, CloneZilla или какими вы пользуетесь!!!
IP-адреса, названия серверов указаны для примера. Данные используемые у Вас могут отличаться!
Пожалуйста, будьте внимательны во избежание ошибок!
Содержание
Предисловие.
Так как я исследовал только возможность миграции, то я сделал тестовую зону в которой разместил все три виртуальные машины: AD, Exchange и iRedMail. Если вам такого не надо, то вы можете просто старые выключить, и уже новые интегрировать в вашу локальную сеть, подменив ip-адреса и почистив DNS-кеш как на сервере, так и на клиентах.
Сама миграция с Exchange 2007 сначала должна была происходить на Exchange 2016. В тех статьях, что я нашел, говорили что делается по такой схеме: Exchange 2007 —> Exchange 2010/2013 —> Exchange 2016. Т.к. 2010-й версии не было, то пришлось делать на 2013-й.
Но в итоге заказчик решил отказаться от Exchange вообще, хотя не понятно почему, т.ч. пришлось рассматривать вариант с установкой iRedMail и уже мигрировать туда.
Windows Server я везде устанавливал англоязычный. Т.к. у меня проблема с языком, то это помогает немного его подтягивать в лучшую сторону, ну и ошибки гуглить лучше на англ языке, т.к. иногда наша локализация бывает весьма очень странной.
Ссылки на статьи-источники, а так же их сохраненные копии внизу.
Миграция Active Directory.
Все свои работы я производил на тестовом стенде. Но как только будет надо, то почти тоже самое можно повторить на проде.
На соседнем гипервизоре поднимаем новую вирт машину с Windows Server 2012 R2- пробовал на ней.
Установка стандартная с GUI, потом установка всех обновлений.
Далее, задаем имя машины (для примера, dc0.mydomain.local), если не сделали этого раньше, и вводим в существующий домен, перезагружаем. После этого добавляем роли — Active Directory и DNS (у меня всего 2 роли, т.к. домен используется в небольшой организации).
Если у Вас DHCP, то вероятно беспокоиться не о чем. В моём случае я установил свободный IP-адрес, а в DNS указал IP контроллера домена (т.к. он же и является DNS-сервером).
Установка и настройка DNS.
Теперь необходимо настроить DNS. Я на текущем DC (dc2.mydomain.local) в настройках DNS разрешил репликацию на новый сервер.
На сервере, с которого надо забрать записи DNS, открыть «Диспетчер DNS», развернуть свой контроллер домена —> развернуть «Зоны Прямого Доступа» («Forward Lookup Zones») —> на нужной зоне кликнуть ПКМ —> Свойства —> Вкладка: Передачи зон и здесь настроить как вам надо. Т.е. либо явно указать сервера, которым разрешено забирать зоны, либо тем, кто в списке во вкладке «Серверы имен», либо вообще всем.
При настройке DNS на dc0 я указываю, что зоны надо получить с основного контроллера домена (dc2). Убедиться, что зоны скопировались нормально.
Так же не забудьте создать обратную зону, иначе DNS не сможет создать PTR-записи.
Настройка Active Directory.
Теперь надо повысить новый сервер до Контроллера Домена (Domain Controller). Для этого в консоли управления сервером выбираем — Promote this server to a domain controller.
Откроется мастер. Выбираем Add a domain controller to an existing domain (Добавить Контроллер Домена в существующий домен).
На следующем шаге отмечаем пункты:
- Domain Name System (DNS) server
- Global Catalog (GC)
И ниже вводим Directory Service Restore Mode (DSRM) password (DSRM-пароль).
Если вы не помните этот пароль или, как в моём случае, не вы его задавали и спросить уже не у кого, то можно его сбросить. Информация ниже под спойлером.
Если Вы забыли этот пароль или вам достался сервер в наследство, а пароль спросить не у кого, то есть способ его сбросить.
Пожалуйста, убедитесь в том, что Вы понимаете что делаете!
1. Войти под учетной записью администратора домена либо эквивалентной ей на контроллер домена, где необходимо сбросить пароль.
2. Запустить cmd от имени Администратора.
3. Ввести
1 | ntdsutil |
4. Ввести команду
1 | set dsrm password |
5. Команда сброса пароля
1 | reset password on server null |
6. Установите новый пароль (предварительно запишите в надежном месте), после ввода пароля нажать Enter.
Повторить ввод пароля.
7. Если всё сделано правильно, то Вы увидите надпись — Password has been set succefully (пароль был успешно установлен).
8. Выйти командой
1 | quit |
И еще раз повторить команду для выхода.
Теперь данный пароль можно использовать в след шаге по повышению до контроллера домена.
На след шаге, возможно, будет вот такое предупреждение:
Но т.к. DNS настроили выше, то я просто пропустил, нажав next (далее).
Далее, я выбираю свой контроллер домена (который у меня один и который на Windows Server 2008)
На этом шаге всё оставляю по умолчанию, Вы же делаете как у Вам нужно
Далее, проверим параметры, что указывали на прошлых шагах
В этом окне будет куча предупреждений, но мне они не мешают. Главное, что написано, что проверки выполнены успешны. Жмем Install (Установить).
После установки — перезагрузить.
Теперь после перезагрузки можно открыть оснастку AD и проверить, что мы видим структуру нашего домена.
Команда — dsa.msc или же из консоли управления сервером. Можно создать учетную запись и убедиться, что в оснастке на старом сервере вы видите изменения.
Замена серверов.
В моем случае я новый DC0 перенес в изолированную подсеть для тестов, что бы не поломать всё на проде.
После переноса оснастка на сервере не работала. Выдавала — the specified domain does not exist or could not be contacted, т.к. основной контроллер домена не доступен.
Теперь моя задача: сделать этот DC рабочим.
Захват ролей.
!Внимание, при принудительном захвате ролей Microsoft крайне настоятельно рекомендует избегать возвращения старого DC в сеть, т.к. могут быть проблемы. Пожалуйста, убедитесь, что старый DC будет недоступен во избежание конфликтов!
Убедимся, что оснастка недоступна — запустим dsa.msc. Если у вас всё работает, то супер. Остальное можно пропустить.
Сначала зайдем на сервер под учетной записью администратора домена (как раз в кэше должен быть). У меня же вот такая ошибка:
И при попытке смены контроллера домена ничего не видим…
В свойствах сетевого подключения укажем в первой записи DNS сами себя, только не 127.0.0.1, а именно IP-адрес. В моем случае это 10.0.2.15
Далее, запускаем cmd от имени администратора и приступаем к принудительному захвату домена:
выполним
1 | ntdsutil |
должно получится как-то так
1 | roles |
1 | connections |
подключаемся к нашему (локальному) серверу, у меня это dc0
1 | connect to server dc0 |
1 | quit |
Собственно, начинаем захват ролей:
1 | seize schema master |
В данном диалогов окне отвечаем утвердительно — выбираем Yes.
Как видно роль переехала с DC2 на DC0.
Аналогично делаем для других ролей.
1 | seize naming master |
Так же отвечаем утвердительно — Yes.
Как видно, роль переехала (захвачена). Идем дальше:
1 | seize rid master |
Так же отвечаем утвердительно — Yes.
Как видим, роль захвачена. Дальше:
1 | seize pdc |
Отвечаем утвердительно — Yes.
Роль успешно захвачена. Последний шаг:
1 | seize infrastructure master |
Отвечаем утвердительно — Yes.
Как видим, роль успешно захвачена.
Выходим:
1 | quit |
Попробуем выполнить проверку ролей:
1 | netdom query fsmo |
и видим ошибку…
Чистка метаданных через ntdsutil
Захвата ролей не достаточно, что бы наш сервер был сам по себе. Теперь мы должны удалить записи о старых DC, если их несколько. Воспользуемся всё той же утилитой ntdustil:
1 | ntdsutil |
далее вводим:
1 | metadata cleanup |
далее
1 | connections |
далее, подключение к локальному серверу
1 | connect to server dc0 |
далее
1 | quit |
1 | select operation target |
далее, команда просмотра сайтов. В моё случае только один:
1 | list sites |
выбираем нужный сайт по его номеру, в данном случае — 0
1 | select site 0 |
Теперь посмотрим сколько серверов на сайте:
1 | list servers in site |
В моём случае их 3 (три) штуки:
DC0 — новый, который на Windows Server 2016, его не трогаем
DC1 — старый первичный сервер, который уже давно не встрою — его удалю.
DC2 — сервер, который у меня главный в проде — его тоже удалить.
1 | select server 0 |
Посмотрим домены на этом сервере:
1 | list domains |
Выбираем домен, у меня он тут один:
1 | select domain 0 |
выйдем и удалим эту запись:
1 2 | quit remove selected server |
Подтверждаем операцию — Yes.
Как видно, DC2 успешно удалился. Теперь можно проверить:
Как видно, остались только DC0 — новый сервер (Windows 2016) и DC1 — старый, который тоже надо удалить.
Для этого повторить шаги после команды «list servers in site».
В итоге должен остаться только один DC0.
Чистка DNS-записей
Теперь, надо почистить DNS-записи от старых «хвостов». Для этого откроем оснастку DNS и раскроем Forward Lookup Zones.
Далее, в моем случае, чистим _msdcs.mydomain.local
Надо открыть свойства этого каталога и почистить там старые записи во вкладке Name Servers.
Удаляю DC1 и DC2; выделяю DC0, нажимаю edit, в открывшемся окне нажимаю Resolve.
Нажимаю OK, и должно получиться что-то типа такого:
Apply (Применить) — OK.
Теперь, раскроем список самого домена — mydmain.local
Вызовем свойства этого каталога и во вкладке Name Servers удалим лишнюю запись, в моем случае — dc2. Оставим только DC0, причем IP-адрес уже должен там быть. Если нет, то делаем по аналогии с предыдущим пунктом.
Далее, нас интересует подкаталог _msdcs. Если его выбрать, то видно, что там старый DC прописан.
По аналогии с предыдущими пунктами, вызовем свойство этого каталога и изменим во вкладке Name Servers на наш DC0.
Далее, раскроем: DomainDnsZones > _sites > Default-First-Site-Name > _tcp и почистим от старых записей:
Так же проверьте остальные подкаталоги на предмет старых записей. Всех их удалить.
После этого почистим кэш и обновим файл на DNS-сервере:
NETLOGON — Обновление записи в реестре.
Но даже после этих манипуляций оснастка выдавала ошибку.
Пробовал перезагружать сервер. В итоге, решил еще погуглить проблему, т.к. понимания что не так — не было, а в событиях Windows пустота.
При попытке смены контроллера домена на самого себя, я вижу что у него статус Online, но не подключается.
Помогла статья, ссылка ниже, там же сохраненная копия.
- Откроем редактор реестра и перейдем в веку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
- Найдите параметр с именем SysvolReady
- Если его значение равно 0, измените его на 1. Если значение 1 – смените на 0 и опять измените на 1
- Закройте редактор реестра, и убедитесь что служба Netlogon расшарила каталог NETLOGON.
После внесения изменения, у меня без перезагрузки сервера, стала доступна оснастка управления — dsa.msc.
Проверим роли нашего сервера:
1 | netdom query fsmo |
Теперь в нашем распоряжении Windows Server 2016 с Active Directory для тестирования и т.п.
Можно и в прод выпускать, если надо.
Подготовка MS Exchange.
Версия 2007.
Сервер с Exchange 2007 я так же скопировал на тестовый стенд. Изменил DNS в свойствах сетевого подключения. Он увидел мой домен (dc0) на Windows Server 2016.
Версия, с которой буду мигрировать
Версия 2013.
Теперь надо установить ОС для последующей установки туда нового Exchange. Для версии 2013 я выбрал Windows Server 2012 R2 где установлены все доступные обновления. Залогинился под учетной записью доменного админа, а то ничего не получится.
из-за отсутствия нужного ПО
Запустим Power Shell от имени администратора и выполним вот такую команду:
1 | Install-WindowsFeature AS-HTTP-Activation, Desktop-Experience, NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-ADDS-Tools, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation |
После ввода команды показался прогресс бар:
По окончании установки увидим такое:
Для автоматической перезагрузки можно было добавить: –Restart
После установки надо перезапустить сервер и установить след компоненты (всё внизу по ссылке):
- Microsoft Unified Communications Managed API 4.0. Core Runtime 64-bit,
- Microsoft Office 2010 Filter Packs 64 bit,
- Microsoft Office 2010 Filter Packs SP1 64 bit.
Далее, смонтируем iso-образ или распакуем куда-нибудь, это как кому удобно. Запустим cmd от имени Администратора и перейдем туда, где установщик (я смонтировал):
Теперь подготовим схему нашей AD для 2013-й версии Exchange:
1 | setup.exe /prepareschema /iacceptexchangeserverlicenseterms |
При успешном успехе увидим такое:
Теперь след команда:
1 | setup.exe /preparead /organizationname:YouOrganization /iacceptexchangeserverlicenseterms |
YouOrganization — имя текущей организации в Exchange. Где это посмотреть так и не нашел. Ввел произвольное и он мне выдал ошибку:
Я повторил команду, но уже с правильным именем и всё прошло:
А можно вообще без имени:
1 | setup.exe /preparead /iacceptexchangeserverlicenseterms |
Так, продолжим установку. Теперь выполнить такую команду:
1 | Setup.exe /mode:install /roles:clientaccess /IAcceptExchangeServerLicenseTerms |
Ошибка: The Windows component Server-Gui-Mgmt-Infra isn’t installed on this computer and needs to be installed before Exchange Setup can begin
В Windows Server 2016 нет этого компонента, поэтому надо использовать Windows Server 2012 R2.
Далее, след команда:
1 | Setup.exe /mode:install /roles:mailbox /IAcceptExchangeServerLicenseTerms |
Но я просто запустил setup.exe и далее шел по шагам мастера:
После окончания установки увидим такое сообщение:
Перезагрузим сервер с Exchange.
Теперь попробуем зайти в webui https://localhost/ecp/?ExchClientVer=15
Авторизуемся под доменным админом и, надеюсь, видим всех наши п\ящики.
Перейдем на вкладку «Servers» и там увидим наш старый сервер и наш новый.
Здесь же можно ввести ключ от сервера.
Теперь можно проверить всё остальное — «databases», «virtual directories», «certificates». Убедиться, что всё создано.
Перемещение пользователей.
Для перемещения п\ящика пользователя необходимо перейти во вкладку «mailboxes», выделить нужного пользователя и справа внизу выбрать Move Mailbox To another database
Следующее окно:
1 — указываем название задания перемещение,
2 — нажать browse…
3 — в открывшемся окне выбрать нужную БД (в моём случае это exch2 — новый сервер (2013)), нажать add ->
4 — увидим добавленную БД и жмем OK.
Пример:
Жмем next Здесь я всё оставил без изменений.
Жмем new
Появится окно с вопросом:
Если нажать «YES», то переместит в окно где можно смотреть за процессом миграции.
1 — обновить.
При успехе в столбцах «Total» и «Finalized» будет 1, т.к. один п\ящик перемещали.
На скрине у меня 2 задания — с 1-м и 3-мя п\ящиками.
Возвращаемся в mailboxes и видим, что наш клиент находится в новом расположении. Для того, что бы отображался столбец с БД, надо его добавить:
Если выделить несколько пользователей, то для перемещения надо потом справа нажать «More options…» и уже там выбрать «Move Mailbox».
Дальше всё тоже самое, что для одного пользователя. Процесс миграции у меня длительный. У меня диск у ВМ — 50 ГБ и его маловато. 2012-я не позволяет на лету расширить диск, т.е. без перезагрузки. Т.ч. лучше заранее диск расширить, либо изначально сделать большим.
Можно, конечно, сделать где-нибудь RAID, потом iSCSI и подключить, и уже туда переместить database и mailbox. Всё зависит от задачи и инфраструктуры.
[заметка дополняется]
Настройка iRedMail.
Далее, рассмотрим настройку Dovecot, Postfix и Roundcube для работы с LDAP и фильтрацией по группе.
[заметка дополняется]
ROUNDCUBE: Адресная книга из группы в Active Directory (AD)
Данный конфиг позволяет сделать адресную книгу для пользователей на основе группы в AD.
По умолчанию в документации iRedMail сказано как сделать Адресную книгу на весь Organization Unit (контейнер) в AD. Но у меня была задача, сделать так, что бы пользователь мог иметь п\ящик, но при этом не отображаться в адресной книге. Ну какой-нибудь специфический аккаунт. Письмо ему отправить можно, но это если знать его почту.
Я удалил все логины, пароли и прочее, т.к. данные с реального стенда. Вам следует указать свои.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | /<?php // SQL DATABASE $config['db_dsnw'] = 'mysqli://roundcube:1[hash_passwd]@127.0.0.1:3306/roundcubemail'; // LOGGING $config['log_driver'] = 'syslog'; $config['syslog_facility'] = LOG_MAIL; // IMAP $config['default_host'] = '127.0.0.1'; $config['default_port'] = 143; $config['imap_auth_type'] = 'LOGIN'; $config['imap_delimiter'] = '/'; // Required if you're running PHP 5.6 or later $config['imap_conn_options'] = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), ); // SMTP $config['smtp_server'] = 'tls://127.0.0.1'; $config['smtp_port'] = 587; $config['smtp_user'] = '%u'; $config['smtp_pass'] = '%p'; $config['smtp_auth_type'] = 'LOGIN'; // Required if you're running PHP 5.6 or later $config['smtp_conn_options'] = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), ); // Use user's identity as envelope sender for 'return receipt' responses, // otherwise it will be rejected by iRedAPD plugin `reject_null_sender`. $config['mdn_use_from'] = true; // SYSTEM $config['force_https'] = true; $config['login_autocomplete'] = 2; $config['ip_check'] = true; $config['des_key'] = '[key]'; $config['cipher_method'] = 'AES-256-CBC'; $config['useragent'] = 'Roundcube Webmail'; // Hide version number $config['username_domain'] = 'mydomain.local'; $config['mime_types'] = '/etc/mime.types'; $config['max_message_size'] = '15M'; // USER INTERFACE $config['create_default_folders'] = true; $config['quota_zero_as_unlimited'] = true; $config['spellcheck_engine'] = 'pspell'; // USER PREFERENCES $config['default_charset'] = 'UTF-8'; //$config['addressbook_sort_col'] = 'name'; $config['draft_autosave'] = 60; $config['default_list_mode'] = 'threads'; $config['autoexpand_threads'] = 2; $config['check_all_folders'] = true; $config['default_font_size'] = '12pt'; $config['message_show_email'] = true; $config['layout'] = 'widescreen'; // three columns //$config['skip_deleted'] = true; // PLUGINS $config['plugins'] = array('managesieve', 'password', 'zipdownload'); // Global LDAP address book. $config['ldap_public']["global_ldap_abook"] = array( 'name' => 'Адресная книга MYDOMAIN.LOCAL', 'hosts' => array('dc0.mydomain.local'), //новый DC, который в начале заметки 'port' => 389, 'use_tls' => false, 'ldap_version' => '3', 'network_timeout' => 10, 'user_specific' => true, // Search mail users under same domain. //base_dn ниже закомментирован, что бы пользователи из этого OU не отображались // 'base_dn' => 'OU="Пользователи моего домена",dc=mydomain,dc=local', 'base_dn' => '', 'bind_dn' => '[my_ad_user_ro]', 'bind_pass' => '[pass_ad_user_ro]', 'writable' => false, 'search_fields' => array('mail', 'cn', 'sAMAccountName', 'displayname', 'sn', 'givenName'), // mapping of contact fields to directory attributes 'fieldmap' => array( 'name' => 'cn', 'displayname' => 'displayName', 'surname' => 'sn', 'firstname' => 'givenName', 'jobtitle' => 'title', 'department' => 'department', 'company' => 'company', 'email' => 'mail:*', 'phone:work' => 'telephoneNumber', 'phone:home' => 'homePhone', 'phone:mobile' => 'mobile', 'phone:workfax' => 'facsimileTelephoneNumber', 'phone:pager' => 'pager', 'phone:other' => 'ipPhone', 'street:work' => 'streetAddress', 'zipcode:work' => 'postalCode', 'locality:work' => 'l', 'region:work' => 'st', 'country:work' => 'c', 'notes' => 'description', 'photo' => 'jpegPhoto', // Might be 'thumbnailPhoto' for // compatibility with some other // Microsoft software 'website' => 'wWWHomePage', ), 'sort' => 'cn', 'scope' => 'sub', 'filter' => '(&(|(objectclass=person)(objectclass=group))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))', 'fuzzy_search' => true, 'vlv' => false, // Enable Virtual List View to more efficiently fetch paginated data (if server supports it) 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. 'referrals' => false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups 'group_filters' => array( 'departments' => array( 'name' => 'ГРУППА ПОЛЬЗОВАТЕЛИ ДОМЕНА', 'scope' => 'list', 'base_dn' => 'OU="Пользователи моего домена",DC=mydomain,DC=local', //AddressBook отдельная группа, куда я помещаю пользователей, который должны там отображаться. 'filter' => '(&(objectCategory=user)(memberOf=CN=AddressBook,OU="Пользователи моего домена",DC=mydomain,DC=local))', 'name_attr' => 'sn', ), ), ); $config['autocomplete_addressbooks'] = array('sql', 'global_ldap_abook'); |
[заметка дополняется]
Ссылки:
NetLogon Windows Server 2016 (MS) |
If you found an error, highlight it and press Shift + Enter or to inform us.