Почему shadowLastChange является неизвестным атрибутом?

Вопрос или проблема

Я пытаюсь установить slapd на Oracle Linux 7 и следую Руководству администратора Oracle® Linux для выпуска 7 по настройке LDAP-сервера. Когда я дохожу до шага 7, импорта конфигурации ldif, появляется ошибка:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=hdb,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
        additional info: <olcAccess> handler exited with 1

Когда я запускаю slapd в режиме отладки с помощью:

/usr/sbin/slapd -u ldap -h "ldapi:/// ldap:/// ldaps:///" -d 255

Я вижу следующую ошибку, указывающую на то, что атрибут shadowLastChange неизвестен.

58daa3a6 <<< dnPrettyNormal: <dc=ams,dc=sim,dc=mil>, <dc=ams,dc=sim,dc=mil>
58daa3a6 slapd: line 0: unknown attr "shadowLastChange" in to clause
58daa3a6 <access clause> ::= access to <what> [ by <who> [ <access> ] [ <control> ] ]+
<what> ::= * | dn[.<dnstyle>=<DN>] [filter=<filter>] [attrs=<attrspec>]
<attrspec> ::= <attrname> [val[/<matchingRule>][.<attrstyle>]=<value>] | <attrlist>
<attrlist> ::= <attr> [ , <attrlist> ]
<attr> ::= <attrname> | @<objectClass> | !<objectClass> | entry | children
<who> ::= [ * | anonymous | users | self | dn[.<dnstyle>]=<DN> ]
        [ realanonymous | realusers | realself | realdn[.<dnstyle>]=<DN> ]
        [dnattr=<attrname>]
        [realdnattr=<attrname>]
        [group[/<objectclass>[/<attrname>]][.<style>]=<group>]
        [peername[.<peernamestyle>]=<peer>] [sockname[.<style>]=<name>]
        [domain[.<domainstyle>]=<domain>] [sockurl[.<style>]=<url>]
        [dynacl/<name>[/<options>][.<dynstyle>][=<pattern>]]
        [ssf=<n>] [transport_ssf=<n>] [tls_ssf=<n>] [sasl_ssf=<n>]
<style> ::= exact | regex | base(Object)
<dnstyle> ::= base(Object) | one(level) | sub(tree) | children | exact | regex
<attrstyle> ::= exact | regex | base(Object) | one(level) | sub(tree) | children
<peernamestyle> ::= exact | regex | ip | ipv6 | path
<domainstyle> ::= exact | regex | base(Object) | sub(tree)
<access> ::= [[real]self]{<level>|<priv>}
<level> ::= none|disclose|auth|compare|search|read|{write|add|delete}|manage
<priv> ::= {=|+|-}{0|d|x|c|s|r|{w|a|z}|m}+
<control> ::= [ stop | continue | break ]
dynacl:
        <name>=ACI      <pattern>=<attrname>

58daa3a6 olcAccess: value #0: <olcAccess> handler exited with 1!

Если я уберу строку:

olcAccess: to attrs=shadowLastChange
  by self write
  by * read

это сработает, но мне интересно, не сломан ли система. Когда я ищу shadowLastChange в /etc/openldap, я вижу, что он существует в nis.ldif и nis.schema.

