一、OpenLDAP介绍
LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议。LDAP实现提供被称为目录服务的信息服务,可以看做是一张特殊的数据库系统。可以有效的解决众多网络服务的用户账户问题,规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。
二、OpenLDAP Server 端部署
1. 安装 OpenLDAP 服务
yum -y install openldap openldap-*
OpenLDAP 配置文件信息:
- /etc/openldap/slapd.conf:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
- /etc/openldap/slapd.d/*:这下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,这里的东西就要重新生成
- /etc/openldap/schema/*:OpenLDAP的schema存放的地方
- /var/lib/ldap/*:OpenLDAP的数据文件
- /usr/share/openldap-servers/slapd.conf.obsolete 模板配置文件
- /usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件
2. 配置 OpenLDAP,包括准备DB_CONFIG和slapd.conf
cd /etc/openldap/ cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
3. 配置 OpenLDAP 管理员密码
$ slappasswd -s 123456 {SSHA}Ct24HfPbIOy7tqf++84CL1hfEFC6VYlk (密码需保存,后面会用上)
4. 修改slapd.conf,主要配置dc和rootpw,rootpw配置为上述步骤中的密码
database bdb suffix "dc=kwang,dc=cn" checkpoint 1024 15 rootdn "cn=Manager,dc=kwang,dc=cn" rootpw {SSHA}Ct24HfPbIOy7tqf++84CL1hfEFC6VYlk
5. 修改目录权限
chown -R ldap:ldap /etc/openldap/ chown -R ldap:ldap /var/lib/ldap/
6. 启动slapd服务
$ /etc/init.d/slapd start Starting slapd: [ OK ] $ /etc/init.d/slapd status slapd (pid 20539) is running...
$ chkconfig slapd on # 设置开机启动 $ lsof -i:389 #检测端口是否在监听 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME slapd 20539 ldap 7u IPv4 11741440 0t0 TCP *:ldap (LISTEN)
7. 测试/etc/openldap/slapd.conf配置是否正确
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
出现如下结果则表示配置文件已正确配置:
config file testing succeeded
三、OpenLDAP Server端安装migrationtools,创建根域目录
1. 安装migrationtools工具
migrationtools工具实现OpenLDAP用户及用户组的添加
yum install migrationtools -y
2. 编辑/usr/share/migrationtools/migrate_common.ph文件,生成基础组
将 DEFAULT_MAIL_DOMAIN 和 DEFAULT_BASE 值和 slapd.conf 文件对应。
# Default DNS domain $DEFAULT_MAIL_DOMAIN = "kwang.com"; # Default base $DEFAULT_BASE = "dc=kwang,dc=com";
3. 创建 OpenLDAP 根域条目 base.ldif 文件
对生成的 base.ldif 文件编辑,将不需要的条目删除。
dn: dc=kwang,dc=com dc: kwang objectClass: top objectClass: domain dn: ou=People,dc=kwang,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=kwang,dc=com ou: Group objectClass: top objectClass: organizationalUnit
4. 添加 base.ldif 到 ldap 中
ldapadd -x -D "cn=Manager,dc=kwang,dc=com" -w 123456 -f base.ldif
5. 查询 ldap 中已添加的条目
$ ldapsearch -x -b "dc=kwang,dc=com" # extended LDIF # # LDAPv3 # basewith scope subtree # filter: (objectclass=*) # requesting: ALL # # kwang.lan dn: dc=kwang,dc=com dc: kwang objectClass: top objectClass: domain # People, kwang.lan dn: ou=People,dc=kwang,dc=com ou: People objectClass: top objectClass: organizationalUnit # Group, kwang.lan dn: ou=Group,dc=kwang,dc=com ou: Group objectClass: top objectClass: organizationalUnit # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
至此,OpenLDAP server端环境已部署。
四、OpenLDAP client端部署
客户端部署有两种方式 nslcd 和 SSSD,两种方式基本一致,SSSD相比更新,具有缓存功能,在LDAP server宕机时,依然能正常工作。因此本文主要介绍 SSSD 部署。
4.1 通过配置文件部署
1. 安装 SSSD
yum install openldap-clients nss-pam-ldapd -y yum install authconfig sssd-ldap sssd -y
2. 编辑 /etc/openldap/ldap.conf文件
# LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=kwang,dc=com URI ldaps://:389/ #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never TLS_CACERTDIR /etc/openldap/certs
3. 编辑/etc/sssd/sssd.conf文件
[sssd] config_file_version = 2 services = nss, pam domains = default debug_level = 5 [nss] filter_users = root,ldap,named,avahi,haldaemon,dbus,radiusd,news,nscd [domain/default] id_provider = ldap auth_provider = ldap ldap_search_base = dc=kwang,dc=com ldap_tls_reqcert = never ldap_uri = ldaps://
4. 编辑/etc/nsswitch.conf文件
passwd: files sss shadow: files sss group: files sss
#如果本地用户和ldap用户,但是希望以ldap用户为准,file为补充时,可以修改/etc/nsswitch.conf
passwd: sss files
shadow: sss files
group: sss files
5. 编辑/etc/pam.d/system-auth 文件
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass #auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_sss.so use_first_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_sss.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so session optional pam_mkhomedir.so
6. 编辑/etc/pam.d/password-auth-ac 文件
#%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass #auth requisite pam_succeed_if.so uid >= 500 quiet 必须注释掉 auth sufficient pam_sss.so use_first_pass auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_sss.so account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_sss.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_sss.so session optional pam_mkhomedir.so
7. 启动服务
chmod 600 /etc/sssd/sssd.conf /etc/init.d/sssd restart
4.2 通过命令行部署
#安装程序 yum install openldap-clients nss-pam-ldapd -y yum install authconfig sssd-ldap sssd -y #配置系统授权使用sss和ldap authconfig --enablemkhomedir \ --enableldaptls\ --enableldap\ --enableldapauth\ --ldapserver=ldaps://\ --ldapbasedn="dc=kwang,dc=com"\ --enableshadow\ --update #调整参数 sed -i '/uid >= 500/s/^/#/' /etc/pam.d/system-auth-ac sed -i '/uid >= 500/s/^/#/' /etc/pam.d/password-auth-ac sed -i '/\[domain\/default\]/a\ldap_tls_reqcert = never' /etc/sssd/sssd.conf /etc/init.d/sssd restart
4.3 ldap 常用操作
1. 验证连通性
getent passwd kwang id kwang
2. 缓存刷新
#一般情况手动刷新缓存 sss_cache -E #sssd会将缓存信息保存在本地,特殊情况下,缓存存在冲突的情况,可以删除本地缓存,重启服务 rm -rf /var/lib/sss/db/*
至此,OpenLDAP server端和client端均已部署完成。
【参考资料】
[1]. CentOS6.7 安装配置LDAP Server
[2]. CentOS 6.9下OpenLDAP 的安装与配置