Автор Тема: OpenLdap проксирование на два AD ldap.  (Прочитано 20758 раз)

VitaliyH

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Доброго времени суток !
Ищу совета, так как в OpenLdap не силен. У меня есть плиложение в котором надо настроить ldap авторизацию для пользователей с 2-х разных ldap серверов. В настройках приложения можно указать только 1 ldap сервер, в виде:
        host: 'mydomain.com'
        port: 636
        uid: 'sAMAccountName'
        method: 'ssl'
        bind_dn: 'user@mydomain.com' или CN= OU= DC=
        password: 'password'
        base: 'DC=mydomain,DC=com'

Соответственно у меня возникли следующие вопросы, возможно ли  в openldap, в режиме прокси, настроить следующую схему:
1. Создать пользователя для приложения, cn=example ou=example dc=example (для настройки приложения).
2. Настроить проксирование на два КД, и представить для приложения как ldap сервер с единой базой юзеров. В виде base: dc=mydomain,dc=com?

Может у кого-то есть опыт решения подобной задачи? Буду рад вашим советам.
« Последнее редактирование: 06 Май 2015, 18:51:48 от VitaliyH »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 456
    • Просмотр профиля
Re: OpenLdap проксирование на два КД.
« Ответ #1 : 06 Май 2015, 00:53:21 »
Здравствуйте, Виталий!

То, что Вы хотите сделать, называется метакаталогом и настраивается с помощью механизма meta. Механизм ldap немного для других целей, например, к реальной БД (mdb или bdb) "приклеить" ветку из удалённого каталога.

Посмотрите статью http://blog.oddbit.com/2010/02/16/merging-directories-with-openldap-meta/ . В принципе, ничего особо сложного нет, разберётесь, если что-то не получится -- пишите.

Егор

Да, а что такое КД ?

VitaliyH

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: OpenLdap проксирование на два КД.
« Ответ #2 : 06 Май 2015, 11:00:32 »
Здравствуйте, Егор!

Спасибо за ваш ответ. На сколько я понял, статья написана по CentOS(Fedora etc.). Похоже, что мой конфиг slapd.conf (который я скопировал из директории /usr/share/openldap-servers/slapd.conf.obsolete) отличается от того который был у автора статьи. Такого комментария в конфиг файле у меня нет :
Цитировать
Now, we need to load these configs into the main slapd configuration file. Open slapd.conf, and look for the following comment:

#######################################################################
# ldbm and/or bdb database definitions
#######################################################################

Remove anything below this comment and then add the following lines:
Вот что я оставил в своем конфиге:
# Features to permit
allow bind_v2
# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile         /var/run/slapd/slapd.pid
# List of arguments that were passed to the server
argsfile        /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
loglevel        1
Надо ли еще что-то оставить?
Так же интересует вопрос, достаточно ли для настройки "slapd-meta" пакета из дебиан репозитория "slapd и ldap-utils"?

Далее по понфигу, тоже не все ясно.

Цитировать
We define one backend like this in /etc/openldap/slapd-be-1.conf:
database        ldif
suffix          "ou=backend1" (название группы в произвольном порядке или как в backend каталоге? т.е. мы задаем или указываем имя группы ?)
directory       "/var/lib/ldap/backend1" (тут понятно)
rootdn          "cn=ldif-admin,ou=backend1" (ldif-admin-должен быть такой юзер в удаленном каталоге? ou=backend1 соответствует "ou" из директивы suffix?)
rootpw          "LDIF"

Цитировать
Populate backends with sample data
We need to populate the directories with something to query.
Put this in backend1.ldif:

dn: ou=backend1 (тоже непонятно, какие ou/cn создаются, какие указываются)
objectClass: top
objectClass: organizationalUnit
ou: backend1

dn: ou=people,ou=backend1
objectClass: top
objectClass: organizationalUnit
ou: people

dn: cn=user1,ou=people,ou=backend1
objectClass: inetOrgPerson
cn: user1
givenName: user1
sn: Somebodyson
mail: user1@example.com
дальше также... содержание статьи с моим elementary уровнем чатается крайне тяжело и трудно понять такие вещи как "These will represent the directories you're trying to merge" т.е. представлять, куда, кому?

С уважением, Виталий.

P.S. кд контроллер домена  :)
« Последнее редактирование: 06 Май 2015, 18:52:52 от VitaliyH »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 456
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #3 : 07 Май 2015, 06:12:47 »
Здравствуйте, Виталий!

У меня под рукой нет двух AD-контроллеров, есть один, и тот на samba4 =) . Поэтому я сделал метакаталог, который два раза подключается к одному и тому же серверу (но к разным веткам). slapd.conf:
include         /etc/openldap/schema/core.schema
moduleload      back_ldap.la
moduleload      back_meta.la

database        meta
suffix          "dc=example,dc=com"
bind-timeout    1000000

