Я использую LDAP + kerberos для аутентификации в Active Directory в Windows 2003 R2. Мои krb5.conf и ldap.conf кажутся правильными (согласно почти каждому образцу, который я нашел в сети). Я могу войти на хост как с паролем, так и с ключами ssh. Когда я запускаю getent passwd, все мои учетные записи пользователей ldap перечислены со всеми важными атрибутами. Когда я запускаю группу getent, отображаются все группы ldap и их gid, но нет членов группы. Если я запускаю ldapsearch и фильтрую любую группу, все члены будут перечислены с атрибутом «member». Значит, данные есть, просто они не анализируются должным образом. Казалось бы, я просто использую неправильное отображение в ldap.conf, но я его не вижу. Я пробовал несколько вариантов, и все они дали одинаковый результат.
Вот мой текущий ldap.conf:
host <ad-host1-ip> <ad-host2-ip>
base dc=my,dc=full,dc=dn
uri ldap://<ad-host1> ldap://<ad-host2>
ldap_version 3
binddn <mybinddn>
bindpw <mybindpw>
scope sub
bind_policy hard
nss_reconnect_tries 3
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 8
nss_reconnect_maxconntries 3
nss_map_objectclass posixAccount User
nss_map_objectclass posixGroup Group
nss_map_attribute uid sAMAccountName
nss_map_attribute gidNumber msSFU30GidNumber
nss_map_attribute uidNumber msSFU30UidNumber
nss_map_attribute cn cn
nss_map_attribute gecos displayName
nss_map_attribute homeDirectory msSFU30HomeDirectory
nss_map_attribute loginShell msSFU30LoginShell
nss_map_attribute uniqueMember member
pam_filter objectcategory=User
pam_login_attribute sAMAccountName
pam_member_attribute member
pam_password ad
И вот что интересно: эта конфигурация на 100% отлично работает на другом Linux-компьютере с другим дистрибутивом. Он не работает в дистрибутиве, на который я планирую перейти. Я установил из исходников версии pam_ldap
и nss_ldap
на новом поле, чтобы оно соответствовало старому, что устранило другую проблему, с которой я столкнулся с этой настройкой.
Другая важная информация: исходный ящик AD был Windows 2003. Это зеркало умерло ужасной аппаратной смертью, поэтому я пытаюсь добавить еще два сервера 2003-R2 в дерево зеркал и в конечном итоге отказаться от старого окна 2003. Новые коробки R2, похоже, правильно присоединились к лесу DC.
Что мне нужно сделать, чтобы группы работали? Я исчерпал все ресурсы, которые мог найти, и мне нужен другой ракурс. Любой вклад приветствуется.
Обновление статуса, 31.07.09
Мне удалось настроить свой файл конфигурации, чтобы получить полную информацию из AD, и производительность хорошая и быстрая. Я заменил старые копии pam_ldap
и nss_ldap
с текущими для дистрибутива, который я использую, так что он вернулся к стандартной установке из коробки. Вот моя текущая конфигурация:
host <ad-host1-ip> <ad-host2-ip>
base dc=my,dc=full,dc=dn
uri ldap://<ad-host1> ldap://<ad-host2>
ldap_version 3
binddn <mybinddn>
bindpw <mybindpw>
scope sub
bind_policy soft
nss_reconnect_tries 3
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 8
nss_reconnect_maxconntries 3
nss_connect_policy oneshot
referrals no
nss_map_objectclass posixAccount User
nss_map_objectclass posixGroup Group
nss_map_attribute uid sAMAccountName
nss_map_attribute gidNumber msSFU30GidNumber
nss_map_attribute uidNumber msSFU30UidNumber
nss_map_attribute cn cn
nss_map_attribute gecos displayName
nss_map_attribute homeDirectory msSFU30HomeDirectory
nss_map_attribute loginShell msSFU30LoginShell
nss_map_attribute uniqueMember member
pam_filter objectcategory=CN=Person,CN=Schema,CN=Configuration,DC=w2k,DC=cis,DC=ksu,DC=edu
pam_login_attribute sAMAccountName
pam_member_attribute member
pam_password ad
ssl off
tls_checkpeer no
sasl_secprops maxssf=0
Остается проблема, когда вы запустите groups
отображаются не все группы с подпиской. Некоторые есть (один или два), но не все. Членство в группах по-прежнему соблюдается, например, доступ к файлам и принтерам. getent group foo
по-прежнему показывает, что пользователь является членом группы foo. Таким образом, это похоже на ошибку презентации и не мешает нормальной работе.
Также кажется, что некоторые (я не определил точно, сколько) групповые поиски не разрешаются правильно, даже если группа указана. например, когда вы бежите "getent group bar
"ничего не возвращается, но если запустить"getent group|grep bar
" или "getent group|grep <bar_gid>
"вы видите, что он действительно указан, а имя вашей группы и gid верны.
Это все еще похоже на ошибку поиска или сопоставления LDAP, но я не могу понять, что это такое. Я чертовски ближе, чем ранее на этой неделе, но мне очень хотелось бы прояснить эту последнюю деталь.
На самом деле это довольно легко исправить, вам нужно добавить в ldap.conf следующее:
nss_schema rfc2307bis
Это указывает ему перечислять группы с DN, а не только с их CN. Также обратите внимание, что теперь вы можете использовать собственные атрибуты RFC2307 (gecos, uid и т. Д.), Если у вас есть DC 2003R2 или новее.
Это может быть тот же случай, с которым я столкнулся не так давно. Если в вашей группе AD слишком много участников, это вызывало такую ошибку в Linux (где-то на уровне getent или непосредственно перед этим - ldapsearch работал нормально).
Точнее, ошибка связана не с определенным количеством членов, а с количеством символов в «строке группы» (подумайте, строка из / etc / group) превышает 1023 символа. Я не разбирался, почему существует этот предел и почему 1024. Я только что создал вторую группу и переместил туда лишних участников.