Я новичок в serverfault, но я уже пользуюсь поиском в google и serverfault, но не могу найти ответ на свою проблему. Мне нужно добавить новый атрибут в ldap, называемый разрешением, и уметь устанавливать уровни привилегий.
Нашел несколько "способов сделать", но ни один из них не работает. Застрял точно так же, как здесь добавить новый атрибут для пользователей ldap и отправить его в ldap
Пробуем
dn: cn=core,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: <new value>
dn: cn=core,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.2.3.4.5.6.7
NAME ( 'test' 'test' )
DESC 'test'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.3
SINGLE-VALUE )
Но лучше всего я получаю
modifying entry "cn=core,cn=schema,cn=config"
ldap_modify: No such object (32)
matched DN: cn=schema,cn=config
ldap_modify: Invalid syntax (21)
additional info: attributetypes: value #0 normalization failed
или
ldap_add: Undefined attribute type (17)
additional info: add: attribute type undefined
И у меня нет идей, как добавить этот атрибут : /
Поскольку я должен это сделать, я все еще пытаюсь (также создать новый сервер) и получаю следующие результаты
dn: cn = config
changetype: добавить
olcAttributeTypes: (2.5.4.66 ИМЯ 'разрешение'
DESC 'RFC2256: для пользователей Supermicro'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 {255})
ldap_add: Object class violation (65)
additional info: no objectClass attribute
Итак, добавляем объектный класс
ldap_add: нарушение класса объекта (65)
доп. информация: объектному классу person требуется атрибут sn
И что теперь? Конечно, я хочу, чтобы это разрешение было частью объектного класса человека, как МОЖЕТ, но до сих пор не знаю, как изменить объектный класс
Результат
ldapsearch -H ldap: //ldap.ogicom.net -x -s base -b "" +
base <> с областью действия baseObject
# фильтр: (objectclass = *)
# запрос: +
dn:
StructureObjectClass: OpenLDAProotDSE
configContext: cn = config
namingContexts: private
supportedControl: 2.16.840.1.113730.3.4.18
supportedControl: 2.16.840.1.113730.3.4.2
supportedControl: 1.3.6.1.4.1.4203.1.10.1
supportedControl: 1.3.6.1.1.22
supportedControl: 1.2.840.113556.1.4.319
supportedControl: 1.2.826.0.1.3344810.2.3
supportedControl: 1.3.6.1.1.13.2
supportedControl: 1.3.6.1.1.13.1
supportedControl: 1.3.6.1.1.12
supportedExtension: 1.3.6.1.4.1.1466.20037
supportedExtension: 1.3.6.1.4.1.4203.1.11.1
supportedExtension: 1.3.6.1.4.1.4203.1.11.3
supportedExtension: 1.3.6.1.1.8
Поддерживаемые функции: 1.3.6.1.1.14
supportedFeatures: 1.3.6.1.4.1.4203.1.5.1
supportedFeatures: 1.3.6.1.4.1.4203.1.5.2
supportedFeatures: 1.3.6.1.4.1.4203.1.5.3
Поддерживаемые функции: 1.3.6.1.4.1.4203.1.5.4
supportedFeatures: 1.3.6.1.4.1.4203.1.5.5
поддерживаетсяLDAPVersion: 3
supportedSASLМеханизмы: DIGEST-MD5
поддержанныйSASLМеханизмы: NTLM
поддержанныйSASLМеханизмы: CRAM-MD5
entryDN:
subschemaSubentry: cn = Subschema
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Хорошо, давайте очистим вещи немного вверх:
ldapmodify
может как создавать , так и изменять узлы в вашем дереве LDAP. Такое поведение определяется параметром changetype
. Итак, если вы используете changetype: add
, вы пытаетесь добавить новый узел. Очевидно, вам нужно будет присвоить этому новому узлу объектный класс, поэтому вы получили ошибку
ldap_add: Нарушение класса объекта (65) дополнительная информация:нет атрибута objectClass
(все же эта операция не увенчалась успехом, поскольку dn cn = config
уже существует). cn = {0} core, cn = schema, cn = config
содержит класс объекта 'person', тогда как 'inetOrgPerson' находится в cn = {3} inetorgperson, cn = schema , cn = config
). Фигурные скобки перед первым атрибутом dn (в данном случае «core» или «inetorgperson») устанавливаются OpenLDAP для определения порядка, в котором загружаются узлы. Кстати: это причина, по которой вы получили ldap_modify: Нет такого объекта (32)
при поиске cn = core, ... - вы пропустили скобки :) olcSchemaConfig
в качестве атрибутов с типом атрибута olcObjectClasses
или olcAttributeTypes
соответственно. Просто посмотрите на свои схемы (например, ldapsearch -xLLLWD cn = admin, cn = config -b cn = schema, cn = config -s one
или ldapsearch -xLLLWD cn = admin, cn = config - b cn = {0} core, cn = schema, cn = config -s base
), и вы получите представление о том, как это выглядит. Так что четко укажите, что вы хотите сделать: вы пытаетесь изменить узел в форме, в которой вы заменяете один из атрибутов olcObjectClasses (в той форме, в которой вы его переопределяете, включая ваши тип атрибута. Если тип атрибута не был определен ранее, вам нужно будет добавить его как другой атрибут типа olcAttributeTypes
либо в том же узле, либо в другом olcSchemaConfig
). Это можно сделать с помощью dn: cn = {0} core, cn = schema, cn = config
changetype: изменить
заменить: olcObjectClasses
olcObjectClasses: {4} (2.5.6.6 NAME 'person' ...
ОДНАКО:
Вы не хотите этого делать. Серьезно, не делайте этого. Никогда не стоит связываться с уже существующими классы и атрибуты.
Вместо этого есть лучшие варианты, которые намного чище и должны быть выбраны взамен:
ldapadd -xWD cn = admin, cn = config
dn: cn =
Изучение того, как обрабатывать cn = config, может сначала немного сбить с толку, но как только вы поймете концепции, лежащие в основе этого, Вы понимаете, что это намного круче, чем было раньше. Его определенно стоит изучить.
Удачи!
Ну, это не моя идея, но у меня есть ответ. Я делаю это вручную
· Редактировать конфигурационный файл,
$ vim /etc/ldap/schema/core.schema
· Добавить тип атрибута,
attributetype ( 2.5.4.66 NAME 'permission'
DESC 'my desc '
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} )
· Добавить 'разрешение' к объектному классу 'person'
objectclass ( 2.5.6.6 NAME 'person'
DESC 'RFC2256: a person'
SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description $ permission ) )
· Создать файл core.conf
$ vim /etc/ldap/core.conf
· Добавить строку ниже в core.conf
include /etc/ldap/schema/core.schema
· Удалите или сделайте резервную копию старого файла /etc/ldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif
$ rm /etc/ldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif
· Создайте новый / etc / ldap / slapd. d / cn = config / cn = sch
$ slaptest -f /etc/ldap/core.conf -F /etc/ldap/slapd.d