LDAP configuration: Difference between revisions

From Svacer Wiki
Jump to navigation Jump to search
No edit summary
m (minor fixes)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Пример конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу ==
== Пример конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу ==


Для упрощение настройки интеграции с LDAP сервером, процесс настройки можно разбить на этапы и переходить к следующему только если успешно завершен предыдущий этап. В первую очередь необходимо выяснить акутальные параметры подключения к ldap серверу:
Для упрощения настройки интеграции с LDAP сервером, процесс настройки можно разбить на этапы и переходить к следующему только если успешно завершен предыдущий этап. В первую очередь необходимо выяснить актуальные параметры подключения к ldap серверу:
* URL; Например ldap://10.11.12.13:389 или  ldaps://10.11.12.13:636
* URL; Например ldap://10.11.12.13:389 или  ldaps://10.11.12.13:636
* Учетные данные с которыми будет осуществляться подключение к LDAP серверу при каждой попытке входа пользователем; Например, login: cn=admin,dc=example,dc=com, пароль: 12345678
* Учетные данные с которыми будет осуществляться подключение к LDAP серверу при каждой попытке входа пользователем; Например, login: cn=admin,dc=example,dc=com, пароль: 12345678
* Определиться с корнем LDAP дерева (базовый узел), относительно которого будут выполняться все операции; Например: dc=example,dc=com
* Определиться с корнем LDAP дерева (базовый узел), относительно которого будут выполняться все операции; Например: dc=example,dc=com
* Проверить, что с указанными учетными данными  возможно подключение к серверу LDAP и просмотр его содержимого с некоторого узла, расположенного ниже базового; Например, с узла ou=users,dc=example,dc=com для рассматриваемого примера. Проверить можно, например, используя следующую команду:
* Проверить, что с указанными учетными данными  возможно подключение к серверу LDAP и просмотр его содержимого с некоторого узла, расположенного ниже базового; Например, с узла ou=users,dc=example,dc=com для рассматриваемого примера. Проверить можно, например, используя следующую команду:
  LDAPTLS_REQCERT=never ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldaps://127.0.0.1:636  
:<pre>LDAPTLS_REQCERT=never ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldaps://127.0.0.1:636</pre>
для случая поддержки TLS, или  
:для случая поддержки TLS, или  
  ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldap://127.0.0.1:389
:<pre>ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldap://127.0.0.1:389</pre>
для случая без поддержки TLS
:для случая без поддержки TLS
* Определиться с атрибутом записи, по которой будет осуществляться вход. Например cn, mail или  sAMAccountName
* Определиться с атрибутом записи, по которой будет осуществляться вход. Например cn, mail или  sAMAccountName
* Если используется Active Directory, целесообразно в качестве фильтра для поиска записей о пользователе указать значение (&(objectCategory=Person)(sAMAccountName=*)).
* Если используется Active Directory, целесообразно в качестве фильтра для поиска записей о пользователе указать значение (&(objectCategory=Person)(sAMAccountName=*))


=== Основные настройки LDAP ===
=== Основные настройки LDAP ===
* Использовать следующий шаблон конфигурации, заменив текст, выделенный жирным, акутальными данными:
* Использовать следующий шаблон конфигурации, заменив текст, выделенный жирным, актуальными данными
{
  {
      "name": "test_ldap",
    "name": "test_ldap",
      "basedn": '''"dc=example,dc=com"''',
    "basedn": '''"dc=example,dc=com"''',
      "connection": {
    "connection": {
        "url": '''"ldap://ldap1.example.com:389"''',
      "url": '''"ldap://ldap1.example.com:389"''',
        "connectAs": '''"cn=admin,dc=example,dc=com"''',
      "connectAs": '''"cn=admin,dc=example,dc=com"''',
        "password": '''"12345678"'''
      "password": '''"12345678"'''
      },
    },
      "user": {
    "user": {
        "basedn": '''"ou=users"''',
      "basedn": '''"ou=users"''',
        "filter": '''"(&(objectClass=PosixAccount)(cn=*))"''',
      "filter": '''"(&(objectClass=PosixAccount)(cn=*))"''',
        "login": '''"cn"''',
      "login": '''"cn"''',
        "info": {
      "info": {
          "display": "cn",
        "display": "cn",
          "email": "mail",
        "email": "mail",
          "firstName": "givenName",
        "firstName": "givenName",
          "lastName": "sn"
        "lastName": "sn"
        }
      }
      },
    },
      "enabled": true
    "enabled": true
   }
   }


