Это серверное расширение (backend) позволяет проводить аутентификацию пользователей с помощью Active Directory.
Аутентификация Active Directory может быть настроена через аутентификацию auth:LDAP, однако это сделать гораздо проще с помощью специально созданного расширения DokuWIki. Для взаимодействия с AD в DokuWiki используется отличная библиотека adLDAP, которая основана на работе James Van Lommel. Эта библиотека включена в установку DokuWiki, так что нет необходимости её отдельно загружать и устанавливать. И ко всему прочему эта библиотека позволяет использовать простую (Single-Sign-On) авторизацию NTLM и Kerberos. Для начала настройки необходимо включить предустановленный плагин.
Серверное расширение включено в дистрибутив DokuWiki начиная с версии rc2009-12-02 «Mulled Wine».
Также будет необходимо включить поддержку LDAP на PHP сервере. По умолчанию PHP не поддерживает LDAP. В большинстве случаев нужно просто отредактировать php.ini чтобы включить поддержку LDAP, однако надо проверить установку PHP, если на вашем сервере установлена нестандартная сборка PHP.
Во избежании потери данных при перезаписи их менеджером настройки рекомендуется все настройки производить в файле conf/local.protected.php
.
Возможно потребуется установить как минимум следующие опции:
<?php // общие настройки DokuWiki $conf['useacl'] = 1; $conf['disableactions'] = 'register'; $conf['authtype'] = 'ad'; // настройки Active Directory $conf['auth']['ad']['account_suffix'] = '@my.domain.org'; $conf['auth']['ad']['base_dn'] = 'DC=my,DC=domain,DC=org'; $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org, srv2.domain.org'; //через запятую можно перечислить //несколько контроллеров домена
Можно указать дополнительные параметры:
$conf['auth']['ad']['ad_username'] = 'root'; $conf['auth']['ad']['ad_password'] = 'pass'; $conf['auth']['ad']['sso'] = 1; $conf['auth']['ad']['real_primarygroup'] = 1; $conf['auth']['ad']['use_ssl'] = 1; $conf['auth']['ad']['use_tls'] = 1; $conf['auth']['ad']['debug'] = 1; $conf['auth']['ad']['recursive_groups'] = 1; // Если в AD содержится много групп, переключение этого параметра // в 0 улучшит скорость работы, но неявное членство в группах перестанет работать
ad_username
и ad_password
необходимы для реализации подписки на изменения. Этот аккаунт используется для запроса информации о пользователе из AD.
Для установки прав суперпользователя можно использовать следующую конструкцию:
$conf['manager'] = '@LDAPGROUPNAME'; $conf['superuser'] = '@LDAPGROUPNAME';
Любые другие настройки, указанные в $conf['auth']['ad'], напрямую передаются в библиотеку adldap. Детальное описание этих настроек можно получить в документации по adLDAP.
В комбинации с аутентификацией Single-Sign-On также можно добавить настройки домена Windows. То есть проводить аутентификацию на разных AD в зависимости от домена NTLM или Kerberos конкретного пользователя. Для этого надо использовать название домена (в нижнем регистре) как подключ в $conf['auth']['ad']
. Т.е. для того, чтобы идентифицировать всех пользователей, пришедших из домена Windows Foobar
через сервер AD, отличный от сервера по умолчанию, нужно добавить следующие строчки в конфигурационный файл:
$conf['auth']['ad']['foobar']['account_suffix'] = '@foobar.domain.org'; $conf['auth']['ad']['foobar']['base_dn'] = 'DC=foobar,DC=domain,DC=org'; $conf['auth']['ad']['foobar']['domain_controllers'] = 'otherad.domain.org'; $conf['auth']['ad']['foobar']['ad_username'] = 'otherroot'; $conf['auth']['ad']['foobar']['ad_password'] = 'otherpass';
Если в организации используется система из нескольких контроллеров домена с единым родительским контроллером, может потребоваться указать порт 3268, вместо порта по умолчанию 389. В противном случае DokuWiki может не получить информации о группах пользователей дочернего домена. Самый простой способ сделать это - исправить исходники adLDAP.php, так как все вызовы к ldap_connect содержат порт в качестве отдельного аргумента функции. 5
Пользователи могут изменить их настройки (имя, почтовый адрес и пароль) используя кнопку «Профиль». Это может потребовать выделения соответствующих привилегий для пользователя, от имени которого DokuWiki работает с AD (этот пользователь указан в настройках ad_username
и ad_password
). При этом изменение пароля доступно только через SSL или TLS соединение. См. раздел LDAP over SSL в документации на библиотеку adLDAP.
Также необходимо помнить, что автоматически создаваемые DokuWiki пароли не удовлетворяют политикам безопасности, использованным по умолчанию в Active Directory. В таком случае либо исправьте соответствующие политики AD, либо выключите функцию «Напомнить пароль» в DokuWiki в настройках config:disableactions.
Имена пользователей и групп при экспорте автоматически преобразуются в формат DokuWiki и могут отличаться от указанных на сервере Active Directory. Пробелы заменяются символом подчёркивания, а символы \ и # удаляются.
Пример: Domain Users
станет Domain_Users
в DokuWiki. Если необходимо отредактировать файл с ACL вручную, нужно помнить, что правильная форма: Domain%5fUsers
. Где «%5f» символ подчёркивания.
Об этом необходимо помнить, указывая имена пользователей и групп при настройке прав доступа в DokuWiki.
Single Sign On (SSO) обозначает, что DokuWiki будет использовать логин пользователя, под которым работает пользователь Windows без необходимости введения логина и пароля на сайте. Эта функция использует настройки сервера и читает значение из переменной окружения REMOTE_USER
. При этом подсистема аутентификации через AD в DokuWiki будет использовать это имя для получения дополнительной информации, например информации о том, к каким группа пользователей относится имя.
Для того, чтобы эта функция заработала, необходимо включить настройку sso
в local.protected.php
и скорее всего настроить служебный аккаунт, добавив ему возможность получать информацию о пользователях AD:
$conf['auth']['ad']['sso'] = 1; $conf['auth']['ad']['ad_username'] = 'MyManager'; $conf['auth']['ad']['ad_password'] = 'ManagerPass';
Также необходимо дополнительно установить дополнительные настройки на сервере и в браузере.
First configure IIS to use the Windows Logon for authentication (see screenshots):
inetmgr
Then make sure NTLM is used as authentication protocol. This has to be done on the commandline:
cmd
cd \Inetpub\Adminscripts
cscript adsutil.vbs get w3svc/NTAuthenticationProviders
cscript adsutil.vbs set w3svc/NTAuthenticationProviders «NTLM»
Now restart IIS.
Download http://sourceforge.net/projects/mod-auth-sspi/ Copy the mod_auth_sspi.so file into your apache modules directory. Add into httpd.conf:
LoadModule sspi_auth_module modules/mod_auth_sspi.so <Directory "c:/wamp/www/"> AuthName "My Intranet" AuthType SSPI SSPIAuth On SSPIAuthoritative On require valid-user </Directory>
Now restart Apache
Скачиваем модуль mod_ntlm для Apache.
$ sudo wget http://modntlm.sourceforge.net/mod_ntlm2.tar.gz
Распаковываем архив:
$ tar -zxvf mod_ntlm2.tar.gz
Необходимо обновить систему:
$ sudo apt-get update
Устанавливаем gcc:
$ sudo apt-get install gcc
Устанавливаем Apache prefork и gcc 3.4:
$ sudo apt-get install apache2-prefork-dev gcc-3.4
Линкуем компилятор gcc версии 3.4 с установленным в системе:
$ ln -fs /usr/bin/gcc-3.4 /usr/bin/gcc
Далее компилируем mod_ntlm.c
$ sudo apxs2 -i -a -c mod_ntlm2/mod_ntlm.c
Далее, в /etc/apache2/mods-available создать файл ntlm.load и добавить в него строку с загрузкой модуля:
LoadModule ntlm_module /usr/lib/apache2/modules/mod_ntlm.so
Запустить модуль
$ sudo a2enmod ntlm
В файле /etc/apache2/httpd.conf добавляем:
<Location /> AuthType NTLM NTLMAuth On NTLMAuthoritative OFF NTLMDomain domain.ru NTLMServer name-server.domain.ru NTLMBackup name-server.domain.ru require valid-user </Location>
Конфигурируем Apache2 /etc/apache2/apache2.conf
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Перезапускаем Apache:
$ sudo service apache2 restart
This setup enables an Apache Server on Linux to verify Kerberos Tickets against an Active Directory server.
Good references for Apache/Kerberos can be found at
The following examples assume your wiki to be running on dokuwiki.yourdomain.com
, with your Active Directory server running at dc1.yourdomain.com
;
Note: Kerberos is case sensitive, if it is all caps - it should be!
/etc/krb5.conf
:[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = YOURDOMAIN.COM ticket_lifetime = 24h forwardable = yes [realms] YOURDOMAIN.COM = { kdc = dc1.yourdomain.com admin_server = dc1.yourdomain.com default_domain = yourdomain.com } [domain_realm] dokuwiki.yourdomain.com = YOURDOMAIN.COM .yourdomain.com = YOURDOMAIN.COM yourdomain.com = YOURDOMAIN.COM [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false }
kinit username@YOURDOMAIN.COM klist kdestroy (If you get any errors here, make sure your DNS setup is working and you wrote all marked as "YOURDOMAIN.COM" hosts in uppercase in your krb5.conf. Try resolve every hostname manually.
ktpass -princ HTTP/dokuwiki.yourdomain.com@YOURDOMAIN.COM -mapuser name_of_ad_user_you_have_created -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass the_ad_users_password -out dokuwiki.HTTP.keytab
Use the following if you're running Windows 7/Server 2008 R2 clients because des is disabled by default on these operating systems:
ktpass -princ HTTP/dokuwiki.yourdomain.com@YOURDOMAIN.COM -mapuser name_of_ad_user_you_have_created@yourdomain.com -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -pass the_ad_users_password -out dokuwiki.HTTP.keytab
RC4-HMAC is supported on Windows 2000 and higher.
<Directory "/var/www/html/dokuwiki"> # Kerberos Auth AuthType Kerberos KrbAuthRealms YOURDOMAIN.COM KrbServiceName HTTP Krb5Keytab /etc/httpd/conf/dokuwiki.HTTP.keytab KrbMethodNegotiate on KrbMethodK5Passwd on require valid-user </Directory>
Your browser needs to be setup to forward authentication info to the Webserver.
add detailed description
http://intranet.company.com,http://email.company.lan
Notice that you can use a comma separated list in this field.