Имеется разветвленное дерево AD. Имеется ряд сервисов/серверов которым нужен доступ к AD по протоколу LDAP через LDAP proxy. Особого доверия к серверам нет. Все ограничения должны быть реализованы на LDAP proxy: Сервера должны видеть минимальное количество полей/атрибутов, и только в только в тех объектах, которые необходимы.
1. Ограничить возможность читать объекты:
1.1 Только пользователей, состоящих в определенной группе;
1.2 Если 1.1 реализовать не возможно, то только пользователей, находящихся в определенном месте дерева (в определенном OU);
1.3 Также возможность считывать все родительские объекты, в которых находятся объекты из пункта 1;
1.4 Если 1.3 реализовать не возможно, то: Все объекты типа DC и OU;
2. Ограничить возможность считывания атрибутов объекта;
3. Разрешить возможность проверки пароля пользователя (авторизация/бинд) только тем пользователям, которые соответствуют критериям пунктов 1.1 или 1.2;
Я развернул LDAP proxy - Debian, OpenLDAP:
uname -a
Linux ldap-proxy.example.com 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 GNU/Linux
apt list slapd
slapd/oldstable,now 2.4.44+dfsg-5+deb9u2 amd64 [installed]
slapd -V
@(#) $OpenLDAP: slapd (May 23 2018 04:25:19) $
Debian OpenLDAP Maintainers <pkg-openldap-devel@lists.alioth.debian.org>
Удалось реализовать пункты 1.2, 1.4 и 2:
pidfile /var/run/slapd/slapd.pid
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/microsoftattributetype.schema
moduleload back_ldap.la
database ldap
uri "ldap://1.2.3.4"
readonly on
suffix "dc=example,dc=com"
rebind-as-user
access to dn.children="OU=Office,OU=Company,DC=example,DC=com"
filter=(objectClass=organizationalPerson)
attrs=entry,sAMAccountName,sn,givenName,mail
by users read
by * none
access to
filter=(objectClass=organizationalUnit)
by users read
by * none
Но никак не удается закрыть следующие вопросы:
1. К сожалению в выборку попадают не только объекты типа User, но и типа Computer. Пробовал добавить в начало следующее правило:
access to
filter=(objectClass=computer)
by * none
- не помогло. Подскажите пожалуйста, как удалить из выборки компьютеры?
2. Пытался ограничить по членству в группе. Использовал следующие фильтры:
access to
filter=(&(objectClass=organizationalPerson)(memberOf=cn=Role_N1,ou=Groups,ou=Office,ou=Company,dc=example,dc=com))
by users read
by * none
access to
filter=(objectClass=organizationalUnit)
by users read
by * none
и результат - только пустые OU. Причем если использовать фильтр в LDAP browser - все Ок. Подскажите, как можно построить отбор по членству в группе (полагаю, что если решить этот вопрос, то вопрос 1. станет не актуальным)?
3. К сожалению, никак не удается ограничить возможность проверки пароля. Например в LDAP Browser, в параметра подключения к LDAP proxy, я могу использовать пользователя, который находится вне "OU=Office,OU=Company,DC=example,DC=com", хотя для чтения, фильтр работает - я его в дереве не вижу. Подскажите, есть ли возможность ограничить возможность проверки паролей/авторизации?
4. Пока выводятся все объекты типа OU. Т.е. видно все дерево, хотя, благодаря фильтрам, большая часть веток пустая. Есть ли возможность выводить только те OU, которые содержать объекты (прошедшие фильтр)?
Заранее спасибо.