* Поиск пользователя в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений user.basedn и basedn. В примере это будет узел ou=users,dc=example,dc=com. Полный DN пользователя указывать в user.basedn не нужно (можно указать пустой или не указывать вообще)
* Поиск пользователя в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений user.basedn и basedn. В примере это будет узел ou=users,dc=example,dc=com. Полный DN пользователя указывать в user.basedn не нужно (можно указать пустой или не указывать вообще)
Line 54: Line 53:
=== Добавление проверки по группе LDAP ===
=== Добавление проверки по группе LDAP ===
Принадлежность пользователя к группе определяется следующим образом:
Принадлежность пользователя к группе определяется следующим образом:
* Формируется список всех возможных групп на основе значение group.filter
* Формируется список всех возможных групп на основе значения group.filter
* Для каждой сформированной группы формируется список входящих в нее пользователей по следующему принципу:
* Для каждой сформированной группы формируется список входящих в нее пользователей по следующему принципу:
** Каждое значение атрибута group.userMember (их может быть несколько) узла LDAP (соответствующего группе) однозначно идентифицирует некоторого пользователя
** Каждое значение атрибута group.userMember (их может быть несколько) узла LDAP (соответствующего группе) однозначно идентифицирует некоторого пользователя
Line 60: Line 59:


Для настройки проверки по группе целесообразно выполнить следующие действия:
Для настройки проверки по группе целесообразно выполнить следующие действия:
* Определиться с узлом в LDAP, относительно которого будет производится поиск групп (поле group.basedn). Поиск групп в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений group.basedn и basedn. В примере это будет узел ou=svacer_groups,ou=groups,dc=example,dc=com.
* Определиться с узлом в LDAP, относительно которого будет производится поиск групп (поле group.basedn). Поиск групп в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений group.basedn и basedn. В примере это будет узел ou=svacer_groups,ou=groups,dc=example,dc=com
* Для Active Directory в поле filter можно указать, например, (&(objectCategory=Group)(cn=dep_ivanov)), что будет означать группу dep_ivanov.
* Для Active Directory в поле filter можно указать, например, (&(objectCategory=Group)(cn=dep_ivanov)), что будет означать группу dep_ivanov.
* Изменить конфигурационный файл,следующим образом:
* Изменить конфигурационный файл следующим образом:
  {
  {
      "name": "test_ldap",
    "name": "test_ldap",
      ….
    ...
      },
    },
      "user": {
    "user": {
      ….
      ...
      '''"group": "dn"''',
      '''"group": "dn"''',
      },       
    },       
      '''"useGroup": true,'''
    '''"useGroup": true,'''
      '''"group": {''''
    '''"group": {''''
      '''"basedn": "ou=svacer_groups,ou=groups",'''
    '''"basedn": "ou=svacer_groups,ou=groups",'''
      '''"filter": "(&(objectClass=groupOfNames)(cn=*))",'''
    '''"filter": "(&(objectClass=groupOfNames)(cn=*))",'''
      '''"userMember": "member",'''
    '''"userMember": "member",'''
      '''"display":"cn",'''
    '''"display":"cn",'''
      },
    },
      "enabled": true
    "enabled": true
      }
  }
 
