Автор Тема: Доступ стороннему приложению для аутентификации пользователей  (Прочитано 18825 раз)

Chiron

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Доброго времени суток!

Пытаюсь заставить сервис стримминга ampache к openLDAP.
До этого с openLDAP не работал.

Сделал ou=apps в дереве и cn=ampache, задал ему пароль.

ACL:
olcAccess: {0}to *
           by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
           by * none
olcAccess: {1}to dn.sub="dc=domain,dc=ru" attrs=userPassword
           by self write
           by anonymous auth
           by * none
olcAccess: {2}to dn.sub="ou=People,dc=domain,dc=ru"
            by dn.exact="cn=ampache,ou=apps,dc=domain,dc=ru" read
olcAddContentAcl: TRUE

ldapsearch с debug-ом:

# ldapsearch -D "cn=ampache,ou=apps,dc=domain,dc=ru" -x -W -b "ou=People,dc=domain,dc=ru"  "(objectclass=*)" -d 25
ldap_create
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP localhost:389
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 127.0.0.1:389
ldap_pvt_connect: fd: 3 tm: -1 async: 0
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_dump: buf=0x9933dc8 ptr=0x9933dc8 end=0x9933e07 len=63
  0000:  30 3d 02 01 01 60 38 02  01 03 04 25 63 6e 3d 61   0=...`8....%cn=a
  0010:  6d 70 61 63 68 65 2c 6f  75 3d 61 70 70 73 2c 64   mpache,ou=apps,d
  0020:  63 3d 6c 69 6e 75 78 2d  6f 69 64 2c 64 63 3d 72   c=domain,dc=r
  0030:  75 80 0c 61 6d 70 61 63  68 65 5f 70 61 73 73      u..ampache_pass
ber_scanf fmt ({i) ber:
ber_dump: buf=0x9933dc8 ptr=0x9933dcd end=0x9933e07 len=58
  0000:  60 38 02 01 03 04 25 63  6e 3d 61 6d 70 61 63 68   `8....%cn=ampach
  0010:  65 2c 6f 75 3d 61 70 70  73 2c 64 63 3d 6c 69 6e   e,ou=apps,dc=lin
  0020:  75 78 2d 6f 69 64 2c 64  63 3d 72 75 80 0c 61 6d   ux-oid,dc=ru..am
  0030:  70 61 63 68 65 5f 70 61  73 73                     pache_pass
