Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> OpenLDAP адресная книга

Создание адресной книги на OpenLDAP

Автор: Cancer.


В один прекрасный день надоело при появлении нового сотрудника или списка рассылок экспортировать адресную книгу .txt LDIF итд итп и отправлять все это дело по филиалам что бы они загрузили себе. Решил использование сервера каталогов OpenLDAP и вынести его в МИР так же можно и  внутри его использовать, думаю это лучшее решение.

Всем понятно что это удобно, особенно когда бух не знает как набрать фамилию свою на английском =).
В инете достаточно инфы по этому поводу, но все таки хотел написать подробнее как это все делается, как оказалось все очень просто.


Инфа:
OpenLDAP – бесплатный сервер каталогов, который содержится в большинстве дистрибутивов Linux и FreeBSD. Он обладает достаточной функциональностью и полностью совместим с Outlook Express, Mozilla и Mozilla Thunderbird.


Устанавливаем Apache, PHP и модули PHP, не забываем про php5-ldap




Установка OpenLDAP клиента

//> cd /usr/ports/net/openldap23-client/
/usr/ports/net/openldap23-client/> make install clean
/usr/ports/net/openldap23-client/> rehash



Установка OpenLDAP сервера

//> cd /usr/ports/net/openldap23-server/
/usr/ports/net/openldap23-server/> make config

     +--------------------------------------------------------------------+
     |                   Options for openldap-server 2.3.43               |
     | +----------------------------------------------------------------+ |
     | |  [ ] SASL              With (Cyrus) SASL2 support              | |
     | |  [ ] PERL              With Perl backend                       | |
     | |  [ ] SHELL             With Shell backend (disables threading) | |
     | |  [ ] ODBC              With SQL backend                        | |
     | |  [ ] SLP               With SLPv2 (RFC 2608) support           | |
     | |  [ ] SLAPI             With Netscape SLAPI plugin API          | |
     | |  [X] TCP_WRAPPERS      With tcp wrapper support                | |
     | |  [X] BDB               With BerkeleyDB support                 | |
     | |  [ ] ACCESSLOG         With In-Directory Access Logging overlay| |
     | |  [ ] AUDITLOG          With Audit Logging overlay              | |
     | |  [ ] DENYOP            With Deny Operation overlay             | |
     | |  [ ] DYNGROUP          With Dynamic Group overlay              | |
     | |  [ ] DYNLIST           With Dynamic List overlay               | |
     | |  [ ] LASTMOD           With Last Modification overlay          | |
     | |  [ ] PPOLICY           With Password Policy overlay            | |
     | |  [ ] PROXYCACHE        With Proxy Cache overlay                | |
     | |  [ ] REFINT            With Referential Integrity overlay      | |
     | |  [ ] RETCODE           With Return Code testing overlay        | |
     | |  [ ] RWM               With Rewrite/Remap overlay              | |
     | |  [ ] SYNCPROV          With Syncrepl Provider overlay          | |
     | |  [ ] TRANSLUCENT       With Translucent Proxy overlay          | |
     | |  [ ] UNIQUE            With attribute Uniqueness overlay       | |
     | |  [ ] VALSORT           With Value Sorting overlay              | |
     | |  [ ] ACI               With per-object ACIs (experimental)     | |
     | |  [X] DYNAMIC_BACKENDS  Build dynamic backends                  | |
     | |  [X] SLURPD            Build slurpd replication daemon         | |
     +-+------v(+)------------------------------------------------------+-+
     |                       [  OK  ]       Cancel                        |
     +--------------------------------------------------------------------+

/usr/ports/net/openldap23-server/> make install clean
/usr/ports/net/openldap23-server/> rehash



Генерируем пароль администратора OpenLDAP командой slappasswd, хеш которого мы ниже добавим в конфиг OpenLDAP
//> slappasswd -s root
New password:*******
Re-enter new password:*******

{SSHA}HaXoFVeJ5HOmvVbFnSB00lCYjIw8N0y+
//>




Теперь займемся конфигом OpenLDAP
//> ee /usr/local/etc/openldap/slapd.conf

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Load dynamic backend modules:
modulepath      /usr/local/libexec/openldap

# moduleload    back_bdb
# moduleload    back_ldap
moduleload      back_ldbm
# moduleload    back_passwd
# moduleload    back_shell

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
        by self write
        by users read
        by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################

database        ldbm
suffix          "dc=mail,dc=local"
rootdn          "cn=root,dc=mail,dc=local"

# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          {SSHA}HaXoFVeJ5HOmvVbFnSB00lCYjIw8N0y+

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /var/db/openldap-data

loglevel        256

# Indices to maintain
index   objectClass     eq
index   cn              eq




Добавляем в автозагрузку
ldap://127.0.0.1/  - указывем что бы OpenLDAP слушал localhost
ldap://192.168.1.9/ - указывем что бы OpenLDAP слушал Ethernet интерфейс
//> ee /etc/rc.conf

slapd_enable="YES"
## Этот параметр пишите в одну строку без переноса "\"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ \
ldap://192.168.1.9/"'
########
slapd_sockets="/var/run/openldap/ldapi"


Запускаем OpenLDAP
//> /usr/local/etc/rc.d/slapd start
Starting slapd.
//>


Проверяем работает ли он
//> ps axw | grep openldap

1729 ?? Ss 0:00,02 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.1.9/ -u ldap -g ldap
1780 p0 R+ 0:00,00 grep openldap

//> netstat -nap tcp | grep 389

tcp4       0      0  192.168.1.9.389        *.*                    LISTEN
tcp4       0      0  127.0.0.1.389          *.*                    LISTEN



Создаем КОРЕНЬ
//> ee /var/db/openldap-data/base.ldif