* Перезапустить Svacer
* Перезапустить Svacer
* Убедиться, что возможен вход пользователей, состоящих в группе/группах, и не возможен вход пользователей, не состоящих в группе/группах.
* Убедиться, что возможен вход пользователей, состоящих в группе/группах, и не возможен вход пользователей, не состоящих в группе/группах.
Line 85: Line 85:
* Добавить нужные группы в Svacer. Например admins и users.
* Добавить нужные группы в Svacer. Например admins и users.
* Определиться в каком атрибуте LDAP группы будет хранится имя роли (все сравнения будут чувствительны к регистру). Например, пусть это будет атрибут cn
* Определиться в каком атрибуте LDAP группы будет хранится имя роли (все сравнения будут чувствительны к регистру). Например, пусть это будет атрибут cn
* Изменить конфигурационный файл следующим образом:
* Изменить конфигурационный файл следующим образом
{
  {
     "name": "test_ldap",
     "name": "test_ldap",
     ..
     ...
     "user": {
     "user": {
    ..
    ...
    },       
    },       
    ''' "useGroup": true, '''
    ''' "useGroup": true, '''
    ''' "group": { '''
    ''' "group": { '''
    ''' "basedn": "ou=svacer_groups,ou=groups", '''
    ''' "basedn": "ou=svacer_groups,ou=groups", '''
    ''' "filter": "(&(objectClass=groupOfNames)(cn=*))", '''
    ''' "filter": "(&(objectClass=groupOfNames)(cn=*))", '''
    ''' "userMember": "member", '''
    ''' "userMember": "member", '''
    ''' "display": "cn", '''
    ''' "display": "cn", '''
    ''' "svacerRole": "cn" '''
    ''' "svacerRole": "cn" '''
    ''' }, '''
    ''' }, '''
    "enabled": true
    "enabled": true
}
  }
* Убедиться, что пользователю назначаются роли, выполнив команду в cli (требуются учетные данные администратора для проверки; по умолчанию admin@admin). Для проверки привязки ролей Svacer к пользователю Loginok можно использовать следующую команду:
 
* Убедиться, что пользователю назначаются роли, выполнив команду в cli (требуются учетные данные администратора для проверки; по умолчанию admin / admin). Для проверки привязки ролей Svacer к пользователю Loginok можно использовать следующую команду:
  ./svacer ldap sync_roles --login loginok --host 127.0.0.1 --port 8080 --user admin --password admin --server test_ldap
  ./svacer ldap sync_roles --login loginok --host 127.0.0.1 --port 8080 --user admin --password admin --server test_ldap
Вывод должен быть следующий:
Вывод должен быть следующий:
Line 113: Line 114:


=== Добавление серверов LDAP, работающих по TLS ===
=== Добавление серверов LDAP, работающих по TLS ===
* Изменить конфигурационный файл, следующим образом:
* Изменить конфигурационный файл следующим образом:
{
  {
      "name": "test_ldap",
    "name": "test_ldap",
      "basedn": "dc=example,dc=com",
    "basedn": "dc=example,dc=com",
      "connection": {
    "connection": {
        "url": "'''ldaps'''://ldap1.example.com:'''636'''",
      "url": "'''ldaps'''://ldap1.example.com:'''636'''",
        "connectAs": "cn=admin,dc=example,dc=com",
      "connectAs": "cn=admin,dc=example,dc=com",
        "password": "12345678",
      "password": "12345678",
        "ignoreCertCheck": '''true'''
      "ignoreCertCheck": '''true'''
      },
    },
      "user": {
    "user": {
      …..
      ...
        },       
    },       
      …..
    ...
      "enabled": true
    "enabled": true
      }
  }
 
* Убедиться, что возможен вход пользователем LDAP. Для проверки можно использовать утилиту curl, как указано в примере с основными настройками
* Убедиться, что возможен вход пользователем LDAP. Для проверки можно использовать утилиту curl, как указано в примере с основными настройками
* Для проверки сертификата LDAP сервера добавить сертификат CA (например ldap.crt) в папку с сертификатами (например, /etc/ssl/certs/) и внести следующие изменения в конфигурационный файл:
* Для проверки сертификата LDAP сервера добавить сертификат CA (например ldap.crt) в папку с сертификатами (например, /etc/ssl/certs/) и внести следующие изменения в конфигурационный файл:
  {
  {
      "name": "test_ldap",
    "name": "test_ldap",
      "basedn": "dc=example,dc=com",
    "basedn": "dc=example,dc=com",
      "connection": {
    "connection": {
        "url": "ldaps://ldap1.example.com:636",
      "url": "ldaps://ldap1.example.com:636",
        "connectAs": "cn=admin,dc=example,dc=com",
      "connectAs": "cn=admin,dc=example,dc=com",
        "password": "12345678",
      "password": "12345678",
        "ignoreCertCheck": '''false''',   
      "ignoreCertCheck": '''false''',   
        '''"caCertFiles": ["/etc/ssl/certs/ldap.crt"]'''
      '''"caCertFiles": ["/etc/ssl/certs/ldap.crt"]'''
        },
    },
        "user": {
    "user": {
          …..
      ...
        },       
    },       
        …..
    ...
      },
    },
      "enabled": true
    "enabled": true
   }
   }
