У меня есть несколько DIT на моем сервере OpenLDAP. Я сделал пользователя cn = config корневым, чтобы cn = config имел root-доступ ко всем DIT (каждому DIT). Кроме того, существует администратор для каждого DIT с идентификатором cn = admin, $ suffix [например, 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. Я, видимо, не понимаю, как правильно установить эти правила.
Я считаю, что вы применяете более сложный подход, чем необходимо. Чтобы отключить 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