目录
六、macOS自带的OpenLDAP 和 homebrew 安装的区别
目录
六、macOS自带的OpenLDAP 和 homebrew 安装的区别
在macOS上安装LDAP服务器,最常用的选择是OpenLDAP。下面是如何使用Homebrew来安装OpenLDAP的步骤:
注意:以下命令和过程适用于基于Homebrew的安装方式,如果您使用的是Mac with Apple Silicon (M1, M2等),请注意路径可能略有不同(通常为/opt/homebrew而非/usr/local)。
本文以M2举例(MAC有自带的OpenLDAP,后面有比较两个安装版本)
如果尚未安装Homebrew,在终端中运行以下命令进行安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
此脚本会安装Homebrew及其依赖项。
1、更新Homebrew以确保您安装的是最新版的软件:
brew update
2、安装OpenLDAP:
brew install openldap
OpenLDAP 的配置文件通常位于 /etc/openldap/ 或 /usr/local/etc/openldap/ (根据您的系统和OpenLDAP版本,路径可能有所不同)。可以查看Homebrew安装信息来确认实际路径:
brew info openldap
MAC M2是以下路径。都在/opt/homebrew/下:

/opt/homebrew/opt/openldap/bin/:可执行文件/opt/homebrew/opt/openldap/sbin/:系统管理的可执行文件/opt/homebrew/opt/openldap/lib/:库文件/opt/homebrew/opt/openldap/libexe/:启动脚本 slapd文件/opt/homebrew/etc/openldap/:配置文件 slapd.d 、slapd.conf 、slapd.ldif都在这里
/opt/homebrew/etc/openldap

/opt/homebrew/opt/openldap/libexec
只有slapd文件

按照Homebrew的提示,更新你的环境变量以确保系统使用Homebrew安装的OpenLDAP版本。

根据提示设置环境变量:
- echo 'export PATH="/opt/homebrew/opt/openldap/bin:$PATH"' >> ~/.zshrc
- echo 'export PATH="/opt/homebrew/opt/openldap/sbin:$PATH"' >> ~/.zshrc
- echo 'export LDFLAGS="-L/opt/homebrew/opt/openldap/lib"' >> ~/.zshrc
- echo 'export CPPFLAGS="-I/opt/homebrew/opt/openldap/include"' >> ~/.zshrc
- source ~/.zshrc
我这里只配置了PATH两个。
配置slapd.conf文件
在/opt/homebrew/etc/openldap目录下(安装后会有默认生成的一些文件,我做了备份,重新创建了文件):

在/opt/homebrew/etc/openldap目录中创建并编辑slapd.conf文件(也可以使用vi vim都等编辑):
sudo nano /opt/homebrew/etc/openldap/slapd.conf
示例slapd.conf内容:
- include /opt/homebrew/etc/openldap/schema/core.schema
- pidfile /opt/homebrew/var/run/slapd.pid
- argsfile /opt/homebrew/var/run/slapd.args
-
- database mdb
- maxsize 1073741824
- suffix "dc=testldap,dc=com"
- rootdn "cn=admin,dc=testldap,dc=com"
- rootpw secret
- #数据库文件目录
- directory /opt/homebrew/var/openldap-data
- index objectClass eq
suffix和rootdn以匹配你的域名。rootpw为你的管理员密码要初始化LDAP目录,您首先需要创建一个LDIF文件,该文件定义了您的LDAP树和它的顶级条目(比如域名)。然后使用ldapadd命令将其添加到数据库中。
默认情况下,OpenLDAP 不会随系统自动启动。可以手动启动 slapd,以便测试配置是否有效:
目录: /opt/homebrew/var/openldap-data
如果 directory /opt/homebrew/var/openldap-data 中指定的目录不存在,你需要手动创建它:
sudo mkdir -p /opt/homebrew/var/openldap-data
这条命令会创建一个名为 openldap-data 的目录,位于 /opt/homebrew/var/ 下。确保目录创建成功,并且具有适当的权限以供 OpenLDAP 使用。
- sudo chown -R ldap:ldap /opt/homebrew/var/openldap-data
-
-
-
- 如果提示:
-
- chown: ldap: illegal group name
-
-
-
- 说明 ldap 组不存在,你可以尝试使用其他合适的组,例如 staff。staff 组通常存在于 macOS 系统中,并且用于一般的用户权限。以下是将数据库目录设置为 staff 组的命令:
-
-
- sudo chown -R :staff /opt/homebrew/var/openldap-data
要生成数据库文件,你需要运行 OpenLDAP 的 slapadd 工具,并提供一个 LDIF 文件来填充数据库。以下是生成数据库文件的基本步骤:
1)创建 LDIF 文件:
首先,你需要创建一个 LDIF 文件,用于定义你的 LDAP 数据。这个文件包含了条目(entry)和属性(attribute)的定义。这是一个示例 LDIF 文件的简单例子:
在目录/opt/homebrew/var/openldap-data下创建testldap.ldif文件(可以使用 vi vim编辑器)
- # LDIF 文件示例
-
- # 定义根节点
- dn: dc=testldap,dc=com
- objectClass: top
- objectClass: dcObject
- objectClass: organization
- o: Example Organization
- dc: testldap
-
- # 定义管理员条目
- dn: cn=admin,dc=testldap,dc=com
- objectClass: organizationalRole
- cn: admin
2)运行 slapadd:
使用 slapadd 工具将 LDIF 文件加载到数据库中。运行以下命令:
- sudo slapadd -F /opt/homebrew/etc/openldap/slapd.d -l your_ldif_file.ldif
-
- 例如:
- sudo slapadd -F /opt/homebrew/etc/openldap/slapd.d -l /opt/homebrew/var/openldap-data/testldap.ldif
替换 your_ldif_file.ldif 为你的 LDIF 文件的路径和名称。
-F 选项指定了 slapd.d 配置目录的路径,这样 slapadd 将把数据加载到正确的位置。
加载后openldap-data文件下会生成如下文件:

