Я работаю в домене AD с одним контроллером домена под управлением Windows Server 2012 R2. В сети домена (хотя формально не присоединен к домену) находится веб-сервер LAMP, на котором работает Ubuntu Server 14.04.3 LTS. Все машины могут связываться друг с другом как по IP-адресу, так и по записи DNS, а стек LAMP (насколько я могу судить) настроен соответствующим образом; HTTP-запросы обслуживаются должным образом.
Цель состоит в том, чтобы установить экземпляр MediaWiki на сервере LAMP. Более того, MediaWiki следует - используя отличное расширение Райана Лейна LdapAuthenticate - обратитесь к AD DC для проверки подлинности входа пользователей.
Я старался как можно точнее следовать инструкциям по установке, приведенным в книге. Установка LAMP в основном выполняется установщиком Ubuntu Server, и я дополнительно устанавливаю через apt-get
пакеты php5-intl php5-gd texlive php5-xcache imagemagick mediawiki mediawiki-math
и их зависимости.
Далее я раскомментирую #Alias...
линия в /etc/mediawiki/apache.conf
, запустите команды a2enconf mediawiki
и php5enmod mycrypt
и, наконец, установите расширение LdapAuthenticate MediaWiki в соответствии с руководствами на сайт автора.
Добавлен к моему /etc/mediawiki/LocalSettings.php
являются:
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
require_once("$IP/extensions/LdapAuthentication/LdapAuthentication.php");
$wgLDAPDebug = 3;
$wgDebugLogGroups["ldap"] = "/tmp/debug.log";
$wgAuth = new LdapAuthenticationsPlugin();
$wgLDAPDomainNames = array("MYDOMAIN");
$wgLDAPServerNames = array("MYDOMAIN" => "addc.local.domain.com");
$wgLDAPSearchStrings = array("MYDOMAIN" => "USER-NAME@local.domain.com");
$wgLDAPEncryptionType = array("MYDOMAIN" => "tls");
Затем я добавляю самозаверяющий сертификат CA AD DC в /etc/ssl/certs
на сервере LAMP запустите c_rehash
, и перезапустите все.
На данный момент я могу войти в MediaWiki и без проблем перейти к форме входа. Форма входа показывает MYDOMAIN
, и PHP не сообщает об ошибках - плагин LdapAuthentication выглядит неплохим.
Однако, когда я пытаюсь войти в систему с использованием набора учетных данных AD, MediaWiki сообщает неправильный пароль. Ошибка PHP на веб-странице сообщает, что PHP не удалось запустить TLS (Warning: ldap_start_tls(): Unable to start TLS: Connect error in...
), и это же сообщение подтверждается журналом отладки плагина LdapAuthentication, который я ранее установил на /tmp/debug.log
.
Теперь, глядя на AD DC, я отмечаю в системном журнале следующее событие:
Error from Schannel, Event ID 36874
An TLS 1.2 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed.
Эта ошибка совпадает с повторяющимися попытками аутентификации входа пользователей в MediaWiki с помощью AD через LDAP.
Я недостаточно знаю об управлении наборами шифров, чтобы подойти к решению этой проблемы. Более того, дни за днем поиск в Google не приносил мне никаких продуктивных результатов. Может ли кто-нибудь указать мне правильное направление?
После взлома расширения MediaWiki LdapAuthentication (версия 2.0d) и введения собственных точек останова я смог отследить проблему. Оказывается, привязка к моему серверу AD через SSL работает только после вызова PHP ldap_connect()
это похоже,
ldap_connect("myserver.com", 636);
скорее, чем,
ldap_connect("ldaps://myserver.com:636");
на чем настаивает LdapAuthenticate.
Я также отмечаю, что LdapAuthenticate обертывает PHP ldap_connect()
следующим образом,
public static function ldap_connect( $hostname=null, $port=389 ) {
wfSuppressWarnings();
$ret = ldap_connect( $hostname, $port );
wfRestoreWarnings();
return $ret;
}
но тогда только когда-либо проходит $hostname
, как URI, отформатированный как один из,
ldapi://myserver.com:port
ldap://myserver.com:port
ldaps://myserver.com:port
уходящий $port
к его значению по умолчанию 389
. Это означает, что, скажем, вы пытаетесь выполнить привязку через SSL, фактический вызов PHP ldap_connect()
выглядит так,
ldap_connect("ldaps://myserver.com:636", 389);
что должно вызывать некоторые проблемы!
Я думаю, что это может быть ошибка в LdapAuthenticate, но опять же, возможно, я просто неверно истолковал PHP (это было давно). В любом случае мне удалось заставить аутентификацию работать, взломав LdapAuthenticate, чтобы вызвать вызов,
ldap_connect("myserver.com", 636);
Однако остается один вопрос без ответа. Почему мой сервер AD с радостью принимает привязки к myserver.com
, но не ldaps://myserver.com
? (Я подтвердил, что это так, используя ldp.exe
в Windows). Я подозреваю, что это проблема DNS, поскольку myserver.com
фактически обрабатывается в соответствии с записью на моем локальном DNS-сервере (на котором я, возможно, действительно пропустил трюк!) Я задам другой вопрос в другом месте!
Я не знаю насчет MediaWiki, но у меня «ДокуВики» делает то, что вы ищете. Я использую интеграцию Apache / Kerberos для работы - возможно, вы тоже сможете это сделать. Для начала вам необходимо:
Создайте файл ключей Kerberos. Это своего рода предварительный набор учетных данных, необходимых для доверия Kerberos. Сделайте это, выполнив
ktpass -princ HTTP/<service host name>@<DOMAIN NAME> -mapuser <security principal> -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass <password> -out <filename>.keytab
на вашем сервере AD.
Если ваш Apache находится на Linux (мой), установите libpam-krb5
пакет (или эквивалент в вашей системе). Затем отредактируйте свой /etc/krb5.conf
:
[libdefaults]
default_realm = <YOUR DOMAIN>
Измените Directory
раздел вашего apache.conf, который применяется к настройке Media Wiki. Добавьте интеграцию с Kerberos следующим образом:
# Kerberos Auth
<Directory>
.... # Your Media Wiki stuff here
AuthType Kerberos
KrbAuthRealms <YOUR DOMAIN>
KrbServiceName HTTP/<service hos name>
Krb5Keytab /etc/apache2/<filename>.keytab
KrbMethodNegotiate on
KrbMethodK5Passwd on
require valid-user
</Directory>
После этого браузеры смогут входить в систему в стиле единого входа локальных пользователей (если вы соответствующим образом настроите браузеры). Если они не являются локальными пользователями, они получат базовое приглашение для входа в систему, которое принимает учетные данные AD.
Эта установка прекрасно работает для меня, используя «ДокуВики». authad
плагин. Не знаю, адаптируется ли он к Media Wiki, но Apache / Kerberos Stuff действительно хорош для многих вещей. Надеюсь, поможет!