Назад | Перейти на главную страницу

OpenLDAP ACL для предотвращения получения анонимным пользователем списка всех групп

Я пытаюсь защитить существующую установку 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, смотрю Вот.