* Убедиться, что в логах сервера присутствуют записи вида:
* Убедиться, что в логах сервера присутствуют записи вида:
   2023-04-24T13:49:49.298+0300 info added 1 ca certs from ldap.crt
   2023-04-24T13:49:49.298+0300 info added 1 ca certs from ldap.crt
Line 154: Line 157:
=== Добавление резервных серверов LDAP ===
=== Добавление резервных серверов LDAP ===
* Добавить в конфигурационный файл резервные сервера в поле mirrors:
* Добавить в конфигурационный файл резервные сервера в поле mirrors:
{
  {
      "name": "test_ldap",
    "name": "test_ldap",
      "basedn": "dc=example,dc=com",
    "basedn": "dc=example,dc=com",
      "connection": {
    "connection": {
        "url": "ldaps://ldap1.example.com:636",
      "url": "ldaps://ldap1.example.com:636",
        '''"mirrors": ["ldaps://ldap2.example.com:636","ldaps://ldap3.example.com:636"],'''
      '''"mirrors": ["ldaps://ldap2.example.com:636","ldaps://ldap3.example.com:636"],'''
        "connectAs": "cn=admin,dc=example,dc=com",
      "connectAs": "cn=admin,dc=example,dc=com",
        "password": "12345678",
      "password": "12345678",
                    …..
      ...
      },
    },
      "user": {
    "user": {
    …...
      ...
        },       
    },       
      …...
    ...
      "enabled": true
    "enabled": true
}
  }
 
* Проверить, что вход пользователя LDAP в систему возможен
* Проверить, что вход пользователя LDAP в систему возможен
* Изменить значение в URL на любое (чтобы сервер, указанный в URL, был не доступен)
* Изменить значение в URL на любое (чтобы сервер, указанный в URL, был не доступен)
Line 175: Line 179:
* Убедиться, что вход пользователя LDAP в систему возможен
* Убедиться, что вход пользователя LDAP в систему возможен
* Поменять значение в URL на верное
* Поменять значение в URL на верное
=== Возможные ошибки конфигурации ===
В случае ошибки входа пользователя в систему сервер выводит текстовые сообщения, указывающие на причину ошибки. Наиболее полную информацию об ошибке можно видеть, использовав флаг <code>--debug</code> при запуске сервера Svacer. Логи сервера можно посмотреть в GUI Svacer из под пользователя с правами администратора в разделе '''Settings/Server information'''. Ниже приводится таблица с перечислением возможных ошибок входа пользователя LDAP в систему.
'''Сообщения об ошибках и их возможные причины'''
{| class="wikitable" style="margin:auto"
|-
!Действие !! Сообщение !! Причина !! Решение
|-
| Вход в систему || LDAP server unavailable || 1. Нет соединения с сервером<br/>2. Неверные учетные данные для соединения с сервером || Проверить доступность сервера LDAP с хоста, на котором установлен Svacer. См. утилиту ldapsearch
|-
| Вход в систему || LDAP user is not in group||Пользователь не состоит в заданной конфигурацией группе/группах||Проверить поля user.group, group.filter, group.userMember. В списке групп, полученных с использованием group.filter должна быть хотя бы одна группа, в которую входит пользователь
|-
| Вход в систему || LDAP group not found. Check configuration || Во время поиска групп, подходящих под фильтр, не найдено ни одной группы || Проверить значение поля group.filter и значения basedn, group.basedn
|-
| Вход в систему || LDAP user not allowed or not found || Во время поиска пользователей, подходящих под фильтр, не найдено ни одного пользователя || Проверить значение поля user.filter и значения basedn, user.basedn
|-
| Вход в систему || too much record for user ('%s') found || Поиск пользователя в LDAP с указанными в конфигурации парамтерами дал несколько записей|| Проверить значение поля user.filter и значения basedn, user.basedn. Поиск всегда должен давать одну запись
|-
| Запуск сервера || caCert source [%v] ignored || Ошибка поиска сертификатов по указанному шаблону || Проверить поле connection.caCertFiles конфигурации и убедится, что по указанному в поле шаблону присутствуют сертификаты и к ним есть доступ (проверить права). Все пути должны быть абсолютными
|-
|Запуск сервера || Server [%v] configuration has ignoreCertCheck=false, but no CA certs added. In this case LDAP auth may be unpossible || Ошибка конфигурации TLS. В результате обработки значений из поля connection.CaCertFiles не было добавлено ни одного сертификата. Это приводит к тому, что Svacer не может проверить сертификат LDAP сервера, а флаг ignoreCertCheck указан в значении false, что приведет к заведомо ошибочной проверке пользователя || Проверить поле connection.caCertFiles конфигурации и убедится, что по указанному в поле шаблону присутствуют сертификаты и к ним есть доступ (проверить права). Все пути должны быть абсолютными
|}

