CentOS 7 上部署 OpenLDAP 服务
以下是在 CentOS 7 上部署 OpenLDAP 服务并完成初始化的详细操作步骤,整合了最佳实践和关键注意事项:
一、环境准备
系统更新与依赖安装
sudo yum update -y
sudo yum install -y openldap openldap-servers openldap-clients openldap-devel
- 安装核心组件:
openldap-servers(服务端)、openldap-clients(客户端工具)。
- 安装核心组件:
设置主机名(可选但推荐)
sudo hostnamectl set-hostname ldap.example.com # 替换为实际域名
echo "127.0.0.1 ldap.example.com" | sudo tee -a /etc/hosts
⚙️ 二、服务启动与初始化
启动服务并设置开机自启
sudo systemctl start slapd
sudo systemctl enable slapd
sudo systemctl status slapd # 确认状态为 active (running)
生成管理员密码哈希
sudo slappasswd
# 输入密码后生成哈希,如:{SSHA}5d2e8c2a4b4f5c6a2d5e8c2a4b4f5c6a2d5e8c2a
# 记录此哈希值(后续配置需使用)[1,4](@ref)
初始化数据库配置
sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
sudo chown ldap:ldap /var/lib/ldap/DB_CONFIG
sudo systemctl restart slapd
三、核心配置(LDIF 文件操作)
配置根域与管理员(创建
init.ldif)dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com # 替换为实际域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}5d2e8c2a4b4f5c6a2d5e8c2a4b4f5c6a2d5e8c2a # 替换为生成的哈希
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
- 应用配置:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f init.ldif
- 应用配置:
创建基础目录结构(创建
base.ldif)dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example
dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
- 导入数据:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
# 输入管理员密码
- 导入数据:
四、安全与防火墙配置
开放防火墙端口
sudo firewall-cmd --add-port=389/tcp --permanent # LDAP
sudo firewall-cmd --add-port=636/tcp --permanent # LDAPS(加密)
sudo firewall-cmd --reload
配置 TLS 加密(可选但推荐)
- 生成自签名证书:
sudo mkdir /etc/openldap/certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/openldap/certs/ldap.key \
-out /etc/openldap/certs/ldap.crt
sudo chmod 600 /etc/openldap/certs/ldap.key
- 创建
tls.ldif:dn: cn=config
changetype: modify
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.crt
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key
- 应用配置:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
sudo systemctl restart slapd
- 生成自签名证书:
五、验证与服务测试
查询目录结构
ldapsearch -x -b "dc=example,dc=com" -D "cn=admin,dc=example,dc=com" -W
# 输入密码后应看到 base.ldif 中定义的条目
添加测试用户(示例)
- 创建
user.ldif:dn: uid=testuser,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
cn: Test User
sn: User
uid: testuser
userPassword: {SSHA}hashed_password # 用 slappasswd 生成
- 导入用户:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f user.ldif
- 创建
️ 六、管理工具与维护
命令行工具:
- 查询:
ldapsearch -x -b "dc=example,dc=com" "(uid=testuser)" - 删除:
ldapdelete -x -D "cn=admin,dc=example,dc=com" -W "uid=testuser,ou=People,dc=example,dc=com"
- 查询:
图形化工具:
安装phpLDAPadmin或使用Apache Directory Studio进行可视化操作。
️ 关键注意事项
权限控制:
- 通过
olcAccess精确管理密码修改权限(如禁止普通用户查看他人密码)。
- 通过
备份配置:
- 定期备份
/etc/openldap/slapd.d/和/var/lib/ldap/。
- 定期备份
高可用建议:
- 生产环境建议部署 主从复制(Syncrepl) 避免单点故障。
故障排查:若连接失败,检查:
- 防火墙状态
firewall-cmd --list-all - 服务日志
journalctl -u slapd - 证书权限(LDAPS 需确保私钥为
ldap用户可读)
通过以上步骤,OpenLDAP 服务已部署完成,可用于企业用户管理、应用集成等场景。进一步可结合 SSSD 或 FreeIPA 实现系统级认证集成。
CentOS 7 上部署 OpenLDAP 服务的更多相关文章
- 在CentOS 8 上 部署 .Net Core 应用程序
在Centos 8 上 部署 .Net Core 应用程序 -- 记录篇 1.更新dnf 源 1 dnf update 2.安装 Asp.Net Core 运行时 1 dnf install ...
- 在 CentOS7 上部署 zookeeper 服务
在 CentOS7 上部署 zookeeper 服务 1 用 SecureCRT 或 XShell 等 Linux 客户端工具连接至 CentOS7 服务器: 2 进入到 /usr/local/too ...
- 如何在CentOS 7上部署Google BBR【搬运、机翻】
如何在CentOS 7上部署Google BBR 本文章搬运自 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7 [注:文 ...
- 在CentOS 7上部署Ghost博客
作者:waringid 一.简介 跟静态博客不同的是,Ghost 这种轻量级的动态博客,有一个管理后台,可以直接写作和管理博客.本质上,跟 WordPress 是相通的,只是 Ghost 搭建在 No ...
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 — 5.在控制节点上部署计算服务Nova
计算服务Nova使用OpenStack Compute来托管和管理云计算系统. OpenStack Compute是基础架构即服务(IaaS)系统的主要部分. 主要模块用Python实现.OpenSt ...
- Azure上部署FTP服务
FTP是个比较复杂的协议,其协议分为控制层和数据层,工作模式分为主动和被动两种模式. 在默认的Active模式下其工作原理如下: 可以看到,客户端发起FTP的请求道服务器端,FTP的端口是21.用户在 ...
- CentOS 7 上部署Mono 4 和Jexus 5.6
概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus. mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net mvc 4 应用.这篇文章是描述如何在 ...
- 在linux上部署tomcat服务
在linux上部署tomcat 1.安装JDK 2.下载tomcat http://tomcat.apache.org/download-70.cgi 3.上传到服务器,并解压 4.上传war包或者已 ...
- CentOS上部署JAVA服务【转】
http://www.th7.cn/Program/java/201511/686437.shtml 本文将介绍如何在CentOS上运行Java Web服务,其中将包括如何搭建JAVA运行环境.如何开 ...
- centos上部署nginx服务
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
随机推荐
- RPC实战与核心原理之异步RPC
异步RPC:压榨单机吞吐量 如何提升单机吞吐量 提升吞吐量,其实关键就两个字:"异步",提高CPU等资源的利用率 调用端如何异步 异步,最常用的方式就是返回 Future 对象的 ...
- C#之线程同步
简述 当一个线程执行递增和递减操作时,其他线程需要依次等待,类似于这种常见的问题通常被称为线程同步问题. 有多种方式实现线程同步.首先,如果无须共享对象,那么就无序进行线程同步.大多数时候,可以通过重 ...
- Django开发过程中遇到的问题和解决方案
1.django向数据库中添加中文时报错 解决方案:创建数据库的时候设置编码格式 2.django的信号使用无法触发信号里的内容 解决方案:在django 1.7后,使用信号时候需要在应用配置类中的r ...
- 分享95套Java实战项目,一次学个够
第01项目:SSM大型互联网电商项目(视频+源码) 第02项目:SSM分布式互联网商城(视频+文档资料) 第03项目:SSM开发大中点平 (视频+源码) 第04项目:SSM分布式苗杀系统企业级实战(视 ...
- PC端自动化测试实战教程-7-pywinauto等待方法大集合 (详细教程)
1.简介 经过上一篇的学习和讲解想必小伙伴或者童鞋们已经意识到等待的重要性了吧.宏哥在上一篇中在start()后,加入适当的等待时间(如time.sleep()),让应用程序有足够的时间初始化窗口和U ...
- Git使用随记
前言 记录Git软件使用相关的流程.命令. 注:这不是一份专业的教程. Git是什么? Git 是一个用于管理源代码的分布式版本控制系统. 版本控制系统会在您修改文件时记录并保存更改,使用户可以随时恢 ...
- python爬虫学习——bs4
bs4 将一个复杂的html文档转化为一个复杂的树形结构,每个节点都是python对象,所有对象可以分为四种:Tag.NavigableString.BeautifulSoup.Comment fro ...
- 关于Design Review 的一些思考
开发流程 这篇文章记录一些我对Design Review 的一些思考,下面是我当下对开发流程的理解: 开发流程: 收到需求 需求分析 设计分析 项目排期 项目开发 测试环境测试 线上回归测试 上线观察 ...
- html file input onchage没有调用(两次选择同一个文件)
在html中,如果input的类型是file,且第二次选择的文件与第一次相同,那么onchange事件不会调用. 如果想调用,需要将event.target.value设置为null,如下: 原生写法 ...
- 模块与包&相对绝对路径
[一]模块与包 (1)什么是模块 在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能. (2)模块的来源 内置的:python解释器 ...