sssd 简介
System Security Services Daemon(简称SSSD)是一种用于Linux和Unix系统的系统服务,它提供了身份验证、身份管理和访问控制等安全功能,可以将多个身份源(如本地LDAP、Active Directory等)整合到一个单一的身份信息库中,简化系统管理员的身份管理任务。
● sssd 的主要功能包括:
- 身份认证:SSSD 可用于本地用户和密码的验证,也可以将外部身份源(如:LDAP、Kerberos、Active、Directory 等)整合并进行验证。
- 身份管理:SSSD 提供了用户和组的管理功能,可以从多个身份源中集中管理用户和组信息,同时支持动态组成员身份管理。
- 访问控制:SSSD 可以对用户或组进行访问控制,防止未授权用户访问敏感数据。
- 缓存管理:SSSD 会缓存身份验证和授权信息,以提高系统性能。
PLUGGABLE-AUTHENTICATION-MODULES(PAM):SSSD支持PAM,可以使用PAM模块集成到许多应用程序中。
SSSD的配置文件位于/etc/sssd/sssd.conf,管理员可在此文件中配置SSSD的参数。
● 大致实现的过程
SSSD 是一个守护进程,一般在启动时被 systemd 自动启动。在启动时,SSSD 会创建一个监听器,它会监听来自 PAM 和 NSS 的请求。
当用户进行身份认证时,PAM(Pluggable Authentication Module,可插入身份认证模块)将会向 SSSD 发送请求,并等待 SSSD 的处理结果。SSSD 接收到请求后,会查找本地缓存并尝试从远端身份认证资源(如 LDAP)中获取用户的身份认证信息,如用户名、密码等。
如果 SSSD 找到了符合条件的用户信息,它会将该信息写入到本地用户缓存中,并将认证结果返回给 PAM。PAM 最终会将认证结果返回给应用程序。
当应用程序需要访问用户身份信息时,会向 NSS (Name Service Switch) 发送请求。NSS 会将请求转发给 SSSD,并等待 SSSD 的响应。
SSSD 接受到 NSS 的请求后,会查找本地缓存并尝试从远端身份认证资源(如 LDAP)中获取用户的身份信息,比如用户ID、组ID 等。
如果 SSSD 找到了符合条件的用户信息,它会将该信息写入到本地缓存中,并将查询结果返回给 NSS。NSS 最终会将查询结果返回给应用程序。
需要注意的是,SSSD 的实现过程可能因不同的身份认证方案、工具链和系统环境而有所不同。以上是一个大致的过程,其实际实现细节可以在 SSSD 源码中查看。
sssd 安装与使用
支持 Centos7
安装 sssd
● yum 安装 sssd
yum -y install sssd authconfig
配置 sssd
● 修改配置文件:/etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam, ssh, sudo
domains = cedongli
[pam]
offline_credentials_expiration = 1
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
[nss]
filter_users = zabbix,centos,root,zceo,www,ldap,named,avahi,haldaemon,dbus,radiusd,news,nscd,weblogic,tomcat,oracle,ups,mc,dev,ops
[domain/cedongli]
account_cache_expiration = 1
cache_credentials = True
entry_cache_timeout = 300
id_provider = ldap
sudo_provider = ldap
ldap_sudo_search_base = ou=sudoers,dc=cedongli,dc=com # sudo权限
auth_provider = ldap
ldap_search_base = ou=People,dc=cedongli,dc=com # 用户
ldap_group_search_base = ou=Group,dc=cedongli,dc=com # 组
ldap_user_ssh_public_key = sshPublicKey
ldap_tls_reqcert = never
ldap_uri = ldap://10.20.208.233:389 # ldap服务地址
ldap_sudo_smart_refresh_interval = 30
ldap_sudo_full_refresh_interval = 416
● 修改配置文件权限
chmod 600 /etc/sssd/sssd.conf
启动 sssd
systemctl restart sssd && systemctl enable sssd
开启 sssd 认证
authconfig --enablesssd --enablesssdauth --enableshadow --enablemkhomedir --disablelocauthorize --disableldap --disableldapauth --disableldaptls --disableforcelegacy --update
修改 sshd 并重启
sed -ri "s##AuthorizedKeysCommand none#AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys#g" /etc/ssh/sshd_config
sed -ri "s##AuthorizedKeysCommandUser nobody#AuthorizedKeysCommandUser root#g" /etc/ssh/sshd_config
systemctl restart sshd
修改 nsswitch
echo "sudoers: files sss" >> /etc/nsswitch.conf
验证
● 验证是否可以使用 ldap 认证,使用 id lipengfei2查看用户是否已经存在,并且是否与 ldap 配置的信息一致
[root@openldap ~]# id lipengfei2
uid=5001(lipengfei2) gid=5001(lipengfei2) groups=5001(lipengfei2)