Попробуйте следующее:
access to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=example,dc=com" write
by users read
by * none
access to *
by self write
by dn="cn=admin,dc=example,dc=com" write
by * read
Но вы можете принять во внимание 2 угрозы безопасности: первая - это доступ к attrs = userPassword, shadowLastChange для чтения пользователями
означает, что пользователи могут читать теневой пароль и используйте инструменты для взлома. Второй - это доступ к * посредством самостоятельной записи
, поэтому пользователи могут изменить uidNumber
и / или gidNumber
, чтобы он стал пользователем root.
Поэтому я предлагаю следующий ACL:
access to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=example,dc=com" write
by users none
access to *
by dn="cn=admin,dc=example,dc=com" write
by * read
olcAccess: {0} to attrs = userPassword, shadowLastChange by self write by anonymous auth by dn = "cn = admin, dc = example, dc = com" write by * none
olcAccess: {1} для attrs = uid, uidNumber, gidNumber от dn = "cn = admin, dc = example, dc = com" запись с помощью * read
olcAccess: {2} в * самозапись dn = "cn = admin, dc = example, dc = com" запись пользователями, прочитанными анонимной авторизацией
olc {1} ... by * read
может вместо этого быть по * auth
зависит от конфигурации pam_ldap
и того, как / если клиентские машины (а не пользователи) аутентифицируют себя.
Редактировать как ответ:
Действительный DNS выглядит как uid = username, ou = users, dc = sub, dc = domain, dc = tld
.
username
не является допустимым синтаксисом dn и никогда не использовался.
olcAccess
не может этого изменить.
(SASL / olcAuthzRegexp может делать всевозможные интересные вещи, однако не было предоставлено достаточно подробностей, чтобы знать, использует ли система SASL вообще.)
Если эта машина использует ldap только для общения с самим собой, вы можете ограничить его локальным хостом (или сокетами) , иначе ldapi, если ваше клиентское программное обеспечение поддерживает его). Правила именования dn по-прежнему применяются.
Кроме того, если dn = "cn = admin, dc = example, dc = com" определен как ваш rootdn для базы данных, нет необходимости указывать его в olcAccess этой базы данных. DNS всегда имеет доступ на запись ко всем attrs в базе данных, для которой он rootdn.