sudo slaptest -f /opt/homebrew/etc/openldap/slapd.conf -F /opt/homebrew/etc/openldap/slapd.d
如果没有错误,上述命令会将配置文件转换为新的格式并存储在/opt/homebrew/etc/openldap/slapd.d目录中。
/opt/homebrew/etc/openldap/slapd.conf: line 10: invalid path: No such file or directory
第10行这个目录不存在:

mdb_db_open: database "dc=testldap,dc=com" cannot be opened: No such file or directory (2). Restore from backup!
backend_startup_one (type=mdb, suffix="dc=testldap,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
slapd.d 目录不为空
slaptest如果报以下错误:config_setup_ldif: expected directory /opt/homebrew/etc/openldap/slapd.d to be empty! slaptest: bad configuration directory!
错误消息表明 slapd.d 目录不是空的,但 slaptest 需要该目录为空才能正常工作。这可能是由于之前运行 slaptest 或其他操作导致 slapd.d 目录中存在了一些文件。
清空 slapd.d 目录:
首先,确保 slapd.d 目录为空。你可以手动删除其中的文件:
sudo rm -rf /opt/homebrew/etc/openldap/slapd.d/* 运行完这个命令后,确保 slapd.d 目录为空。
重新运行 slaptest:
确保 slapd.d 目录为空后,重新运行 slaptest 命令:
sudo slaptest -f /opt/homebrew/etc/openldap/slapd.conf -F /opt/homebrew/etc/openldap/slapd.d 如果一切设置正确,slaptest 应该能够成功创建配置目录。
启动slapd守护进程
确认slapd存在位置:/opt/homebrew/opt/openldap/libexec/slapd
sudo /opt/homebrew/opt/openldap/libexec/slapd -F /opt/homebrew/etc/openldap/slapd.d -d 1

使用-d 1参数以调试模式启动,可以看到详细的日志输出。这有助于排查启动问题。
使用ldapsearch验证服务
ldapsearch -x -H ldap://localhost:389 -b "dc=testldap,dc=com"
连接成功,如下图:

如果希望OpenLDAP随系统启动,可以创建一个LaunchAgent。
创建LaunchAgent文件
创建文件~/Library/LaunchAgents/homebrew.mxcl.openldap.plist,内容如下:
"1.0" encoding="UTF-8"?> "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> "1.0"> Label homebrew.mxcl.openldap ProgramArguments /opt/homebrew/opt/openldap/libexec/slapd -F /opt/homebrew/etc/openldap/slapd.d RunAtLoad <true/> KeepAlive <true/> StandardErrorPath /opt/homebrew/var/log/slapd.log StandardOutPath /opt/homebrew/var/log/slapd.log
加载LaunchAgent
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.openldap.plist launchctl start homebrew.mxcl.openldap
如果想创建一个包含 uid=admin 的 LDIF 文件,并加载到 LDAP 服务器中。可以更换ldif文件,例如:
清空并重新创建 OpenLDAP 数据目录(确保数据目录为空):
- sudo rm -rf /opt/homebrew/var/openldap-data/*
-
确保数据目录的权限正确:
sudo chown -R :staff /opt/homebrew/var/openldap-data
文件内容:
- dn: dc=testldap,dc=com
- objectClass: top
- objectClass: dcObject
- objectClass: organization
- o: Test LDAP
- dc: testldap
-
- dn: cn=admin,dc=testldap,dc=com
- objectClass: simpleSecurityObject
- objectClass: organizationalRole
- cn: admin
- userPassword: secret
-
- dn: uid=admin,dc=testldap,dc=com
- objectClass: inetOrgPerson
- cn: Admin
- sn: Admin
- uid: admin
- userPassword: secret
使用 slapadd 命令加载这个 LDIF 文件:
sudo slapadd -F /opt/homebrew/etc/openldap/slapd.d -l /opt/homebrew/var/openldap-data/testldap.ldif
启动
sudo /opt/homebrew/opt/openldap/libexec/slapd -F /opt/homebrew/etc/openldap/slapd.d -d 1
再次使用 ldapsearch 命令确认条目存在:
ldapsearch -x -H ldap://localhost:389 -D "cn=admin,dc=testldap,dc=com" -W -b "dc=testldap,dc=com" "(uid=admin)"
确保这次搜索结果包含 uid=admin 条目。
macOS自带了OpenLDAP,但其配置文件和安装位置与通过Homebrew安装的OpenLDAP可能有所不同。以下是对这两个安装版本的说明和如何处理的建议:
macOS自带的OpenLDAP相关文件通常位于 /etc/openldap 目录下。这个目录包含默认的配置文件和示例文件,例如:
AppleOpenLDAP.plistldap.confldap.conf.defaultschema/ 目录slapd.conf.defaultDB_CONFIG.example通过Homebrew安装的OpenLDAP文件通常位于 /opt/homebrew/Cellar/openldap/ 目录下。这个目录下的内容一般包括:
bin/:可执行文件sbin/:系统管理的可执行文件lib/:库文件etc/openldap/:配置文件更新环境变量,为了使用Homebrew安装的OpenLDAP,需要确保Homebrew路径在系统的PATH中优先:
- echo 'export PATH="/opt/homebrew/opt/openldap/bin:$PATH"' >> ~/.zshrc
- echo 'export PATH="/opt/homebrew/opt/openldap/sbin:$PATH"' >> ~/.zshrc
- source ~/.zshrc
以下是如何配置和启动macOS自带的OpenLDAP服务的详细步骤。
macOS自带的OpenLDAP通常位于/usr/libexec目录下,配置文件在/etc/openldap目录中。

编辑slapd.conf文件
在/etc/openldap目录中找到并编辑slapd.conf文件:
sudo nano /etc/openldap/slapd.conf
示例slapd.conf内容:
- include /etc/openldap/schema/core.schema
- pidfile /var/run/slapd.pid
- argsfile /var/run/slapd.args
-
- database mdb
- maxsize 1073741824
- suffix "dc=my-domain,dc=com"
- rootdn "cn=admin,dc=my-domain,dc=com"
- rootpw secret
- directory /var/lib/openldap/openldap-data
- index objectClass eq
修改suffix和rootdn以匹配你的域名。
修改rootpw为你的管理员密码。
确保数据目录存在并有正确的权限:
- sudo mkdir -p /var/lib/openldap/openldap-data
- sudo chown -R ldap:ldap /var/lib/openldap/openldap-data
创建slapd.d目录
sudo mkdir -p /etc/openldap/slapd.d
使用slaptest生成配置
sudo slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
启动slapd守护进程
sudo /usr/libexec/slapd -F /etc/openldap/slapd.d -d 1
使用-d 1参数以调试模式启动,可以看到详细的日志输出。这有助于排查启动问题。
使用ldapsearch验证服务
ldapsearch -x -H ldap://localhost:389 -b "dc=my-domain,dc=com"
如果希望OpenLDAP随系统启动,可以创建一个LaunchDaemon。
1.创建LaunchDaemon文件
创建文件/Library/LaunchDaemons/org.openldap.slapd.plist,内容如下:
- "1.0" encoding="UTF-8"?>
- "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
"1.0"> -
Label -
org.openldap.slapd -
ProgramArguments -
-
/usr/libexec/slapd -
-F -
/etc/openldap/slapd.d -
-
RunAtLoad - <true/>
-
KeepAlive - <true/>
-
StandardErrorPath -
/var/log/slapd.log -
StandardOutPath -
/var/log/slapd.log
2.加载LaunchDaemon
- sudo launchctl load /Library/LaunchDaemons/org.openldap.slapd.plist
- sudo launchctl start org.openldap.slapd
macOS自带的OpenLDAP和通过Homebrew安装的OpenLDAP之间有几个关键区别,包括安装位置、配置文件路径、版本管理和更新方式。这些区别可能会影响如何管理和使用OpenLDAP服务。以下是详细的比较:
macOS自带的OpenLDAP:
/usr/libexec/slapd。/etc/openldap 目录。/var/db/openldap 或 /var/lib/openldap。Homebrew安装的OpenLDAP:
/usr/local/opt/openldap 或 /opt/homebrew/opt/openldap(在Apple Silicon Mac上)。/usr/local/etc/openldap 或 /opt/homebrew/etc/openldap。macOS自带的OpenLDAP:
/etc/openldap,包括 slapd.conf 和 ldap.conf 等。Homebrew安装的OpenLDAP:
/usr/local/etc/openldap 或 /opt/homebrew/etc/openldap。macOS自带的OpenLDAP:
Homebrew安装的OpenLDAP:
macOS自带的OpenLDAP:
Homebrew安装的OpenLDAP:
brew install openldap 和 brew upgrade openldap。macOS自带的OpenLDAP:
launchd 服务进行管理。Homebrew安装的OpenLDAP:
LaunchAgent 或 LaunchDaemon 来启动和管理服务。使用macOS自带的OpenLDAP:
使用Homebrew安装的OpenLDAP:
根据你的需求选择适合的版本。如果你需要最新的功能和更灵活的配置管理,建议使用Homebrew安装的OpenLDAP;如果你只需要一个简单、稳定的LDAP服务,可以使用macOS自带的OpenLDAP。