uri             "ldap://192.168.0.1/ou=FirstDC-Users,dc=example,dc=com"
suffixmassage   "ou=FirstDC-Users,dc=example,dc=com" "CN=Users,DC=mycompany,DC=ru"
idassert-bind   bindmethod=simple
                binddn="CN=Administrator,CN=Users,DC=mycompany,DC=ru"
                credentials="somePassword"
                mode=self
idassert-authzFrom     "dn:*"

uri             "ldap://192.168.0.1/ou=SecondDC-Users,dc=example,dc=com"
suffixmassage   "ou=SecondDC-Users,dc=example,dc=com" "CN=Computers,DC=mycompany,DC=ru"
idassert-bind   bindmethod=simple
                binddn="CN=Administrator,CN=Users,DC=mycompany,DC=ru"
                credentials="somePassword"
                mode=self
idassert-authzFrom     "dn:*"
Вам, соответственно, нужно будет подключаться к разным серверам и указывать нужные параметры подлючения.

Анонимные запросы в метакаталог (используются параметры подключения из slapd.conf):
# ldapsearch -x -LLL -H ldap://127.0.0.1 -b dc=example,dc=com -s one dn
dn: ou=FirstDC-Users,dc=example,dc=com

dn: ou=SecondDC-Users,dc=example,dc=com

# ldapsearch -x -LLL -H ldap://127.0.0.1 -b dc=example,dc=com -o ldif-wrap=no 'samaccountname=egor' | perl -MMIME::Base64 -wpe 's/^([^:]+):: (.+)$/"$1: " . decode_base64($2)/e'
dn: cn=Левинца Егор,ou=FirstDC-Users,dc=example,dc=com
sn: Левинца
givenName: Егор
INSTANCETYPE: 4
WHENCREATED: 20131216040219.0Z
...

Запросы в метакаталог с аутентификацией:
# ldapsearch -x -LLL -H ldap://127.0.0.1 -b dc=example,dc=com -D "CN=Левинца Егор,ou=FirstDC-Users,dc=example,dc=com" -W -s one dn
Enter LDAP Password:
dn: ou=FirstDC-Users,dc=example,dc=com

# ldapsearch -x -LLL -H ldap://127.0.0.1 -b dc=example,dc=com -D "CN=Левинца Егор,ou=FirstDC-Users,dc=example,dc=com" -W -o ldif-wrap=no 'samaccountname=egor' | \
perl -MMIME::Base64 -wpe 's/^([^:]+):: (.+)$/"$1: " . decode_base64($2)/e'
Enter LDAP Password:
dn: cn=Левинца Егор,ou=FirstDC-Users,dc=example,dc=com
sn: Левинца
givenName: Егор
INSTANCETYPE: 4
WHENCREATED: 20131216040219.0Z
...

Обратите внимание: DN аутентификации нужно указывать с учётом преобразования suffixmassage.

Егор

VitaliyH

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #4 : 07 Май 2015, 22:06:47 »
Здравствуйте, Егор!
Спасибо Вам большое, все получилось. :)

VitaliyH

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #5 : 14 Октябрь 2015, 15:37:45 »
Здравствуйте, Егор!
Скажите пожалуйста. Сейчас появилась такая ситуация, что пользователи которых переносят в другой юнит в AD не могут авторизоваться, но новые пользователи созданные в этом же юните таких проблем не имеют. Могу предположить, что путь к старым учеткам как-то кэшируется в openldap, или вообще сохраняется. Можно ли это как-то поправить ?

Спасибо.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 456
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #6 : 15 Октябрь 2015, 07:26:31 »
Здравствуйте, Виталий! Сомнительно, чтобы механизм meta OpenLDAP что-то кэшировал, ели это не настраивалось намеренно. Мне кажется, что-то с областью видимости записей пользователей. Покажите, пожалуйста, предыдущий и новый DN записей пользователя после переноса, а также базовый DN поиска, настроенный в параметре uri механизма meta. Вообще, лучше пришлите мне в личку свой slapd.conf, тогда можно будет сказать что-то более определённое.

Егор

VitaliyH

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #7 : 19 Октябрь 2015, 11:56:10 »
Здравствуйте, Егор!

Отправил Вам  slapd.conf.

Спасибо, Виталий.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 456
    • Просмотр профиля
Re: OpenLdap проксирование на два AD ldap.
« Ответ #8 : 22 Октябрь 2015, 01:45:47 »
Здравствуйте, Виталий! Я ответил Вам в личку, не знаю, заметили ли Вы или нет, так что продублирую сюда.

Ваш slapd.conf я посмотрел. Пока ничего определённого сказать не могу. Пришлите мне ldif-ы записей пользователя до и после переноса, нужно посмотреть, что изменилось. На компьютере с OpenLDAP выполните:

ldapsearch -x -LLL -b dc=IN -o ldif-wrap=no 'samaccountname=userLogin' | perl -MMIME::Base64 -wpe 's/^([^:]+):: (.+)$/"$1: " . decode_base64($2)/e'
(вместо userLogin нужно подставить реальный логин). Эту команду нужно выполнить до и после переноса и два вывода прислать в личку.

Егор