Базовая информация
Я запускаю 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, который необходим для сопоставления идентификаторов.
У вас есть три варианта:
ad_enabled_domains