dn: dc=mail, dc=local
objectClass: dcObject
objectClass: organization
objectClass: top
dc: mail
o: mail

Добавим схему в OpenLDAP
/var/db/openldap-data/>ldapadd -x -D "cn=root,dc=mail,dc=local" \
-h 192.168.1.9 -W -f base.ldif

Enter LDAP Password:
adding new entry "dc=mail, dc=local"
/var/db/openldap-data/>






Установка phpLDAPadmin

//> cd /usr/ports/net/phpldapadmin
/usr/ports/net/phpldapadmin/> make install clean
/usr/ports/net/phpldapadmin/> rehash



Добавляем алиас в апач
//> ee /usr/local/etc/apache/httpd.conf

Alias /phpldapadmin "/usr/local/www/phpldapadmin/htdocs/"
<Directory "/usr/local/www/phpldapadmin/htdocs">
    Options none
    AllowOverride none
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1 192.168.1.0/24 .domain.local
</Directory>



Слегка правим конфиг
//> ee /usr/local/www/phpldapadmin/config/config.php

$ldapservers->SetValue($i,'server','host','127.0.0.1');






Создание адресной книги














Настройка Thunderbird для использование адресной книги











Документация:
http://www.lissyara.su/?id=1277
http://www.samag.ru/cgi-bin/go.pl?q=articles;n=10.2006;a=01



размещено: 2009-07-22,
последнее обновление: 2009-07-31,
автор: Cancer


Kot_Off, 2009-07-22 в 11:54:52

Спасибо за труд! Очень актуально и нужно.

aks, 2009-07-22 в 12:00:26

Хорошая статья.
особенно спасибо за скрины phpldap.

Только не понятно почему ldap 2.3, а не 2.4

Raven2000, 2009-07-22 в 12:03:05

Баян )
OpenLDAP, addressbook, web интерфейс и все все все. + в форуме линк был

BoOgie, 2009-07-22 в 12:43:44

А исчо если юзается мелкософтовский АД, то система та же (тока сервер каталогов соответственно контроллер домена). В свое время насильно пересадил всю контору с бата на громоптицу и не имею проблем с обновлениями (собсно не в абуках было дело, просто бат не канал). Плюс к этому у меня постфикс работает через тот же контроллер по ldap\'у.

Cancer, 2009-07-22 в 13:37:16

Кстати никто не видел скрипт какой нить синхронизации типа, AD=>OpenLDAP (именно ФИО.e-mail итд итп)??
Все что нужно для контакта.

Гост, 2009-07-22 в 13:44:35

А будет ли это работать с ms outlook из состава офиса мелкософтовского?

macuser, 2009-07-22 в 14:28:36

Еще бы синхронизацию календариков через CalDAV...

Kirill, 2009-07-22 в 19:24:20

Для only-read книги не нужна авторизация для входа, а в данном случае, как я понял, преследуется именно эта цель.
Другое дело, если каждый может вести вести свою адресную книгу

Ы, 2009-07-22 в 19:47:42

Безопасностью автор не озаботился, буратины вельком делать как тут расписано :) А всего то дел было сделать как в мане написано и спать спокойно :)

Cancer, 2009-07-22 в 22:05:17

Ну а что мешает создать пользователя в отдельном контейнере users и права дать токо на чтение!
Не думаю что это так сложно!

У меня так и сделано пользователь ldap у которого права токо на чтение.

vitiko007, 2009-07-22 в 23:22:31

Писать рутовый dc и хранить его же пароль в почтовике - просто непростительно... Автор ведь указал в конфиге возможность использования анонимной учетной записи :)
к тому же есть интересный модуль к почтовику который сразу же вытаскивает список адресов с сервера...
статья хорошая, сам так делал, еще год назад... но безопасностью тут и не пахнет увы...

Cancer, 2009-07-22 в 23:51:10

Это я указал как пример, а так вообще
uid=ldap,ou=users,dc=mail,dc=local

Думаю не стоит писать как создать контейнер и пользователя, так как это все очень просто!

JoyStick, 2009-07-23 в 10:57:54

Спс Cancer, нужная штука!

xmaster, 2009-07-24 в 3:53:14

два месяца уже с этим трахаюсь ! спасибо буду тестить )

kind21, 2009-07-28 в 11:54:36

Если кто использует php-5.2.10 то надо phpldapadmin пишет ошибку, правим: lib/AJAXTree.php

(Change $level=0 to $level on draw_dn() function declaration).

lib/AJAXTree.php 1.2.2.2

Ivan2susr, 2009-07-29 в 8:40:21

> kind21

хм... на 5.2.10 у меня phpldapadmin не завелся, ссылаяcь на то что нет поддержки модуля ldap, поставил phpldapadmin 1.2.0 и все завелось с пол пинка

Pavel, 2009-11-16 в 0:38:51

При попытке добавить запись через phpldapadmin ошибка
Контейнер  является листом . Что делать?

bbk, 2011-10-05 в 20:05:38

Делал по аналогии с этим http://www.lissyara.su/?id=1278  (для пущей безопасности)
и этим
http://ubuntuforums.org/showthread.php?t=271629 (для Mozilla thunderbird схемка)

Добавлю только что для безопасности запускал с параметром в rc.conf'е
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldaps://192.168.1.9/"'
Локал хост оставил нешифрованным, чтобы phpLDAPadmin работал без пробелм.

Связка работает с Ергтвукишкв 7.0 и SLDAP 2.4

Sparta, 2016-06-30 в 13:58:39

"Устанавливаем Apache, PHP и модули PHP, не забываем про php5-ldap"
не расписано как делать вот это.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0492 секунд
Из них PHP: 41%; SQL: 59%; Число SQL-запросов: 89 шт.
Исходный размер: 74444; Сжатая: 12451