Расширенная конфигурация ACL OpenLDAP

У меня есть несколько DIT на моем сервере OpenLDAP. Я сделал пользователя cn=config корневым, чтобы cn=config имел root-доступ ко всем DIT (каждому DIT). Кроме того, существует администратор для каждого DIT, идентифицируемый как cn=admin, суффикс $ [например, cn=admin, dc = example, dc = com или любой другой].

Я добавил пользовательский атрибут NAME для объектов admin и user. Атрибут называется: "serviceLevel", а значения "приостановлены" или "нормальны". Атрибут является необязательным, и когда его нет, мы интерпретируем его как нормальный - не приостановленный.

В настоящее время, когда serviceLevel установлен на "приостановлено", мой ACL приостанавливает работу обычных пользователей и не приостанавливает локальных администраторов / администраторов DIT. Мне нужно, чтобы администраторы не могли проходить аутентификацию, как обычные пользователи.

Пример текущих списков ACL настройки LDIF приведен ниже:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  filter=(serviceLevel=suspended)
  by dn="cn=config" write
  by * none
olcAccess: {1}to attrs=userPassword,shadowLastChange
  filter=(!(serviceLevel=suspended))
  by self write
  by anonymous auth
  by dn="cn=admin,dc=directory,dc=com" write
  by dn="cn=config" write
  by * none
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to *
  filter=(serviceLevel=suspended)
  by dn="cn=config" write
  by * none
olcAccess: {4}to *
  filter=(!(serviceLevel=suspended))
  by self write
  by dn="cn=admin,dc=directory,dc=com" write
  by dn="cn=config" write
  by * read

Пожалуйста, сообщите, если у вас есть идея, почему администраторы домена проскальзывают через мой ACL. Я, видимо, не понимаю, как правильно установить эти правила.

1 ответ

Решение

Я считаю, что вы используете более сложный подход, чем необходимо. Чтобы отключить DIT, отключите соответствующую ему базу данных. Это может быть достигнуто путем установки olcHidden: TRUE,

olcHidden: ИСТИНА |ЛОЖНЫЙ
Управляет тем, будет ли база данных использоваться для ответа на запросы. Скрытая база данных никогда не будет выбрана для ответа на любые запросы, и любой суффикс, настроенный в базе данных, будет игнорироваться при проверках конфликтов с другими базами данных. По умолчанию olcHidden имеет значение FALSE.

ldapmodify <<EOF
dn: olcDatabase={2}hdb,cn=config
replace: olcHidden
olcHidden: TRUE
EOF

Дополнительное примечание:

Независимо от того, какая политика контроля доступа определена,rootdn всегда имеет полные права(то есть авторизация, поиск, сравнение, чтение и запись) на все и на всем.

Как следствие, бесполезно (и приводит к снижению производительности) явно указывать rootdn среди предложений. -OpenLDAP Software 2.4 Administrator's Guide

Другие вопросы по тегам