前言
OpenLDAP是一款轻量级目录访问协议,是一套开源的集中账号管理架构,且被众多系统支持(例如: 各种Linux发行版本、Windows、Mac OS、IBM AIX等众多平台),被广大互联网公司和软件所采用(例如:jumpserver,jenkins,zabbix,gitlab,wiki,samba,sqladmin等各类常用软件)
总之,任何内部 常用的可使用账号登陆的平台或软件基本都会支持关联ldap。它通常被用于关联各个平台或服务,达到统一身份认证的效果,一个账号和密码即可登陆各个平台,避免了一个用户在多个平台使用不同账号和密码,避免了人员流动导致的账号的创建和注销的流程相对复杂的问题。
由于公司某一段时间推进使用Openldap来关联了公司内部使用的各平台,进行了统一身份认证的管理,使用phpldapadmin作为web管理工具进行界面维护。我这边就好奇的复现了一下,发现网上的教程或操作说明都有一些坑,于是就写篇文档记录一下(仿照线上复现但不含生产数据)
环境
环境是必须要说明的,因为网上的大部分的可能有坑的文章,实际都是在当时可行的。而随着时间,基础环境或软件版本有变化,导致的照着以前的文档,就会出现问题。例如:某天写了openvpn的文档,结果第二天软件升级,结构有调整,继续使用yum安装最新的软件,照着过期的文档配置的时候会直接掉坑里。
系统:
Centos7.2
Centos7.6
两个系统是由于要对比不同系统是否有差异,后期将两个系统调整为ldap双主
yum源:
http://mirrors.aliyun.com/repo/Centos-7.repo
安装包:
openldap 2.4.44
OpenLDAP安装配置
防火墙
对于防火墙的设置,当处于内网或云服务环境通常是关闭防火墙,避免影响服务间的通信。
<1>关闭 SELinux 防火墙
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
<2>关闭iptables or firewalld
service iptables stop
chkconfig iptables offsystemctl stop firewalld
systemctl disable firewalld
安装包
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
配置OpenLDAP
OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,不再使用slapd.conf作为配置文件,配置slapd.conf的为老文档
<1>生成密码
slappasswd -s 你要设置的密码
将生成的密码保存,之后会用到
slappasswd -s 1ntoeos
<2>修改olcDatabase={2}hdb.ldif文件
(注意:红框位置)
vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
在此文件的最后一行添加olcRootPW+第一步生成的密码,“:” 和密码之间有空格
修改域信息:
olcSuffix: dc=xxx,dc=com
olcRootDN: cn=xxx,dc=xxx,dc=com
xxx部份可根据需求自定义名称(cn表示OpenLDAP管理员的用户名,olcRootDN整条将会用于管理员的登陆,olcRootPW是该用户对应的密码)
<3>修改olcDatabase={1}monitor.ldif文件
修改红框位置内容为第2步配置的DN
<4>验证配置
slaptest -u
由于收到修改了2个文件,checksum忽略即可,testing succeeded即为成功
<5>启动OpenLDAP
systemctl enable slapd;systemctl start slapd
如果启动有报错,systemctl status slapd,查看报错原因
当时眼花文件写错或有环境问题,在Centos7.6同样的操作启动成功。直接将Centos7.6的/etc/openldap覆盖到Centos7.2中的同样位置,仅修改密码后成功启动。
数据库配置
<1>配置OpenLDAP数据库
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 600 -R /var/lib/ldap
<2>导入 Schema
Schema文件位于/etc/openldap/schema/下
schema控制着条目拥有哪些对象类和属性,可自行根据需求导入,通常导入前3即可
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
or
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
<3>修改/usr/share/migrationtools/migrate_common.ph文件
这个文件主要是用于生成ldif文件
根据第2,3步配置的dn,修改如下配置,
$DEFAULT_MAIL_DOMAIN = "elst.com";
$DEFAULT_BASE = "dc=elst,dc=com";
$EXTENDED_SCHEMA = 1;
<4>配置基础数据库
注意dn要根据第2,3步的配置填写
注意每行末尾不要留空格
mkdir /etc/openldap/onlineldif/
cd /etc/openldap/onlineldif/cat base.ldifdn: dc=elst,dc=com
o: elst com
dc: elst
objectClass: top
objectClass: dcObject
objectclass: organizationdn: cn=Manager,dc=elst,dc=com
cn: Manager
objectClass: organizationalRole
description: Directory Managerdn: ou=People,dc=elst,dc=com
ou: People
objectClass: top
objectClass: organizationalUnitdn: ou=Group,dc=elst,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
<5>导入基础库
ldapadd -x -D cn=Manager,dc=elst,dc=com -f ./base.ldif -w 你的密码
出现adding即为成功
<6>验证
ldapsearch -x -b 'dc=elst,dc=com' '(objectClass=*)'
出现success即为成功.如出现下图或其他问题,请检测ldif文件
PhpLDAPAdmin的安装配置
安装包
<1>
yum -y install epel-release
yum clean all
yum makecache
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml phpldapadmin
配置
<1>配置http
vim /etc/httpd/conf.d/phpldapadmin.conf
<IfModule mod_authz_core.c># Apache 2.4Require all granted </IfModule>
http 2.4 设置方法
根据需求控制访问
开放外网访问
Require all granted
or
指定可访问的ip段
Require local
Require ip 192.168.0
<2>配置phpldapadmin登陆方式
vim /etc/phpldapadmin/config.php#398行,dn为使用dn登陆,cn为使用用户名登陆,可选其一
$servers->setValue('login','attr','dn');
or
$servers->setValue('login','attr','cn');#460行,关闭匿名登录,必做
$servers->setValue('login','anon_bind',false);#519行,保证用户属性的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
<3>重启httpd
systemctl restart httpd
systemctl enable httpd
如对端口有需求或默认的80已被占用,可修改/etc/httpd/conf/httpd.conf的Listen数值
登陆
<1>访问方式
浏览器中输入http://ldapadmin外网ip:端口/phpldapadmin
例如:
http://123.12.3.4:13445/phpldapadmin
<2>登陆,输入基础数据库ldif文件中配置的dn或cn,密码是导入时的密码
<3>如下图即为成功
到这一步通常是配置完了。接着就是在phpldapadmin,中配置用户并关联到各个工具中,进行统一认证。