Настройка OpenLDAP в качестве прокси-сервера Active Directory

Настройка OpenLDAP в качестве прокси-сервера Active Directory

Мы пытаемся настроить сервер Active Directory для аутентификации в масштабах всей компании.

Некоторые из серверов, которые должны проходить аутентификацию в AD, размещены в DMZ, поэтому мы решили использовать LDAP-сервер в качестве прокси-сервера, чтобы только 1 сервер в DMZ мог подключаться к локальной сети, где размещен сервер AD.

После некоторого гугления настройка slapd не составила труда (см. slapd.conf ниже), и, похоже, он работал при использовании инструмента ldapsearch, поэтому мы попробовали использовать его в apache2 htaccess для аутентификации пользователя через LDAP-прокси.

И вот тут возникает проблема: мы обнаружили, что имя пользователя в AD хранится в атрибуте «sAMAccountName», поэтому мы настроили его в .htaccess (см. ниже), но вход в систему не работал.

В системном журнале мы обнаружили, что фильтр для ldapsearch не был (таким, каким он должен быть) '(&(objectClass=*)(sAMAccountName=authtest01))' но '(&(objectClass=*)(?=неопределено))' что, как мы выяснили, является способом slapd показать, что атрибут не существует или значение для этого атрибута синтаксически неверно.

Мы подумали о недостающей схеме и нашлиmicrosoft.схема(и .std / .ext из него) и попытались включить их в slapd.conf. Что не работает. Мы не нашли рабочих схем, поэтому мы просто выбрали часть о sAMAccountName и построили microsoft.minimal.schema (см. ниже), которую мы включили. Теперь мы получаем более точный журнал в syslog:

Jun 16 13:32:04 breauthsrv01 slapd[21229]: get_ava: illegal value for attributeType sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH base="ou=xxx,dc=int,dc=xxx,dc=de" scope=2 deref=3 filter="(&(objectClass=\*)(?sAMAccountName=authtest01))"
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SRCH attr=sAMAccountName
Jun 16 13:32:04 breauthsrv01 slapd[21229]: conn=0 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=

Хотя использование нашего Apache htaccess напрямую с AD через LDAP работает. У кого-нибудь есть рабочая настройка? Спасибо за любую помощь заранее:

slapd.conf:

allow bind_v2
include         /etc/ldap/schema/core.schema
...
include         /etc/ldap/schema/microsoft.minimal.schema
...
backend         ldap
database        ldap

suffix "ou=xxx,dc=int,dc=xxx,dc=de"
uri "ldap://80.156.177.161:389"
acl-bind bindmethod=simple binddn="CN=authtest01,ou=GPO-Test,ou=xxx,dc=int,dc=xxx,dc=de" credentials=xxxxx

.htaccess:

AuthBasicProvider ldap
AuthType basic
AuthName "AuthTest"
AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?sAMAccountName?sub"
AuthzLDAPAuthoritative On
AuthLDAPGroupAttribute member
AuthLDAPBindDN  CN=authtest02,OU=GPO-Test,OU=xxx,DC=int,DC=xxx,DC=de
AuthLDAPBindPassword test123
Require valid-user

microsoft.минимальная.схема:

attributetype ( 1.2.840.113556.1.4.221
      NAME 'sAMAccountName'
      SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
      SINGLE-VALUE )

решение1

Вам необходимо добавить сопоставления в файл slapd.conf:

moduleload rwm
...
overlay rwm
rwm-map attribute uid sAMAccountName
rwm-map objectClass posixGroup group 
rwm-map objectClass posixAccount person
rwm-map objectClass memberUid member

Затем вы можете выполнить поискuidатрибут вместоsAMAccountNameатрибут в вашем файле .htaccess:

AuthLDAPURL "ldap://breauthsrv01.xxx.de:389/OU=xxx,DC=int,DC=xxx,DC=de?uid?sub"

решение2

Вы видите это сообщение об ошибке:

get_ava: недопустимое значение для attributeType sAMAccountName

Что вызвано тем, что в вашем определении атрибута sAMAccountNameотсутствует microsoft.minimal.schemaправило сопоставления. Проще говоря, определения схемы OpenLDAP позволяют вам указать, какие типы поиска разрешены (присутствие, точное совпадение, совпадение подстроки и т. д.), а в этом определении нет ни одного.

Попробуй это:

 attributetype ( 1.2.840.113556.1.4.221
   NAME 'sAMAccountName'
   EQUALITY caseIgnoreMatch
   SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
   SINGLE-VALUE )

решение3

Ответ Джонатана указал мне правильное направление, избавив меня от:

additional info: sAMAccountName: attribute type undefined

проблема. Но я понял, что вам нужно определить этот атрибут как допустимое значение для записи человека, и вам нужно дать каждому человеку objectClass, которому разрешено иметь этот атрибут. Так же, как и все атрибуты, которые вы можете дать inetOrgPerson.

Мой файл microsoft.minimal.schema теперь выглядит так:

attributetype ( 1.2.840.113556.1.4.221
          NAME 'sAMAccountName'
          SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
          SINGLE-VALUE )

attributetype ( 1.2.840.113556.1.4.146
          NAME 'objectSid'
          SYNTAX '1.3.6.1.4.1.1466.115.121.1.40'
          SINGLE-VALUE )

objectclass ( 1.2.840.113556.1.5.6
        NAME 'securityPrincipal'
        SUP top
        AUXILIARY
        MUST (objectSid $ sAMAccountName )
        MAY () )

 #            MAY (nTSecurityDescriptor $ securityIdentifier $ supplementalCredentials $
 #                rid $ sAMAccountType $ sIDHistory $ altSecurityIdentities $ tokenGroups $
 #                    tokenGroupsNoGCAcceptable $ accountNameHistory  $
 #                                              tokenGroupsGlobalAndUniversal))

Я заменяю атрибуты MS-optional ничем, чтобы мне не пришлось их определять.

Пример записи пользователя выглядит так:

dn: uid=user2,ou=example,dc=aa,dc=ad,dc=example,dc=gov                                                                          
uid: user2                                                                                                              
sAMAccountName: user2                                                                                                   
objectSid: user2                                                                                                        
cn: User Two                                                                                                            
displayName: User Two                                                                                                   
givenName: User2                                                                                                        
sn: One                                                                                                                 
objectClass: inetOrgPerson                                                                                              
objectClass: securityPrincipal                                                                                          
mail: [email protected]                                                                                                 
 # password from slappasswd is 'user2'                                                                                   
userPassword: {SSHA}sjB5fmIIPTrUUammtmonP+6DdC93+P4L    

Связанный контент