Назад | Перейти на главную страницу

SSSD на Centos, поиск в Active Directory не дает результатов

Базовая информация

Я запускаю sssd (1.13.3-22) на Centos (6.8) для аутентификации в Active Directory (2012). Я не хочу использовать номера uid, хранящиеся в AD, поэтому для ldap_id_mapping установлено значение true.

Когда я запускаю id ValidUsername, я получаю ответ «Нет такого пользователя». Я смотрю в журнал домена sssd и вижу, что поиск ldap для ValidUsername не дал результатов. Когда я запускаю тот же запрос с ldapsearch, он также не возвращает результатов, но я могу изменить запрос, чтобы исключить uidNumber, и он вернет результат. См. Подробности ниже для информации о запросе ldap.

Подробная информация

sssd_VALID.DOMAIN.CORP.log Фрагмент

[sdap_search_user_next_base] (0x0400): Searching for users with base [DC=valid,DC=domain,DC=corp]
[sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*)(&(uidNumber=*)(!(uidNumber=0))))][DC=valid,DC=domain,DC=corp].
[sdap_get_generic_op_finished] (0x0400): Search result: Success(0), no errmsg set
[sdap_search_user_process] (0x0400): Search for users, returned 0 results.
[sdap_get_users_done] (0x0040): Failed to retrieve users
[sysdb_search_by_name] (0x0400): No such entry
[sysdb_delete_user] (0x0400): Error: 2 (No such file or directory)
[acctinfo_callback] (0x0100): Request processed. Returned 0,0,Success
[be_ptask_online_cb] (0x0400): Back end is online

Используемый sssd-запрос ldap указан в журнале по адресу [sdap_get_generic_ext_step]. Если я возьму тот же запрос и протестирую его, запустив поиск ldap, я также не получу результата:

ldapsearch -LLL -Y GSSAPI -N -H ldap://dc1.valid.domain.corp -b "DC=valid,DC=domain,DC=corp" '(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*)(&(uidNumber=*)(!(uidNumber=0))))'

Однако, если я удалю из запроса части поиска uidNumber, в результате я получу ожидаемые пользовательские данные:

ldapsearch -LLL -Y GSSAPI -N -H ldap://dc1.valid.domain.corp -b "DC=valid,DC=domain,DC=corp" '(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*))'

Если для ldap_id_mapping установлено значение true, почему sssd запрашивает в AD данные uidNumber? Я проверил атрибуты пользователя, и атрибут uidNumber не имеет значения, поэтому sssd не будет работать, пока я не заполню это значение. Microsoft отказывается от инструментов управления атрибутами unix, поэтому я бы предпочел не возиться с ними.

Я бы не хотел использовать winbind, который раньше был для меня ненадежным.

Есть ли какой-либо элемент конфигурации, который я могу использовать, чтобы заставить sssd отправлять действительный поисковый запрос пользователя? Или мне что-то еще не хватает?

sssd.conf

[sssd]
config_file_version = 2
debug_level = 6
domains = VALID.DOMAIN.CORP
services = nss, pam

[nss]
debug_level = 6

[pam]
debug_level = 6

[domain/VALID.DOMAIN.CORP]
debug_level = 8

id_provider = ad
access_provider = ad
auth_provider = ad
chpass_provider = ad
subdomains_provider = none

dyndns_update = false

ad_server = dc1.VALID.DOMAIN.corp
ad_backup_server = dc2.VALID.DOMAIN.corp

ldap_id_mapping = true
ldap_schema = ad

fallback_homedir = /home/%d/%u
default_shell = /bin/bash

smb.conf

workgroup = VALID
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
realm = VALID.DOMAIN.CORP
security = ads
log file = /var/log/samba/log.%m
max log size = 50

Это потому, что вы установили для поставщика поддоменов значение none. Это немного противоречит интуиции, но провайдер поддоменов также получает информацию о присоединенном домене, включая SID, который необходим для сопоставления идентификаторов.

У вас есть три варианта:

  1. включить поставщика поддоменов. Я не знаю, почему вы его отключили, большинство людей делают это, чтобы обойти недоступность доверенного домена
  2. если вам нужно отключить провайдера поддоменов, вам нужно вручную установить SID домена, см. man sssd-ldap и выполните поиск по запросу "domain_sid"
  3. Если вы используете 7.3, вы можете включить присоединенный домен только с помощью ad_enabled_domains