Latest revision as of 15:55, 17 May 2023

Пример конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу

Для упрощения настройки интеграции с LDAP сервером, процесс настройки можно разбить на этапы и переходить к следующему только если успешно завершен предыдущий этап. В первую очередь необходимо выяснить актуальные параметры подключения к ldap серверу:

  • URL; Например ldap://10.11.12.13:389 или ldaps://10.11.12.13:636
  • Учетные данные с которыми будет осуществляться подключение к LDAP серверу при каждой попытке входа пользователем; Например, login: cn=admin,dc=example,dc=com, пароль: 12345678
  • Определиться с корнем LDAP дерева (базовый узел), относительно которого будут выполняться все операции; Например: dc=example,dc=com
  • Проверить, что с указанными учетными данными возможно подключение к серверу LDAP и просмотр его содержимого с некоторого узла, расположенного ниже базового; Например, с узла ou=users,dc=example,dc=com для рассматриваемого примера. Проверить можно, например, используя следующую команду:
LDAPTLS_REQCERT=never ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldaps://127.0.0.1:636
для случая поддержки TLS, или
ldapsearch -v -x -D cn=admin,dc=example,dc=com -w 12345678 -b ou=users,dc=example,dc=com -H ldap://127.0.0.1:389
для случая без поддержки TLS
  • Определиться с атрибутом записи, по которой будет осуществляться вход. Например cn, mail или sAMAccountName
  • Если используется Active Directory, целесообразно в качестве фильтра для поиска записей о пользователе указать значение (&(objectCategory=Person)(sAMAccountName=*))

Основные настройки LDAP

  • Использовать следующий шаблон конфигурации, заменив текст, выделенный жирным, актуальными данными
 {
   "name": "test_ldap",
   "basedn": "dc=example,dc=com",
   "connection": {
     "url": "ldap://ldap1.example.com:389",
     "connectAs": "cn=admin,dc=example,dc=com",
     "password": "12345678"
   },
   "user": {
     "basedn": "ou=users",
     "filter": "(&(objectClass=PosixAccount)(cn=*))",
     "login": "cn",
     "info": {
       "display": "cn",
       "email": "mail",
       "firstName": "givenName",
       "lastName": "sn"
     }
   },
   "enabled": true
 }
  • Поиск пользователя в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений user.basedn и basedn. В примере это будет узел ou=users,dc=example,dc=com. Полный DN пользователя указывать в user.basedn не нужно (можно указать пустой или не указывать вообще)
  • Убедиться, что при старте сервера в логах присутствуют строки:
 2023-04-24T12:35:44.650+0300	info	Loading ldap configuration from file: ldap2.json
 2023-04-24T12:35:44.650+0300	info	LDAP server added: test_ldap
  • Выполнить команду в cli, заменив хост и порт актуальными значениями
 ./svacer ldap servers --host 127.0.0.1 --port 8080
  • Убедиться, что в выводе команды присутствуют записи вида:
 Available LDAP servers list:
 Name: test_ldap	Url: ldap://ldap1.example.com:389
  • Убедиться, что возможен вход тестовым пользователем через cli:
 curl -X POST --data '{"login":"test_login","password":"test_password","auth_type":"ldap","server":"test_ldap"}' 127.0.0.1:8080/api/public/login

