失败记录
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配置问题/属性缺失导致的。
网友评论