在Centos7环境搭建LDAP服务端

  • 前言
  • 正文
    • OpenLDAP介绍
    • LDIF文件书写规则
    • OpenLDAP部署
      • 安装服务
      • 配置ldap
        • 修改管理员密码
        • 初始化配置
          • 直接修改配置文件(不建议)
          • 使用ldapmodify(建议)
        • 添加模式
        • 其他配置修改
          • 修改服务端口
      • 创建域文件
        • 修改BaseDN信息
        • 添加自己的域信息

前言

事情的起因是最近开始的HW行动,我们环境的NIFI集群由于是内外网隔离,所以没有开启任何安全防护措施(除了防火墙),因此内网嗅探工具检测出了未授权访问漏洞。为了在不开启kerberos的前提的进行漏洞修复,我们认识到KNOX这个工具,发现它能够和许多大数据组件进行集成,做正向代理或者SSO单点登录。

大伙一合计,既然本身就要做安全集群,那就折腾一下,最终整了出来,安全复扫也没有再扫出漏洞了

不过在做KNOX的时候,我们使用的是内置的ldap服务,并没有进行ldap自建,后来弄完以后,还是想着需要自建ldap会好些,于是乎就有了个人对OpenLDAP的学习。

正文

OpenLDAP介绍

OpenLDAP其实就是LDAP协议的一种开源实现,一定要注意LDAP指的是协议,不是服务,LDAP的目录信息是以树形结构进行存储的,在树根一般定义国家(c=CN)或者域名(dc=com),其次往往定义一个或多个组织(organization, o)或组织单元(organization unit, ou)。一个组织单元可以包含员工、设备信息(计算机/打印机等)相关信息。例如uid=babs, ou=People, dc=example, dc=com,dc这里如果你想要新增自己的domain component,只要继续生成objectClass: domain即可,这个是百度不到的;

下图是LDAP中的相关概念,只是为了部署的话参照着看就行:

LDIF文件书写规则

ldif是存储LDAP配置信息及目录内容的标准文本文件格式,通常用来交换数据并在OpenLDAP服务器之间互相交换数据,并且可以通过LDIF实现数据文件的导入、导出以及数据文件的添加、修改、重命名等操作,这些信息需要按照LDAP中schema的规范进行操作,并会接受schema的检查,如果不符合OpenLDAP schema规范要求,则会提示相关语法错误。

  • LDIF文件每行的结尾不允许有空格或者制表符;
  • LDIF文件允许相关属性可以重复赋值并使用;
  • LDIF文件以.ldif结尾命名;
  • LDIF文件中以#号开头的一行为注释,可以作为解释使用;
  • LDIF文件所有的赋值方式为:属性:[空格]属性值;
  • LDIF文件通过空行来定义一个条目,空格前为一个条目,空格后为另一个条目的开始。

OpenLDAP部署

安装服务

检查服务器是否已安装openldap相关服务,若没用使用yum进行安装,openldap服务在Centos的ISO镜像中包含,不需要额外引入软件源:

# yum安装命令
# yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap
[lijiadong@hostname ~]$ rpm -qa|grep openldap
openldap-2.4.44-22.el7.x86_64
openldap-clients-2.4.44-22.el7.x86_64
openldap-servers-2.4.44-22.el7.x86_64
compat-openldap-2.3.43-5.el7.x86_64
openldap-devel-2.4.44-22.el7.x86_64

软件安装完成后,/usr/share/openldap-servers目录下会有一个文件DB_CONFIG.example,用来做配置初始化;

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# 注意进行授权给ldap用户
chown ldap:ldap DB_CONFIG

接下来启动slapd服务:

systemctl start slapd
systemctl status slapd
# 设置开机启动
systemctl enable slapd

几乎所有网上资料都会说修改slapd.conf文件进行配置变更,但是openldap2.4.23版本后不再使用slapd.conf作为配置文件了,这个一定要知道

配置ldap

修改管理员密码