Вывод должен быть вида:

 {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODI5MzYxODcsImlhdCI6MTY4MjMzMTM4Nywicm9sZXMiOlsiYWRtaW5zIl0sInVzZXIiO ..."}

Добавление проверки по группе LDAP

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

  • Формируется список всех возможных групп на основе значения group.filter
  • Для каждой сформированной группы формируется список входящих в нее пользователей по следующему принципу:
    • Каждое значение атрибута group.userMember (их может быть несколько) узла LDAP (соответствующего группе) однозначно идентифицирует некоторого пользователя
    • Пользователь входит в группу, если значение атрибута user.group пользователя входит в множество записей, полученных в пункте выше

Для настройки проверки по группе целесообразно выполнить следующие действия:

  • Определиться с узлом в LDAP, относительно которого будет производится поиск групп (поле group.basedn). Поиск групп в каталоге LDAP будет производится от узла, DN которого является конкатенацией значений group.basedn и basedn. В примере это будет узел ou=svacer_groups,ou=groups,dc=example,dc=com
  • Для Active Directory в поле filter можно указать, например, (&(objectCategory=Group)(cn=dep_ivanov)), что будет означать группу dep_ivanov.
  • Изменить конфигурационный файл следующим образом:
 {
   "name": "test_ldap",
    ...
   },
   "user": {
     ...
     "group": "dn",
   },      
   "useGroup": true,
   "group": {'
   "basedn": "ou=svacer_groups,ou=groups",
   "filter": "(&(objectClass=groupOfNames)(cn=*))",
   "userMember": "member",
   "display":"cn",
   },
   "enabled": true
 }
  • Перезапустить Svacer
  • Убедиться, что возможен вход пользователей, состоящих в группе/группах, и не возможен вход пользователей, не состоящих в группе/группах.

Добавление привязки ролей Svacer к группам LDAP

  • Добавить нужные группы в Svacer. Например admins и users.
  • Определиться в каком атрибуте LDAP группы будет хранится имя роли (все сравнения будут чувствительны к регистру). Например, пусть это будет атрибут cn
  • Изменить конфигурационный файл следующим образом
 {
   "name": "test_ldap",
   ...
   "user": {
	   ...
   },      
    "useGroup": true, 
    "group": { 
    "basedn": "ou=svacer_groups,ou=groups", 
    "filter": "(&(objectClass=groupOfNames)(cn=*))", 
    "userMember": "member", 
    "display": "cn", 
    "svacerRole": "cn" 
    }, 
   "enabled": true
 }
  • Убедиться, что пользователю назначаются роли, выполнив команду в cli (требуются учетные данные администратора для проверки; по умолчанию admin / admin). Для проверки привязки ролей Svacer к пользователю Loginok можно использовать следующую команду:
./svacer ldap sync_roles --login loginok --host 127.0.0.1 --port 8080 --user admin --password admin --server test_ldap

Вывод должен быть следующий:

 SvacerUserID: 457039b4-4aef-4857-831d-1c080ea154d4
 SvacerUserLogin: loginok
 LDAPUserDN: cn=loginok,ou=users,dc=example,dc=com
 Roles: [314e7571-706c-4463-9280-6a4eee03b42d]
 Links: [cn=admins,ou=svacer_groups,ou=groups,dc=example,dc=com -> admins 	(314e7571-706c-4463-9280-6a4eee03b42d)]
 Applied: false

