Я пытаюсь защитить существующую установку OpenLDAP, в которой требуется разрешить анонимному пользователю получать информацию о записях, если он знает uid конкретной записи пользователя в LDAP. Предположим структуру, как показано ниже:
dc=example,dc=com
ou=People
uid=user1
uid=user2
ou=Groups
cn=user1
memberUid:user1
cn=user2
memberUid:user2
cn=common
memberUid:user1
memberUid:user2
Теперь, если анонимные знают, что запись uid = user1 существует в LDAP, они должны иметь возможность получить список групп, членом которых является этот пользователь. Однако они не должны иметь возможность обнаруживать другие группы.
Таким образом, ldapsearch -b "ou = Groups, dc = example, dc = com"
ничего не должен возвращать, в то время как ldapsearch -b "ou = Groups, dc = example, dc = com" "(& (objectClass = posixGroup) (memberUid = user1))"
должен возвращать все группы, участником которых является user1.
Я пробовал несколько разных ACL, но пока безуспешно. Либо поиск работает, но также может перечислить все группы, либо не может перечислить все группы, но тогда поиск не работает.
Есть ли способ добиться желаемого поведения с помощью списков контроля доступа?
PS: База данных использует стандартную схему nis , поскольку в базе данных уже есть данные, изменение на rfc2307bis не является вариантом (и есть другие причины, по которым такое изменение невозможно в этом случае).
Я не думаю, что это возможно, так как вы не могли ограничить, какие группы можно читать. Тем не менее, OpenLDAP предлагает альтернативный способ, который может помочь вам. Он называется "Reverse Group Maintenance" (см. главу 12.8 в (устаревших) документах ) с оверлеем memberOf
. В основном, он ведет список каждой группы, в которую входит пользователь, что позволяет легко искать информацию такого типа.
Для справки, как это сделать современным способом, с помощью cn=config
, смотрите здесь .