# 执行slappasswd -s ${password},记录下返回值,后续会用到
{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=comdn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=root,dc=maggot,dc=comdn: 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
# OpenLDAP server configuration
# see 'man slapd' for additional information# Where the server will run (-h option)
# - ldapi:/// is required for on-the-fly configuration using client tools
#   (use SASL with EXTERNAL mechanism for authentication)
# - default: ldapi:/// ldap:///
# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
SLAPD_URLS="ldapi:/// ldap://localhost:33389/"# Any custom options
#SLAPD_OPTIONS=""# Keytab location for GSSAPI Kerberos authentication
#KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"

创建域文件

修改BaseDN信息

创建一个ldif文件,这里假设为maggot.ldif:

dn: dc=maggot,dc=com
dc: maggot
objectClass: top
objectClass: domaindn: cn=root,dc=maggot,dc=com
objectClass: organizationalRole
cn: root
description: Maggot LDAP manager usersdn: ou=People,dc=maggot,dc=com
objectClass: organizationalUnit
ou: Peopledn: 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: orgdn: dc=apache,dc=org,dc=maggot,dc=com
objectClass: domain
objectclass: dcObject
dc: apachedn: dc=hadoop,dc=apache,dc=org,dc=maggot,dc=com
objectClass: organization
objectClass: dcObject
o: Hadoop
dc: hadoop

添加完成后通过ldapsearch命令查看结果:

ldapsearch -h localhost -p 389 -x -D "cn=root,dc=maggot,dc=com" -w 'Dtsw@Admin996' -b 'dc=maggot,dc=com' '(objectClass=*)'


到这一步已经能够满足KNOX切换到自建LDAP服务的要求了,切换完成后,测试登录正常,且日志中能够看到对自定义域的用户规则的匹配记录:

【LDAP】在Centos7环境搭建LDAP服务端相关推荐

  1. 如何在 MacOS 环境下搭建 SVN 服务端环境

    文章目录 在服务端创建资源仓库 资源仓库访问权限配置 给资源仓库添加用户 配置用户组及用户的权限 启动 SVN 服务器 停止 SVN 服务器 SVN 是一个使用十分广泛的开放源代码的版本控制系统.在 ...

  2. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  3. 使用Eclipse和Tomcat搭建Android服务端

    作为一名Android开发者,不懂一点服务端的知识有时候真的不行.比如你做好了用户登录请求的功能,想找服务端验证一下是否正确.服务端同事告诉你他很忙,等他把接口写完了再验证.这时候呢,我们完全可以自己 ...

  4. 怎么在Win7服务器搭建SVN服务端

    怎么在Win7服务器搭建SVN服务端 今天码大夫给大家分享在Windows服务器上如何搭建SVN环境的详细步骤: 工具/原料 1.VisualSVN server 这是服务器端的安装应用程序,根据自己 ...

  5. nuxtjs+express+vue2+vuex搭建的服务端渲染(SSR)个人网站项目 1

    5se7en.com nuxtjs+express+vue2.0+vuex搭建的服务端渲染个人网站项目. github项目地址: https://github.com/se7en-1992... 项目 ...

  6. Netty搭建Http2服务端并支持TLS传输加密

    Netty搭建Http2服务端并支持TLS传输加密 @Slf4j public class SslUtil {public static SslContext sslContext() {SslPro ...

  7. 大疆无人机基于自搭建RTMP服务端推流直播

    思路 大疆在手机端提供了软件DJI GO 4控制飞行参数等,其中包含自定义RTMP接口来向第三方推流进行直播业务,而我们可以利用这种直播的思路来完成画面传输. 环境 精灵Phantom 4 Pro V ...

  8. DNF搭建服务器服务端搭建教程

    DNF搭建服务器服务端搭建教程 我是艾西,今天给大家分享下怎么样自己搭建一个DNF. 前阵子体验了下其他GM搭建的服,那么对于自己搭建的好处在于出道即巅峰! 想要什么武器就是一串代码命令的事情. 下面 ...

  9. linux设置docker自动启动,CentOS7安装Docker配置服务端和容器自启动

    接上一篇,在VirtualBox上安装配置好了CentOS7,继续在这个虚拟机上装好docker并总结一下使用到的常用功能. 安装Docker 安装直接参考官网来安装就OK,没有遇到什么问题,值得注意 ...

最新文章

  1. 2022-2028年中国马铃薯市场研究及前瞻分析报告
  2. 【C语言】数组指针与指针数组的区分与应用
  3. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别
  4. LinkedList 真的是查找慢增删快?
  5. 15 个最新的 CSS3 教程
  6. android如何兴起_情感设计的必要兴起
  7. 重温数据结构——(1)
  8. 线程池ThreadPoolExecutor里面4种拒绝策略
  9. 文献管理三剑客之Noteexpress:更新一次文献后把文献自动插一次
  10. 企业运行助推器——力软工作流引擎
  11. graphpad分组百分比柱状图_Graphpad与SPSS完成分组柱形图教程
  12. 很好用的邮件发送软件mutt
  13. python read_csv函数_Python pandas.read_csv()函数
  14. 2021年美妆护肤行业电商营销报告
  15. 在Linux上使用7z的最高压缩比来压缩文件
  16. AVR单片机与C语言的一些入门简要概述
  17. 从软件工程师到IT猎头续:告诉你如何写简历
  18. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶......
  19. 次元服务器的位置,暮色次元服务器介绍
  20. MySQL-count(*)、count(1)、count(主键)、count(非索引列)、count(索引列)性能分析

热门文章

  1. 主流OLAP系统对比总结
  2. sdk_int值对照表
  3. python123第四章第五题_第五章 Python 函数
  4. android webdav 播放器,Android APP 推荐:WebDAV Server(不借助数据线在电脑和手机间同步数据)...
  5. 金九银十:怎么正确跟 HR 谈薪资?
  6. 将Firefox浏览器的界面语言设置为英文
  7. 用 Python“科学”预测下《哪吒》票房
  8. 杂记(1)-如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭
  9. android让组件贴着顶部,Android中底部菜单被输入法顶上去的解决方案
  10. 基于hbase jira读源代码