基本情報
Centos(6.8)でsssd(1.13.3-22)を実行して、Active Directory(2012)で認証しています。 ADに保存されているuid番号を使用したくないので、ldap_id_mappingをtrueに設定しました。
「idValidUsername」を実行すると、「NoSuchUser」という応答が返されます。 sssdドメインログを調べると、ValidUsernameのLDAP検索で結果が返されなかったことがわかります。 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
使用されているLDAPクエリsssdは、ログの[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に設定したためです。少し直感に反しますが、サブドメインプロバイダーは、IDマッピングに必要なSIDなど、参加しているドメインに関する情報も取得します。
3つのオプションがあります。
ad_enabled_domains
を使用してのみ参加ドメインを有効にできます