$ grep -rn shadowLastChange /etc/openldap/
/etc/openldap/schema/nis.ldif:36:olcAttributeTypes: ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange' EQUALITY integ
/etc/openldap/schema/nis.ldif:89:  $ shadowLastChange $ shadowMin $ shadowMax $ shadowWarning $ shadowInactive
/etc/openldap/schema/nis.schema:65:attributetype ( 1.3.6.1.1.1.1.5 NAME 'shadowLastChange'
/etc/openldap/schema/nis.schema:171:    MAY ( userPassword $ shadowLastChange $ shadowMin $

Почему shadowLastChange неизвестен? Что мне нужно сделать, чтобы преодолеть эту проблему на пути к настройке slapd для аутентификации пользователей?

Похоже, что shadowLastChange еще не является частью схемы вашего сервера, поскольку он не отображается в /etc/openldap/slapd.d/cn=config/cn=schema/cn={x}nis.ldif.

Вы забыли добавить рекомендованные строки в ваш ldif?

include file:///etc/openldap/schema/cosine.ldif

include file:///etc/openldap/schema/nis.ldif

include file:///etc/openldap/schema/inetorgperson.ldif

Руководство администратора Oracle® Linux для выпуска 7 по настройке LDAP-сервера требует от пользователя создать файл LDIF на шаге 7.

# Загрузить файлы схемы, необходимые для учетных записей
include file:///etc/openldap/schema/cosine.ldif

include file:///etc/openldap/schema/nis.ldif

include file:///etc/openldap/schema/inetorgperson.ldif

# Загрузить модули бэкенда HDB (иерархическая база данных)
dn: cn=module,cn=config
objectClass: olcModuleList

Как показано в странице man OpenLDAP для LDIF, синтаксис для include требует, чтобы за ним следовала двоеточие. Добавьте двоеточия, чтобы получить следующее, и shadowLastChange будет существовать как атрибут при выполнении на шаге 8.

# Загрузить файлы схемы, необходимые для учетных записей
include: file:///etc/openldap/schema/cosine.ldif

include: file:///etc/openldap/schema/nis.ldif

include: file:///etc/openldap/schema/inetorgperson.ldif

# Загрузить модули бэкенда HDB (иерархическая база данных)
dn: cn=module,cn=config
objectClass: olcModuleList

shadowLastChange является частью вспомогательного класса объектов shadowAccount, и этот класс объектов определен в nis.schema и rfc2307bis.schema.

Когда атрибут неизвестен, скорее всего, схема отсутствует.

Ответ или решение

Почему атрибут shadowLastChange является неизвестным в OpenLDAP?

При установке и настройке службы OpenLDAP, такой как slapd на Oracle Linux 7, может возникнуть ошибка, связанная с отсутствием известного атрибута shadowLastChange. Данная проблема обычно связана с неполной или некорректной загрузкой схемы в OpenLDAP. Давайте более подробно разберем основные причины возникновения этой ошибки и их возможные решения.

Причины проблемы

  1. Отсутствие или неправильная загрузка схемы:
    Атрибут shadowLastChange является частью объектного класса shadowAccount, который определен в схеме nis.schema. При инициализации slapd необходимо убедиться, что эта схема загружена, иначе LDAP сервер не будет распознавать атрибут.

  2. Неправильный синтаксис файлов LDIF:
    В файлах для загрузки схем (например, nis.ldif, cosine.ldif, и inetorgperson.ldif) может отсутствовать двоеточие после команды include. Согласно документации по LDIF, правильный синтаксис требует, чтобы include следовал двоеточие :. Если это не соблюдено, slapd не сможет корректно подключить необходимые схемы.

  3. Отсутствие схемы в активной конфигурации:
    Проверка конфигурации в каталоге /etc/openldap/slapd.d/cn=config/cn=schema/ может показать, что схема nis не загружена или ее отсутствуют необходимые атрибуты. Это может произойти, если схема не была добавлена в процессе установки или настройки.

Решение проблемы

Для успешного прохождения процесса импорта конфигурации LDAP, выполните следующие шаги:

  1. Проверьте наличие схемы:
    Убедитесь, что файл nis.schema существует в директории /etc/openldap/schema/.

  2. Корректируйте синтаксис файлов LDIF:
    Откройте файл настройки LDIF, используемый для инициализации хранилища, и убедитесь, что строки с include имеют правильный синтаксис, добавив двоеточие:

    # Загрузка необходимых схем для аккаунтов
    include: file:///etc/openldap/schema/cosine.ldif
    include: file:///etc/openldap/schema/nis.ldif
    include: file:///etc/openldap/schema/inetorgperson.ldif
    
    # Загрузка модулей HDB (иерархическая база данных)
    dn: cn=module,cn=config
    objectClass: olcModuleList
  3. Перезагрузка сервера slapd:
    После внесения изменений вам необходимо перезапустить slapd для применения схемы:

    systemctl restart slapd
  4. Проверка конфигурации:
    Выполните команду для проверки загруженных схем:

    ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config

    Убедитесь, что shadowLastChange и другие необходимые атрибуты определены.

  5. Тестирование конфигурации:
    После выполнения всех вышеперечисленных действий попробуйте снова выполнить импорт конфигурации и убедитесь, что ошибка больше не возникает.

Заключение

Использование OpenLDAP может быть сложным, особенно при настройке схем и атрибутов. Понимание структуры и правильной настройки LDIF-файлов поможет вам избежать ошибок, связанных с неизвестными атрибутами, такими как shadowLastChange. Следуя вышеперечисленным шагам, вы сможете успешно настроить вашу LDAP-систему для аутентификации пользователей на Oracle Linux 7.

Оцените материал
Добавить комментарий

Капча загружается...