Я пытаюсь подключиться к серверу LDAP, на котором запущен slapd, с помощью рубинового камня net_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, руководствах и старых (например, более десяти лет) вопросах по этому поводу, и у меня ничего не вышло. Я пробовал варианты по всем этим вещам:
Похоже, что все это не дает желаемого эффекта. Атрибуты regexp вообще ничего не делают.
В 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
атрибут, чтобы это было принято во внимание.