【问题标题】:Ldap connection with Openstack could not find user : admin与 Openstack 的 Ldap 连接找不到用户:admin
【发布时间】:2017-06-01 12:39:42
【问题描述】:

我正在使用 openstack 配置 Ldap,但是当 openstack 向我的 ldap 服务器发送请求时,出现了一个错误,例如找不到用户:admin。日志如下。 Ldap 服务器应该将其信息发送到我的 openstack 环境。以下警告重要吗?

ldap_build_search_req ATTRS: cn userPassword enabled sn mail 说明

我该如何处理这种情况?

ldap_url_parse_ext(ldap://localhost/)
ldap_init: trying /etc/ldap/ldap.conf
ldap_init: using /etc/ldap/ldap.conf
ldap_init: HOME env is /var/lib/keystone
ldap_init: trying /var/lib/keystone/ldaprc
ldap_init: trying /var/lib/keystone/.ldaprc
ldap_init: trying ldaprc
ldap_init: LDAPCONF env is NULL
ldap_create
ldap_url_parse_ext(ldap://10.0.0.23)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 10.0.0.23:389
ldap_new_socket: 18
ldap_prepare_socket: 18
ldap_connect_to_host: Trying 10.0.0.23:389
ldap_pvt_connect: fd: 18 tm: -1 async: 0
attempting to connect:
connect success
ldap_open_defconn: successful
ldap_send_server_request
ldap_result ld 0x7f0e31c9b150 msgid 1
wait4msg ld 0x7f0e31c9b150 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f0e31c9b150 msgid 1 all 1
** ld 0x7f0e31c9b150 Connections:
* host: 10.0.0.23  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Thu Jun  1 12:11:40 2017


** ld 0x7f0e31c9b150 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f0e31c9b150 request count 1 (abandoned 0)
** ld 0x7f0e31c9b150 Response Queue:
   Empty
  ld 0x7f0e31c9b150 response count 0
ldap_chkResponseList ld 0x7f0e31c9b150 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f0e31c9b150 NULL
ldap_int_select
read1msg: ld 0x7f0e31c9b150 msgid 1 all 1
read1msg: ld 0x7f0e31c9b150 msgid 1 message type bind
read1msg: ld 0x7f0e31c9b150 0 new referrals
read1msg:  mark request completed, ld 0x7f0e31c9b150 msgid 1
request done: ld 0x7f0e31c9b150 msgid 1
res_errno: 0, res_error: <>, res_matched: <>
ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(&(sn=admin)(objectClass=organizationalUnit)(cn=*))"
put_filter: AND
put_filter_list "(sn=admin)(objectClass=organizationalUnit)(cn=*)"
put_filter: "(sn=admin)"
put_filter: simple
put_simple_filter: "sn=admin"
put_filter: "(objectClass=organizationalUnit)"
put_filter: simple
put_simple_filter: "objectClass=organizationalUnit"
put_filter: "(cn=*)"
put_filter: simple
put_simple_filter: "cn=*"
ldap_build_search_req ATTRS: cn userPassword enabled sn mail description
ldap_send_initial_request
ldap_send_server_request
ldap_result ld 0x7f0e31c9b150 msgid 2
wait4msg ld 0x7f0e31c9b150 msgid 2 (infinite timeout)
wait4msg continue ld 0x7f0e31c9b150 msgid 2 all 1
** ld 0x7f0e31c9b150 Connections:
* host: 10.0.0.23  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Thu Jun  1 12:11:40 2017


** ld 0x7f0e31c9b150 Outstanding Requests:
 * msgid 2,  origid 2, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f0e31c9b150 request count 1 (abandoned 0)
** ld 0x7f0e31c9b150 Response Queue:
   Empty
  ld 0x7f0e31c9b150 response count 0
ldap_chkResponseList ld 0x7f0e31c9b150 msgid 2 all 1
ldap_chkResponseList returns ld 0x7f0e31c9b150 NULL
ldap_int_select
read1msg: ld 0x7f0e31c9b150 msgid 2 all 1
read1msg: ld 0x7f0e31c9b150 msgid 2 message type search-result
read1msg: ld 0x7f0e31c9b150 0 new referrals
read1msg:  mark request completed, ld 0x7f0e31c9b150 msgid 2
request done: ld 0x7f0e31c9b150 msgid 2
res_errno: 0, res_error: <>, res_matched: <>
ldap_free_request (origid 2, msgid 2)
ldap_parse_result
ldap_msgfree
2017-06-01 12:11:40.512893 2017-06-01 12:11:40.512 5767 WARNING keystone.auth.plugins.core [req-07b3f423-d9fd-419a-836c-2d59fb53ac9d - - - - -] Could not find user: admin
2017-06-01 12:11:40.513608 2017-06-01 12:11:40.513 5767 WARNING keystone.common.wsgi [req-07b3f423-d9fd-419a-836c-2d59fb53ac9d - - - - -] Authorization failed. Could not find user: admin (Disable insecure_debug mode to suppress these det$

我的 keystone.ldap.conf 如下所示

[identity]
driver = keystone.identity.backends.ldap.Identity
[assignment]
driver = keystone.assignment.backends.sql.Assignment
[ldap]
url = ldap://10.0.0.23
suffix = dc=openstack,dc=org
user = cn=admin,dc=openstack,dc=org
password = toor
user_tree_dn = ou=Users,dc=openstack,dc=org
user_objectclass = organizationalUnit
group_tree_dn = ou=Groups,dc=openstack,dc=org
group_objectclass = organizationalUnit
use_dumb_member = True
dumb_member = keystone_ldap
page_size = 0
alias_dereferencing = always
query_scope = sub

编辑:Ldap 结构

# openstack.org
dn: dc=openstack,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: openstack
dc: openstack

# admin, openstack.org
dn: cn=admin,dc=openstack,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# Groups, openstack.org
dn: ou=Groups,dc=openstack,dc=org
objectClass: top
objectClass: organizationalUnit
ou: groups

# Users, openstack.org
dn: ou=Users,dc=openstack,dc=org
objectClass: top
objectClass: organizationalUnit
ou: users

编辑: 在 keystone.conf 中,我没有添加任何 sn 属性,但 ldap 总是搜索 sn=admin 作为过滤器。

filter="(&(sn=admin)(objectClass=inetOrgPerson)(cn=*))"

我还添加了 ldap admin 作为 keystone.conf 的用户字段。 Ldap 在 user_tree 中搜索此管理员用户,但 admin 不包括在 user_tree 中。如果有人知道keystone ldap的工作机制,那么问题就很容易解决了。

【问题讨论】:

  • 我在您提供的新信息之后对我的答案添加了评论

标签: ldap openstack openldap keystone


【解决方案1】:

问题是你的 user_objectclass = organizationalUnit ,我不认为用户是 ou ,更可能是 inetOrgPersonPerson 或引用用户而不是组织的东西

它会生成一个过滤器,例如:"(sn=admin)(objectClass=organizationalUnit)",它永远不会找到您的条目。检查用户 admin 的 objectclass 以使用正确的值进行更改。

编辑:根据您新发布的信息:尝试:user_objectclass = organizationalRole

如果组没有organizationalUnit objectClass,您将遇到同样的问题。

编辑 2:管理员用户也不位于由选项 user_tree_dn 设置的子树中

如果您希望管理员用户成为用户选择的一部分,请尝试以下配置:

[ldap]
url = ldap://10.0.0.23
suffix = dc=openstack,dc=org
user = cn=admin,dc=openstack,dc=org
password = toor
user_tree_dn = dc=openstack,dc=org
user_filter = (|(cn=admin)(objectClass=inetOrgPerson))
group_tree_dn = ou=Groups,dc=openstack,dc=org
group_objectclass = organizationalUnit
use_dumb_member = True
dumb_member = keystone_ldap
page_size = 0
alias_dereferencing = always
query_scope = sub

我放置了一个过滤器来匹配admin 条目和未来用户条目。如果这些条目不是 inetOrgPerson 而是另一个 objectClass,请随时进行相应修改。

注意:子树 dc=openstack,dc=org 下的任何 inetOrgPerson 条目都将被视为用户。

有关 Openstack 与 ldap 集成的更多信息,请参阅this doc

【讨论】:

  • 错误仍然存​​在
  • 能否提供新配置的ldap目录的日志?查看用于查找管理员用户的过滤器。在之前的日志中,过滤器包含(sn=admin),您是否也可以尝试将sn=admin 属性添加到您的条目中?
  • @setr 您可以尝试将属性sn 设置为admin 并重试吗?
  • @setr 你可以尝试使用带有过滤器"(&amp;(sn=admin)(objectClass=organizationalRole)(cn=*))" 的openstack 使用的凭据进行ldapsearch 吗?你得到结果了吗?
  • ldapsearch -x -b "dc=openstack,dc=org" "(&(sn=admin)(objectClass=organizationalRole)(cn=*))" # 扩展 LDIF # # LDAPv3 # base with scope subtree # filter: (&(sn=admin)(objectClass=organizationalRole)(cn=*)) # requesting: ALL # # search result search: 2 result: 0 Success # numResponses : 1
【解决方案2】:

根据以下源码keystone添加过滤器

filter="(&(sn=admin)(objectClass=inetOrgPerson)(cn=*))"

如果您不指定 user_name_attribute。制作

user_name_attribute=cn

https://github.com/openstack/keystone/blob/master/keystone/conf/ldap.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多