Проблемы Openldap с добавлением атрибута

Я новичок в 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
0
задан 13 April 2017 в 15:14
2 ответа

Хорошо, давайте очистим вещи немного вверх:

  1. ldapmodify может как создавать , так и изменять узлы в вашем дереве LDAP. Такое поведение определяется параметром changetype . Итак, если вы используете changetype: add , вы пытаетесь добавить новый узел. Очевидно, вам нужно будет присвоить этому новому узлу объектный класс, поэтому вы получили ошибку ldap_add: Нарушение класса объекта (65) дополнительная информация:нет атрибута objectClass (все же эта операция не увенчалась успехом, поскольку dn cn = config уже существует).
  2. Прежде всего необходимо выяснить, какой узел содержит класс объекта (для пример: мой узел 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, ... - вы пропустили скобки :)
  3. Классы объектов и типы атрибутов хранятся в узлы с классом объектов 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' ...

ОДНАКО:

Вы не хотите этого делать. Серьезно, не делайте этого. Никогда не стоит связываться с уже существующими классы и атрибуты.

Вместо этого есть лучшие варианты, которые намного чище и должны быть выбраны взамен:

  1. Быстрый способ: при создании следующего пользовательского узла вы могли бы использовать структурный объект class (например, 'person') и добавьте к смеси вспомогательный объектный класс 'extensibleObject'; это позволит вам добавлять атрибуты любого существующего типа атрибута.
  2. Правильный способ: вы можете легко определить свой собственный Классы объектов. Таким образом вы бы хотели либо создать свой собственный структурный класс (который может унаследовать от любого другого класса объектов и быть расширен вашим атрибутом), который затем вы будете использовать для своего узла как только объектный класс , либо вы также можете создать вспомогательный объектный класс , который содержит атрибут и который будет используется как дополнительный объектный класс . Если вы выберете этот способ, убедитесь, что вы используете пространство имен (числа в определении, например, «2.5.4.66»), которое не будет конфликтовать с существующими классами и / или атрибутами. Вот как это выглядит:

ldapadd -xWD cn = admin, cn = config dn: cn = , cn = schema, cn = config objectClass: olcSchemaConfig cn: <имя схемы> olcAttributeTypes: (<ваше пространство имен> .01.01 NAME DESC EQUALITY SYNTAX ) olcObjectClasses: (<ваше пространство имен> .02.01 NAME DESC AUXILIARY MUST )

Изучение того, как обрабатывать cn = config, может сначала немного сбить с толку, но как только вы поймете концепции, лежащие в основе этого, Вы понимаете, что это намного круче, чем было раньше. Его определенно стоит изучить.

Удачи!

2
ответ дан 4 December 2019 в 16:26

Ну, это не моя идея, но у меня есть ответ. Я делаю это вручную

· Редактировать конфигурационный файл,

$ 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
-1
ответ дан 4 December 2019 в 16:26

Теги

Похожие вопросы