ber_flush2: 63 bytes to sd 3
  0000:  30 3d 02 01 01 60 38 02  01 03 04 25 63 6e 3d 61   0=...`8....%cn=a
  0010:  6d 70 61 63 68 65 2c 6f  75 3d 61 70 70 73 2c 64   mpache,ou=apps,d
  0020:  63 3d 6c 69 6e 75 78 2d  6f 69 64 2c 64 63 3d 72   c=domain,dc=r
  0030:  75 80 0c 61 6d 70 61 63  68 65 5f 70 61 73 73      u..ampache_pass
ldap_result ld 0x992b0c8 msgid 1
wait4msg ld 0x992b0c8 msgid 1 (infinite timeout)
wait4msg continue ld 0x992b0c8 msgid 1 all 1
** ld 0x992b0c8 Connections:
* host: localhost  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Thu Aug 21 18:01:06 2014


** ld 0x992b0c8 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x992b0c8 request count 1 (abandoned 0)
** ld 0x992b0c8 Response Queue:
   Empty
  ld 0x992b0c8 response count 0
ldap_chkResponseList ld 0x992b0c8 msgid 1 all 1
ldap_chkResponseList returns ld 0x992b0c8 NULL
ldap_int_select
read1msg: ld 0x992b0c8 msgid 1 all 1
ber_get_next
ber_get_next: tag 0x30 len 12 contents:
ber_dump: buf=0x9934e30 ptr=0x9934e30 end=0x9934e3c len=12
  0000:  02 01 01 61 07 0a 01 31  04 00 04 00               ...a...1....
read1msg: ld 0x992b0c8 msgid 1 message type bind
ber_scanf fmt ({eAA) ber:
ber_dump: buf=0x9934e30 ptr=0x9934e33 end=0x9934e3c len=9
  0000:  61 07 0a 01 31 04 00 04  00                        a...1....
read1msg: ld 0x992b0c8 0 new referrals
read1msg:  mark request completed, ld 0x992b0c8 msgid 1
request done: ld 0x992b0c8 msgid 1
res_errno: 49, res_error: <>, res_matched: <>
ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ber_scanf fmt ({iAA) ber:
ber_dump: buf=0x9934e30 ptr=0x9934e33 end=0x9934e3c len=9
  0000:  61 07 0a 01 31 04 00 04  00                        a...1....
ber_scanf fmt (}) ber:
ber_dump: buf=0x9934e30 ptr=0x9934e3c end=0x9934e3c len=0

ldap_msgfree
ldap_err2string
ldap_bind: Invalid credentials (49)

Пароль точно верный. Если использовать "cn=Manager,dc=domain,dc=ru", то авторизация проходит, но это как-то не правильно :)

Подскажите, в чем ошибка, и как вообще правильно прикручивать внешние приложения для авторизации пользователей из каталога?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте!
olcAccess: {0}to *
           by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
           by * none
olcAccess: {1}to dn.sub="dc=domain,dc=ru" attrs=userPassword
           by self write
           by anonymous auth
           by * none
olcAccess: {2}to dn.sub="ou=People,dc=domain,dc=ru"
            by dn.exact="cn=ampache,ou=apps,dc=domain,dc=ru" read
olcAddContentAcl: TRUE
Первое правило очень общее -- шаблон * совпадает с любым объектом в каталоге. После рассмотрения этого правила оценка ACL завершается и до других дело попросту не доходит. В самом же первом правиле никому, кроме root, никаких прав не предоставляется, поэтому никто в каталог попасть не может. Вывод: либо переместите самое общее правило в самый конец:
olcAccess: {0}to dn.sub="dc=domain,dc=ru" attrs=userPassword
           by self write
           by anonymous auth
           by * none
olcAccess: {1}to dn.sub="ou=People,dc=domain,dc=ru"
            by dn.exact="cn=ampache,ou=apps,dc=domain,dc=ru" read
olcAccess: {2}to *
           by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
           by * none
либо переформулируйте первое правило, чтобы оценка ACL на нём не прекращалась:
olcAccess: {0}to *
           by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
           by * break
olcAccess: {1}to dn.sub="dc=domain,dc=ru" attrs=userPassword
           by self write
           by anonymous auth
           by * none
olcAccess: {2}to dn.sub="ou=People,dc=domain,dc=ru"
            by dn.exact="cn=ampache,ou=apps,dc=domain,dc=ru" read

Пароль точно верный. Если использовать "cn=Manager,dc=domain,dc=ru", то авторизация проходит, но это как-то не правильно :)
На запись, указанную в настройках базы данных как rootDN, ACL не распространяются.

Подскажите, в чем ошибка, и как вообще правильно прикручивать внешние приложения для авторизации пользователей из каталога?
Каждое приложение интегрируется по-своему. Более-менее общее правило: сначала ищется запись, которой соответствует вводимое имя пользователя (логин), а потом производится попытка аутентифицироваться в каталоге от имени этой записи. Если удалось -- пользователь прошёл аутентиифкацию в приложении, нет -- нет.

Егор

Chiron

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Спасибо огромное!

Все получилось. Успехов вам в развитии ресурса!

 

Эта страница

Содержание

Новости:
Форум проекта Pro-LDAP.ru
OpenLDAP 2.4 Руководство

Содержание

Введение в службы каталогов OpenLDAPБыстрое развёртывание и начало работыОбщая картина - варианты конфигурацииСборка и установка OpenLDAPНастройка slapd

 

Конфигурационный файл slapdЗапуск slapdКонтроль доступаОграниченияИнструментыМеханизмы манипуляции даннымиНаложенияСпецификация схемы

 

БезопасностьSASLTLSРаспределённая служба каталоговРепликацияОбслуживаниеМониторингПроизводительностьУстранение неполадок
Перевод официального руководства OpenLDAP 2.4 Admin Guide
Полное содержание здесь
LDAP для учёных-ракетчиков

Содержание

О книгеКонцепции LDAPОбъекты LDAPУстановка LDAPПримерыНастройкаРепликация и отсылкиLDIF и DSMLПротоколLDAP API

 

HOWTOНеполадкиПроизводительностьИнструменты LDAPБезопасностьЗаметкиРесурсы LDAPRFC и X.500ГлоссарийОбъекты
Перевод "LDAP for Rocket Scientists"
Полное содержание здесь
Ресурсы

Книги

Руководство OpenLDAP 2.4LDAP для учёных-ракетчиков

Другие

СтатьиТермины LDAPman-страницы OpenLDAP 2.4Список RFCКлиенты LDAPФайлы наборов схемы
Полезные ресурсы
Форум

 

Разделы форумаНепрочитанные сообщенияПоследние сообщения
Форум проекта
Главная

Pro-LDAP.ru

О проектеНовости проектаУчастникиСтаньте участником!Сообщите об ошибке!Об авторских правахСоглашения проекта
Присоединяйсь!