eGroupWare + авторизация в AD + синхронизация с Outlook через SyncML

    Перешел на новую работу. Озадачили поставить систему документооборота. Решил сразу с заделом на будущее поставить eGroupWare. Для начала решил все это дело потестировать на Денвере в корпоративной Vista Business. Что было нужно для полноценной работы? Система документооборота, авторизация в Active Directory и синхронизация через Outlook.

    Под катом грабли с которыми пришлось столкнуться.

    Итак, eGroupWare 1.16.002, Microsoft Outlook 2007, Funambol Outlook Sync Client 8.0.5., PDC — Windows Server 2003.
    Домен для определенности — home.local.
    Компьютер на котором устанавливаем eGW — main и доступен по http по адресу _http://main.home.local
    Пользователь имеющий право на чтение списка пользователей домена(теоретически любой пользователь) — ADUser. Пароль для него — ********
    1. Устанавливаем eGW (миллионы раз это описано — даже лень писать).
    2. Удовлетворяем все зависимости (проверяем это скриптом проверки установки).

    3. В конфигурации заголовков прописываем домен (home.local).(Конфигурация заголовков доступна в _http://main.home.local/setup)
    4. В конфигурации домена (home.local) домена настраиваем авторизацию через Active Directory. Проверьте что у Вас установлен модуль php_ldap и что он включен в php.ini. Продолжаем. Есть два пути

    first way (tooooooooo easy)


    Исключительно для Windows
    а) Копируем из директории php библиотеки libeay32.dll и ssleay32.dll в \Windows\System32. Рестартуем Аpache
    б) Выставляем настройки в конфигурации домена (домена в понимании eGW)

    Выберите используемый вами тип идентификации: ADS
    Выберите где вы будете хранить/получать информацию об учетных записях пользователей: SQL
    Автоматическое создание учетных записей для идентифицированных пользователей: ДА
    ....
    Имя сервера/IP адрес контроллера Домена: IP AD-сервера
    Имя домена: home.local

    second way (через тернии к звездам)


    Авторизация / Учетные записи
    Выберите используемый вами тип идентификации: LDAP
    Выберите где вы будете хранить/получать информацию об учетных записях пользователей: SQL
    Автоматическое создание учетных записей для идентифицированных пользователей: ДА

    Используя LDAP:
    Имя сервера LDAP: IP AD-сервера
    LDAP контекст: OU=пользователи, DC=home, DC=local (тут, разумеется, может меняться информация в зависимости как у вас прописаны пользователи в AD, возможно это будет OU=Users)
    Фильтр поиска учетных записей LDAP, по умолчанию: (& (objectClass=user)(objectCategory=person) (samaccountname=%user))
    Контекст групп LDAP: OU=пользователи, DC=home, DC=local (повторяемся)
    Корневой dn LDAP (поиск акаунтов и смена паролей): ADUser@home.local (наш пользователь для авторизации в AD, Active Directory в отличии от обычного LDAP-сервера не предоставляет анонимный доступ к своим данным)
    Пароль LDAP: ********

    Готово!

    И пошли первые грабли.
    5. Хитрости с администратором
    Для того чтобы добавить первого админа
    Идем в конфигурирование и прописываем логин уже залогинившегося человека. Ставим ему пароль тот же.
    В интернетах написано, что можно выставить настройку в конфигурации чтобы пользователи первые залогинившееся пусть добавляются в Admins, после чего залогиниться снова и получить права администратора. ЭТО НЕ РАБОТАЕТ! Пользователь не добавиться в группу Default и не будет доступа даже к первой страничке =)

    И самое вкусненькое на конец.
    6. Синхронизация SyncML
    Использовалась программа Funambol Outlook Sync Outlook Client (остальные либо платные, либо у меня не хватало мозгов в них разобраться)
    Адрес для синхронизации _http://main.home.local/rpc.php
    Переходим по нему смотрим на ошибки. У меня было так.
    You need to set mbstring.func_overload to 0 for rpc.php.
    You should access this URL only with a SyncML enabled device.
    Что должны переходить по этому урлу только SyncML клиентом мы и так знаем, а вот про option для php это интересно.
    С учетом что в корне лежит .htaccess в котором явно
    # multibyte extension: needed for utf-8
    php_value mbstring.func_overload 7

    Ну чтож обманываем его, прописываем в .htaccess
    # just for SyncML
    <Files rpc.php>
    php_value mbstring.func_overload 0


    Теперь лезем в клиента Funambol -> Ctrl+T -> Account
    Location _http://main.home.local/rpc.php
    Username USER (в данном случае используется логин того человека, чьи данные мы хотим синхронизировать)
    Password ********


    Идем в Sync



    EGroupware был настроен таким образом, чтобы при типе записи ./sX данные сервера обновляли данные клиента, а.при типе записи ./sifX происходило разрешение конфликтов.
    Смотрим табличку.
    Тип приложения Cервер перезаписывает клиента Разрешение конфликтов
    Адресная книга ./scard ./sifcontacts
    Календарь ./scal ./sifcalendar
    Задачи ./stask ./siftasks
    Заметки ./snote ./sifnotes

    Ну и ставим как удобно для себя.
    Смотрим также нижнюю табличку по типам
    Тип приложения Тип записи Тип данных
    Адресная книга ./contacts
    ./sifcontacts
    ./scard
    text/vCard
    text/x-s4j-sifc
    text/x-s4j-sifc
    Календарь ./calendar
    ./events
    ./sifcalendar
    ./scal
    text/calendar
    text/calendar
    text/x-s4j-sife
    text/x-s4j-sife
    Задачи ./tasks
    ./siftasks
    ./stask
    text/calendar
    text/x-s4j-sift
    text/x-s4j-sift
    Заметки ./notes
    ./sifnotes
    ./snote
    text/x-vnote
    text/x-s4j-sifn
    text/x-s4j-sifn

    Я, например, поставил так
    Тип приложения Значение Примечание
    Contacts ./sifcontacts
    Calendar ./sifcalendar Тип SIF оставляем
    Tasks ./siftasks Тип SIF оставляем
    Notes ./sifnotes


    Ну вроде б работает. Вопросы и главное, критика, приветствуются.
    p.s. Если нужно могу написать статью уже о том, как поднимался не тестовый, а рабочий сервер на Ubuntu.

    Комментарии 6

      0
      Расскажите, как в целом работники отнеслись к вашему нововведению? Все ли пользуются? И по поводу Ubuntu, там же вроде для интеграции в AD нужно повозиться?
        0
        Структура государственная. Тут все просто. Поступил приказ ввести в действие систему документооборота — ввели. А так как работы с бумажками у нас очень много — всем пришлось пересесть на новую схему (ушли от простого файл-сервера с документами). Как водиться сначала все возмущались, потом привыкли. А по поводу Ubuntu в статье прописан «second way», т.е. мы читаем данные из LDAP-сервера, на основе которого построен AD. Единственная сложность, как уже было написано, что в AD должен быть введен пользователь.
          0
          Вообще как показывает практика, авторизация в PHP, используя Active Directory происходит путем попытки подконнектиться через ldap_connect к базе AD c именем пользователя и паролем. Если коннект удачен — пользователь авторизован. =)
            0
            Сколько у вас человек, которые работают в этой систему? И сколько места на сервере требуется под хранение документов?
              0
              работает на данный момент порядка 30 человек. Место нужно рассчитывать исходя из объемов документооборота и количества людей работающих. У меня проблем с местом не было я выделил 100 GB этого вполне хватит.
              В планах прикрутить WebDAV чтобы пользователь мог работать из файл-менеджера с системой.
          0
          Спасибо за статью, сейчас как раз озадачены этой проблемой.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое