Я пытаюсь настроить свой первый сервер LDAP, который будет использоваться для хранения учетных записей пользователей (для таких вещей, как почта, сервер git и многое другое). Мне удалось установить сервер, но я застрял, когда хочу создать свой первый объект.
Я хочу настроить сервер ashley-vps.mildred.fr (пока это тестовый сервер). Его дн dc=ashley-vps, dc=mildred, dc=fr
. Первым делом я импортировал cosine
(это математическая функция?) и nis
схемы. Затем я изменил oldSuffix
и oldRootDN
моей конфигурации следующим образом:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ashley-vps, dc=mildred, dc=fr
-
replace: olcRootDN
olcRootDN: cn=Manager, dc=ashley-vps, dc=mildred, dc=fr
Я использовал ответ на «нет глобальных превосходных знаний» при добавлении страны как шаблон.
Я не думаю, что мне нужно настраивать какой-либо специальный доступ, потому что я использую -Y EXTERNAL -H ldapi:///
и когда я смотрю на свои настройки доступа, кажется, что у меня есть необходимые разрешения:
# {0}config, config
dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" manage by * none
# {1}monitor, config
dn: olcDatabase={1}monitor,cn=config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" read by dn.base="cn=Manager,dc=my-domain,dc=com" read by * none
Теперь я хочу создать свой первый объект. Начнем с dn: dc=ashley-vps, dc=mildred, dc=fr
:
dn: dc=ashley-vps, dc=mildred, dc=fr
changetype: add
objectclass: top
objectclass: organizationalUnit
objectclass: dcObject
ou: ashley-vps.mildred.fr
Я получаю отказ:
ldap_add: Insufficient access (50)
additional info: no write access to parent
Я полагаю, это связано с тем, что это находится за пределами верхней части иерархии, управляемой сервером LDAP, или это так? И если я попытаюсь создать человека напрямую:
dn: cn=Toto, dc=ashley-vps, dc=mildred, dc=fr
changetype: add
objectclass: person
cn: Toto
sn: Surname
Меня также отвергают:
ldap_add: No such object (32)
На этот раз я полагаю, это потому, что отсутствует верхний объект.
Тогда как создать верхний объект? Зачем мне вообще нужно создавать верхний объект? Это кажется ненужным ограничением. Аналогично при создании posixAccount
s, похоже, нам еще нужно создать пользователя и группу organizationalUnit
s (как видно на это как). Могу я обойтись без?
Кажется, что решение добавляет olcAccess
собственность dn: olcDatabase={2}hdb,cn=config
. Я думал, что мне это не нужно, но мне это нужно. Это дает возможность изменять базу данных.
Поэтому я добавил следующий код в dn: olcDatabase={2}hdb,cn=config
:
-
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by * none
И теперь это работает (по крайней мере, я мог создать dc=ashley-vps,dc=mildred,dc=fr
)
Примечание: не забудьте поставить два пробела для продолжения строк, иначе вы получите следующую ошибку: ldap_modify: другая (например, специфическая для реализации) ошибка (80), обработчик <olcAccess> завершился с 1
редактировать: см. slapd.access(5)
страница руководства и грант manage
доступ к руту (высшие разрешения)
Я понимаю, что это поздно, но я отправлю это на будущее. Первую ошибку я не буду рассматривать, потому что я думаю, вы просто не добавили требуемую схему. Но за ошибку ldap_add: Insufficient access (50)
additional info: no write access to parent
Следующая команда используется для изменения / добавления схемы:
ldapadd -Q -Y EXTERNAL -H ldapi:/// -w <password> -f </path/to/file>
Чтобы добавить записи в ваш LDAP, используйте вместо этого:
ldapadd -x -D 'cn=Manager,dc=domain,dc=local' -w <password> -H ldapi:/// -f </path/to/file>