美文网首页
SSSD连接LDAP配置

SSSD连接LDAP配置

作者: gregocean | 来源:发表于2019-04-05 12:24 被阅读0次

    失败记录

    SSSD概念

    System Security Services Dameon,能够实现linux的远程命名服务和远程认证功能。

    一个守护进程,该进程可以用来访问多种验证服务器,如LDAP,Kerberos等,并提供授权。
    SSSD是 介于本地用户和数据存储之间的进程,本地客户端首先连接SSSD,再由SSSD联系外部资源提供者(一台远程服务器)

    优点:

    一个守护进程,该进程可以用来访问多种验证服务器,如LDAP,Kerberos等,并提供授权。SSSD是 介于本地用户和数据存储之间的进程,本地客户端首先连接SSSD,再由SSSD联系外部资源提供者(一台远程服务器)
    (1)避免了本地每个客户端程序对认证服务器大量连接,所有本地程序仅联系SSSD,由SSSD连接认证服务器或SSSD缓存,有效的降低了负载
    (2)允许离线授权。SSSD可以缓存远程服务器的用户认证身份,这允许在远程认证服务器宕机时,继续成功授权用户访问必要的资源。
    https://blog.csdn.net/liu16659/article/details/80997333

    具体使用目的

    当前hadoop集群使用kerberos进行服务间与外部jdbc用户的认证,使用公司LDAP作为上层应用(HUE等)的用户管理认证,使用sentry用来基本授权,sentry用户映射的是各服务所在机器的Linux用户。

    虽然不用在上层应用频繁添加用户,但是还需要在授权阶段在机器上加用户
    虽然可以用ansible批量添加,但依然需要手动触发。

    验证LDAP

    随便找了一台能连上公司LDAP的机器,可在安装ldap客户端

    yum install openldap-clients
    

    后使用

    ldapsearch -LLL -h host -p port -x -b "basedn" -D "binddn" -w  password -s sub "cn=username"
    

    进行验证连通性,获取到的用户信息格式是

    dn: cn=username,[basedn]
    cn: username
    sn: username@company.com
    objectClass: person
    

    SSSD配置

    开始几个步骤主要参考:
    https://github.com/wbwangk/wbwangk.github.io/wiki/SSSD
    以root身份操作

    sudo yum -y install sssd
    

    vim /etc/sssd/sssd.conf进行配置,其中domains参数只是方便切换不同的配置集合,没有实际意义。[sssd]中与的配置xxx与底下的[domain/xxx]对应起来就好。

    [sssd]
    services = nss,pam
    domains = default
    
    [nss]
    debug_level = 9
    filter_groups = root
    filter_users = root
    entry_cache_timeout = 300
    entry_cache_nowait_percentage = 75
    
    [domain/default]
    debug_level = 9
    auth_provider = ldap
    id_provider = ldap
    chpass_provider = ldap
    
    ldap_schema = rfc2307
    ldap_uri = ldap://host:port
    ldap_search_base = [basedn]
    
    access_provider = ldap
    # access_filter这个参数尝试了很多种写法,网上众说纷纭,最后发现似乎不用,
    # ldap_search_base+ ldap_user_name+ ldap_user_object_class就能定位搜索到用户信息了
    
    # ldap_access_filter = (&(&(cn=unix)(memberUid=*)))
    # ldap_access_filter = (&(objectclass=posixAccount))
    # ldap_access_filter = "(&(cn=unix)(|(&(objectClass=posixGroup)(memberUid=*))))
    # ldap_access_filter = (&(objectclass=person)(memberof=[basedn]))
    # ldap_access_filter = memberof=[basedn]
    # ldap_access_filter = (objectclass=person)
    ldap_user_object_class = person
    ldap_user_uid_number = cn
    ldap_user_name = cn
    #ldap_user_primary_group = primaryGroupID
    #case_sensitive = false
    #ldap_use_tokengroups = False
    #use_fully_qualified_names = True
    ldap_default_bind_dn = [binddn] # 接入账号
    ldap_default_authtok_type = password # 验证方式
    ldap_default_authtok = xxx # 密码
    ldap_tls_reqcert = never
    ldap_id_use_start_tls = False
    cache_credentials = True
    entry_cache_timeout = 600
    ldap_network_timeout = 3
    

    启动或重启服务

    service sssd start/restart
    

    使用id username或者su username进行验证,始终报No such user
    使用下面方法查看日志:
    https://fedoraproject.org/wiki/How_to_debug_SSSD_problems
    开始看的的问题是

    (Tue Apr  2 10:20:39 2019) [sssd[be[default]]] [sdap_search_user_process] (0x0400): Search for users, returned 0 results.
    (Tue Apr  2 10:20:39 2019) [sssd[be[default]]] [sdap_get_users_done] (0x0040): Failed to retrieve users
    

    经过各种参数调整,已经能retrive users了(即上述最终的配置),日志中显示的搜索路径与手动ldapsearch看起来也是一致的:

    (Fri Apr  5 12:08:25 2019) [sssd[be[default]]] [sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(cn=username)(objectclass=person)(cn=*)(&(cn=*)(!(cn=0))))][basedn].
    

    但依然在id username时No such user

    ...
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_search_user_process] (0x0400): Search for users, returned 1 results.
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_search_user_process] (0x4000): Retrieved total 1 users
    ...
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_attrs_get_sid_str] (0x1000): No [objectSID] attribute. [0][Success]
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_user] (0x4000): objectSID: not available for user
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_user] (0x4000): Failed to retrieve UUID [2][No such file or directory].
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_get_primary_name] (0x0400): Processing object username
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_user] (0x0400): Processing user username
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_user] (0x0020): no uid provided for [username] in domain [default].
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_user] (0x0020): Failed to save user [username]
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_save_users] (0x0040): Failed to store user 0. Ignoring.
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [ldb] (0x4000): commit ldb transaction (nesting: 0)
    (Wed Apr  3 11:55:43 2019) [sssd[be[default]]] [sdap_get_users_done] (0x4000): Saving 1 Users - Done
    

    能看到的信息是因为找不到uid与guid属性,所以无法自动创建linux用户。
    希望有经验的朋友能支个招,或者确认一下是不是公司LDAP配置问题/属性缺失导致的。

    相关文章

      网友评论

          本文标题:SSSD连接LDAP配置

          本文链接:https://www.haomeiwen.com/subject/myuhiqtx.html