Я пытаюсь защитить существующую установку 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 предлагает альтернативный способ, который может вам помочь. Это называется «Обратное групповое обслуживание» (см. Главу 12.8. в (устаревших) документах) с memberOf
наложение. По сути, он поддерживает список каждой группы, членом которой является пользователь, что позволяет легко находить этот тип информации.
Чтобы узнать, как это сделать современным способом, с помощью cn=config
, смотрю Вот.