Добавление серверов LDAP, работающих по TLS

  • Изменить конфигурационный файл следующим образом:
 {
   "name": "test_ldap",
   "basedn": "dc=example,dc=com",
   "connection": {
     "url": "ldaps://ldap1.example.com:636",
     "connectAs": "cn=admin,dc=example,dc=com",
     "password": "12345678",
     "ignoreCertCheck": true
   },
   "user": {
     ...
   },      
   ...
   "enabled": true
 }
  • Убедиться, что возможен вход пользователем LDAP. Для проверки можно использовать утилиту curl, как указано в примере с основными настройками
  • Для проверки сертификата LDAP сервера добавить сертификат CA (например ldap.crt) в папку с сертификатами (например, /etc/ssl/certs/) и внести следующие изменения в конфигурационный файл:
{
   "name": "test_ldap",
   "basedn": "dc=example,dc=com",
   "connection": {
     "url": "ldaps://ldap1.example.com:636",
     "connectAs": "cn=admin,dc=example,dc=com",
     "password": "12345678",
     "ignoreCertCheck": false,  
     "caCertFiles": ["/etc/ssl/certs/ldap.crt"]
   },
   "user": {
     ...
   },      
   ...
   },
   "enabled": true
 }
  • Убедиться, что в логах сервера присутствуют записи вида:
 2023-04-24T13:49:49.298+0300	info	added 1 ca certs from ldap.crt
  • Убедиться, что пользователь LDAP может зайти в систему

Добавление резервных серверов LDAP

  • Добавить в конфигурационный файл резервные сервера в поле mirrors:
 {
   "name": "test_ldap",
   "basedn": "dc=example,dc=com",
   "connection": {
     "url": "ldaps://ldap1.example.com:636",
     "mirrors": ["ldaps://ldap2.example.com:636","ldaps://ldap3.example.com:636"],
     "connectAs": "cn=admin,dc=example,dc=com",
     "password": "12345678",
     ...
   },
   "user": {
     ...
   },      
   ...
   "enabled": true
 }
  • Проверить, что вход пользователя LDAP в систему возможен
  • Изменить значение в URL на любое (чтобы сервер, указанный в URL, был не доступен)
  • Перезапустить Svacer
  • Убедиться, что вход пользователя LDAP в систему возможен
  • Поменять значение в URL на верное

Возможные ошибки конфигурации

В случае ошибки входа пользователя в систему сервер выводит текстовые сообщения, указывающие на причину ошибки. Наиболее полную информацию об ошибке можно видеть, использовав флаг --debug при запуске сервера Svacer. Логи сервера можно посмотреть в GUI Svacer из под пользователя с правами администратора в разделе Settings/Server information. Ниже приводится таблица с перечислением возможных ошибок входа пользователя LDAP в систему.

Сообщения об ошибках и их возможные причины

Действие Сообщение Причина Решение
Вход в систему LDAP server unavailable 1. Нет соединения с сервером
2. Неверные учетные данные для соединения с сервером
Проверить доступность сервера LDAP с хоста, на котором установлен Svacer. См. утилиту ldapsearch
Вход в систему LDAP user is not in group Пользователь не состоит в заданной конфигурацией группе/группах Проверить поля user.group, group.filter, group.userMember. В списке групп, полученных с использованием group.filter должна быть хотя бы одна группа, в которую входит пользователь
Вход в систему LDAP group not found. Check configuration Во время поиска групп, подходящих под фильтр, не найдено ни одной группы Проверить значение поля group.filter и значения basedn, group.basedn
Вход в систему LDAP user not allowed or not found Во время поиска пользователей, подходящих под фильтр, не найдено ни одного пользователя Проверить значение поля user.filter и значения basedn, user.basedn
Вход в систему too much record for user ('%s') found Поиск пользователя в LDAP с указанными в конфигурации парамтерами дал несколько записей Проверить значение поля user.filter и значения basedn, user.basedn. Поиск всегда должен давать одну запись
Запуск сервера caCert source [%v] ignored Ошибка поиска сертификатов по указанному шаблону Проверить поле connection.caCertFiles конфигурации и убедится, что по указанному в поле шаблону присутствуют сертификаты и к ним есть доступ (проверить права). Все пути должны быть абсолютными
Запуск сервера Server [%v] configuration has ignoreCertCheck=false, but no CA certs added. In this case LDAP auth may be unpossible Ошибка конфигурации TLS. В результате обработки значений из поля connection.CaCertFiles не было добавлено ни одного сертификата. Это приводит к тому, что Svacer не может проверить сертификат LDAP сервера, а флаг ignoreCertCheck указан в значении false, что приведет к заведомо ошибочной проверке пользователя Проверить поле connection.caCertFiles конфигурации и убедится, что по указанному в поле шаблону присутствуют сертификаты и к ним есть доступ (проверить права). Все пути должны быть абсолютными