【发布时间】:2022-01-31 23:32:03
【问题描述】:
我在 Centos7 上从头开始安装 openldap
我遵循了 openldap.org 网站上的快速入门指南http://www.openldap.org/doc/admin24/quickstart.html
在第 7 步之前一切正常,我将 openldap 安装在自定义目录中没有问题
下面是我运行的命令
cd /usr/local/src
mkdir openldap
cd openldap
cp /home/user/openldap/src/* . //copied everything in the tar ball to the directory
yum install gcc openssl libdb-devel libtool-ltdl-devel.x86_64 openssl-devel.x86_64 cyrus-sasl-devel.x86_64
//yum installed every required package, including devel package for make
./configure --prefix=/usr/local/src/openldap-install //configure to install in custom location
make depend
make
make test //all successful
make install
然后我尝试按照步骤 8,编辑 slapd.ldif 以放入我自己的域中, dc=adomain,dc=com ,在我的情况下,位于 /usr/local/src/openldap-install/etc/ openldap/slapd.ldif
然后我将 /usr/local/src/openldap-install/sbin/ 目录添加到 PATH 环境中,通过在 profile.d 目录中插入一个 openldap_path.sh 来验证它是否有效。
然后我按照第 9 步操作,(我以 root 运行所有内容)
slapadd -F /usr/local/etc/cn=config -l /usr/local/etc/openldap/slapd.ldif
但它返回“可用数据库不允许 slapadd 新服务器”
我不明白,我没有迁移(正如其他一些 stackoverflow 帖子中所建议的那样),它是一个全新的服务器,但它不允许我继续。
任何帮助将不胜感激,我只是不知道下一步该怎么做。
@EJP
文件如下
#
# See slapd-config(5) for details on configuration options.
# This file should NOT be world readable.
#
dn: cn=config
objectClass: olcGlobal
cn: config
#
#
# Define global ACLs to disable default read access.
#
olcArgsFile: /usr/local/src/openldap-install/var/run/slapd.args
olcPidFile: /usr/local/src/openldap-install/var/run/slapd.pid
#
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#olcReferral: ldap://root.openldap.org
#
# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 64-bit encryption for simple bind
#olcSecurity: ssf=1 update_ssf=112 simple_bind=64
#
# Load dynamic backend modules:
#
#dn: cn=module,cn=config
#objectClass: olcModuleList
#cn: module
#olcModulepath: /usr/local/src/openldap-install/libexec/openldap
#olcModuleload: back_bdb.la
#olcModuleload: back_hdb.la
#olcModuleload: back_ldap.la
#olcModuleload: back_passwd.la
#olcModuleload: back_shell.la
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
include: file:///usr/local/src/openldap-install/etc/openldap/schema/core.ldif
# Frontend settings
#
dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
#
# Sample global access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
#
#olcAccess: to dn.base="" by * read
#olcAccess: to dn.base="cn=Subschema" by * read
#olcAccess: to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#
#######################################################################
# LMDB database definitions
#######################################################################
#
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
**olcSuffix: dc=ldap,dc=domain,dc=com**
**olcRootDN: cn=Manager,dc=ldap,dc=domain,dc=com**
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd-config(5) for details.
# Use of strong authentication encouraged.
**olcRootPW: {SSHA}strong**
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
**olcDbDirectory: /usr/local/src/openldap-install/var/openldap-data**
# Indices to maintain
olcDbIndex: objectClass eq
只有最后几行从 slapd.ldif.default 文件中更改
下面是ls -R输出的安装路径中的文件树
.:
bin etc include lib libexec sbin share var
./bin:
ldapadd ldapdelete ldapmodify ldappasswd ldapurl
ldapcompare ldapexop ldapmodrdn ldapsearch ldapwhoami
./etc:
openldap
./etc/openldap:
ldap.conf schema slapd.conf.default slapd.ldif.default
ldap.conf.default slapd.conf slapd.ldif
./etc/openldap/schema:
collective.ldif cosine.schema java.ldif openldap.schema
collective.schema duaconf.ldif java.schema pmi.ldif
corba.ldif duaconf.schema misc.ldif pmi.schema
corba.schema dyngroup.ldif misc.schema ppolicy.ldif
core.ldif dyngroup.schema nis.ldif ppolicy.schema
core.schema inetorgperson.ldif nis.schema README
cosine.ldif inetorgperson.schema openldap.ldif
./include:
lber.h ldap_cdefs.h ldap.h ldap_utf8.h slapi-plugin.h
lber_types.h ldap_features.h ldap_schema.h ldif.h
./lib:
liblber-2.4.so.2 libldap-2.4.so.2 libldap_r-2.4.so.2.10.7
liblber-2.4.so.2.10.7 libldap-2.4.so.2.10.7 libldap_r.a
liblber.a libldap.a libldap_r.la
liblber.la libldap.la libldap_r.so
liblber.so libldap_r-2.4.so.2 libldap.so
./libexec:
slapd
./sbin:
slapacl slapauth slapdn slappasswd slaptest
slapadd slapcat slapindex slapschema
./share:
man
./share/man:
man1 man3 man5 man8
./share/man/man1:
ldapadd.1 ldapdelete.1 ldapmodify.1 ldappasswd.1 ldapurl.1
ldapcompare.1 ldapexop.1 ldapmodrdn.1 ldapsearch.1 ldapwhoami.1
./share/man/man3:
ber_alloc_t.3 ldap_free_urldesc.3
blablablablabla
blablablablabla
blablablablabla
./share/man/man5:
ldap.conf.5 slapd-mdb.5 slapd-sql.5 slapo-ppolicy.5
blablablablabla
blablablablabla
blablablablabla
./share/man/man8:
blablablablabla
blablablablabla
./var:
run
./var/run:
编辑
@EJP 我有点明白你的意思。你是说默认的 LDIF 文件实际上是 cn=config 数据库?
我几乎要放弃了,我有 1 周的时间没有启动 ldap 服务器。没看出来是什么问题,或许清理一下我的一些概念其实可以解决这里的情况?
- 如何定义自己的数据库?我以为我已经通过更改 olcsuffix 做到了这一点?
- cn=config 数据库与“配置数据库”有何不同?
- 我应该编辑/创建什么文件来定义我自己的数据库?
- openldap 快速入门指南的第 8 步中包含表单的 MDB 数据库定义是什么意思?
- openldap 快速入门指南的第 9 步导入您的配置数据库是什么意思?是不是说安装的openldap服务器没有配置?
- 安装时附带的 slapd.conf 文件有什么作用?它包含“定义”还是“配置”?
- 我试过跳过第8步和第9步直接尝试启动SLAPD,但是总是失败,请问SLAPD是否可以在没有我“导入自己的配置数据库”的情况下自行启动?
感谢 EJP 对我的极大耐心,我知道我遗漏了一些极其微不足道的东西,但请相信我,我已经在互联网上挖掘了几天(以及一天的书店)未能找到明确的答案。如果您可以通过回答我的问题或您自己的解释来与我澄清一些概念,或者只为我提供一个我可以执行 slapadd 的虚拟 ldif 文件,然后我可以找出问题所在,那将是非常棒的。
我认为我的困难是因为我认为 openldap 指导文档做得不好:
- 他们说 slapd.d 是新的方法,但是编译后的源 make 不会生成 slapd.d/ 目录,我也没有在 ./configure 中找到切换到此类的选项
- bdb 和 hdb 似乎逐渐淡出并被 mdb 取代,但 ./configure 默认启用了这两个,需要一些额外的 libdb-devel 包才能正确制作它们(我使用的是 Centos 7)。
- 示例设置文件 slapd.conf slapd.ldif 所需的子目录(直到今天我不知道它们是示例文件还是工作文件)不是由 make install 设置的,甚至 /var/openldap-data
- make install 脚本甚至没有创建快速入门指南命令所需的子目录
- 我不确定这是否正确,但我认为 SLAPD 至少应该“开箱即用”并且后续配置应该由 ldapmodify / add / del 命令发出。
【问题讨论】:
-
您必须在问题中包含已编辑的 LDIF。
-
我看不出你在哪里做了与第 8 步相对应的任何事情。
-
@EJP 它在文件末尾附近,用 * 引用,我编辑了 olcSuffix、olcRootDN、olcRootPW、olcDbDirectory olcDbDirectory 也是由 mkdir 手动创建的
-
但是您还没有定义任何自己的数据库,只有
cn=config数据库,两次。 -
@EJP 我已经到了不理解我不理解的地步。如果您能做出澄清,将会有所帮助,谢谢。