前言
事情的起因是最近开始的HW行动,我们环境的NIFI集群由于是内隔离,所以没有开启任何安全防护措施(除了防火墙),因此内网嗅探工具检测出了未授权访问漏洞。为了在不开启kerberos的前提的进行漏洞修复,我们认识到KNOX这个工具,发现它能够和许多大数据组件进行集成,做正向代理或者SSO单点登录。
大伙一合计,既然本身就要做安全集群,那就折腾一下,最终整了出来,安全复扫也没有再扫出漏洞了
正文
OpenLDAP介绍
LDIF文件书写规则
- LDIF文件每行的结尾不允许有空格或者制表符;
- LDIF文件允许相关属性可以重复赋值并使用;
- LDIF文件以.ldif结尾命名;
- LDIF文件中以#号开头的一行为注释,可以作为解释使用;
- LDIF文件所有的赋值方式为:属性:[空格]属性值;
- LDIF文件通过空行来定义一个条目,空格前为一个条目,空格后为另一个条目的开始。
OpenLDAP部署
安装服务
检查服务器是否已安装openldap相关服务,若没用使用yum进行安装,openldap服务在Centos的ISO镜像中包含,不需要额外引入软件源:
[lijiadong@hostname ~]$ rpm -qa|grep openldap
openldap-2.4.44-22.el7.x86_
openldap-clients-2.4.44-22.el7.x86_
openldap-servers-2.4.44-22.el7.x86_
compat-openldap-2.3.43-5.el7.x86_
openldap-devel-2.4.44-22.el7.x86_
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap DB_CONFIG
接下来启动slapd服务:
systemctl start slapd
systemctl status slapd
systemctl enable slapd
配置ldap
修改管理员密码
{SSHA}EVy9FDUpcmS8g9meVx7oZj2x38oikdsadsasNS
初始化配置
这里展示了两种方式,是为了进行对比,因为笔者之前踩了这个坑,手动去做配置文件修改,这其实是官方不建议的
直接修改配置文件(不建议)
修改 /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
以下行没有则新增,dc注意更改成自己的域名domain
olcSuffix: dc=maggot,dc=com
olcRootPW: {SSHA}EVy9FDUpcmS8g9meVx7oZj2x38oikdsadsasNS
olcRootDN: cn=Manager,dc=maggot,dc=co
修改/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=maggot,dc=com" read by * none
测试配置文件
该步骤是为了检查配置文件是否存在错误:
slaptest -u
返回值有config file testing succeeded则说明配置文件无误,checksum error on的异常是因为手动修改了文件,ldap检查和之前不一致;
使用ldapmodify(建议)
首先来修改hbd.ldif文件,编辑一个新的db.ldif文件,注意修改olcRootDN和olcSuffix,改成你需要的域名相关信息,同时修改olcRootPW内容,这个值就是上一节返回的管理员密码加密字符串:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=maggot,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=root,dc=maggot,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}EVy9FDUpcmS8g9meVx7oZj2x38oikdsadsasNS
保存退出后,执行ldapmodify进行更新:
ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/db.ldif
修改monitor.ldif文件,编辑一个新的monitor.ldif文件,注意修改域名相关信息:
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=root,dc=maggot,dc=com" read by * none
保存退出后,执行ldapmodify进行更新:
ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/monitor.ldif
此时我们再进行检查,不会再像直接修改配置文件一样报checksum的错误:
slaptest -u
添加模式
添加cosine和nis LDAP模式,这一步还不清楚原因:
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
其他配置修改
修改服务端口
端口配置在/etc/sysconfig/slapd文件:
vim /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap://localhost:333/"
创建域文件
修改BaseDN信息
创建一个ldif文件,这里假设为maggot.ldif:
dn: dc=maggot,dc=com
dc: maggot
objectClass: top
objectClass: domain
dn: cn=root,dc=maggot,dc=com
objectClass: organizationalRole
cn: root
description: Maggot LDAP manager users
dn: ou=People,dc=maggot,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=maggot,dc=com
objectClass: organizationalUnit
ou: Group
导入生效:
ldapadd -x -W -D "cn=root,dc=maggot,dc=com" -f /tmp/maggot.ldif
添加自己的域信息
可以编辑一下结构的ldif文件,用于生成组织信息,该操作会最终生成多个层级的dc,
dn: dc=org,dc=maggot,dc=com
objectClass: domain
objectclass: dcObject
dc: org
dn: dc=apache,dc=org,dc=maggot,dc=com
objectClass: domain
objectclass: dcObject
dc: apache
dn: dc=hadoop,dc=apache,dc=org,dc=maggot,dc=com
objectClass: organization
objectClass: dcObject
o: Hadoop
dc: hadoop
添加完成后通过ldapsearch命令查看结果:
ldapsearch -h localhost -p 3 -x -D "cn=root,dc=maggot,dc=com" -w 'Dtsw@Admin996' -b 'dc=maggot,dc=com' '(objectClass=*)'