使用 uid 而不是 cn 绑定到 slapd ldap 服务器

使用 uid 而不是 cn 绑定到 slapd ldap 服务器

我正在尝试使用 net_ldap ruby​​ gem 连接到运行 slapd 的 LDAP 服务器。我可以使用用户的 cn 执行绑定操作,但我需要使用 uid。

LDAP 服务器由 ClearOS 创建,并且未经修改,是标准配置。

这是我的红宝石代码:

  Net::LDAP.new(
    {
      host: "10.1.1.3",
      port: 389,
      base: "dc=company,dc=lan",
      auth: {
        method: :simple, 
        username: 'cn=Andrew Faraday,ou=Users,ou=Accounts,dc=company,dc=lan',
        password: "secret"
      }
    }
  ).bind

这很好用,但我真正想要的是使用 uid 而不是 cn 登录,例如

        username: 'uid=ajfaraday,ou=Users,ou=Accounts,dc=company,dc=lan',

以下是成功的 ldap 搜索的结果(经过大量删改):

dn: cn=Andrew Faraday,ou=Users,ou=Accounts,dc=edge,dc=lan

uidNumber: 2004

gidNumber: 63000

homeDirectory: /home/ajfaraday

clearAccountStatus: enabled

sambaAcctFlags: [U          ]

sambaDomainName: company

sambaBadPasswordCount: 0

sambaBadPasswordTime: 0

uid: ajfaraday

givenName: Andrew

sn: Faraday

objectClass: top

objectClass: posixAccount

objectClass: shadowAccount

objectClass: inetOrgPerson

objectClass: clearAccount

objectClass: sambaSamAccount

cn: Andrew Faraday

loginShell: /bin/bash

我花了几天时间研究 slap 配置文件、手册和有关这个问题的旧问题(大概有十多年了),但一无所获。我尝试了所有这些方法的变体:

  • 定义一条规则,为每个用户构建不同的 DN。
  • 允许对uid属性的授权权限。
  • 设置 authz-regexp 或 sasl-regexp 以将输入转换为查找 uid 的搜索字符串。

这些似乎都没有达到预期的效果。regexp 属性似乎根本没有起到任何作用。

答案1

LDAP两种身份验证方式:简单机制和SASL

您使用的简单机制要求您绑定到精确的专有名称。因此,如果您想使用用户名而不是全名,则必须DN按照以下LDIF说明更改:

dn: cn=Andrew Faraday, ou=Users, ou=Accounts, dc=company, dc=lan
changetype: modrdn
newrdn: uid=ajfaraday
deleteoldrdn: 0

但是,SASL机制更加灵活,您可以将任何登录名映射到LDAP条目。您还可以执行LDAP搜索以查找您的DN。例如,如果您添加重写规则:

dn: cn=config
changetype: modify
add: olcAuthzRegexp
olcAuthzRegexp: gidNumber=([0-9]*)\+uidNumber=([0-9]*),cn=peercred,cn=external,cn=auth
    ldap:///ou=Users,ou=Accounts,dc=edge,dc=lan??sub?(&(gidNumber=$1)(uidNumber=$2))

LDAP您可以通过 Unix 套接字进行本地身份验证:

ldapsearch -H ldapi:/// -Y EXTERNAL

评论: 你需要重新开始更改属性后服务器olcAuthzRegexp才会将其考虑在内。

相关内容