【问题标题】:start new openldap installation开始新的openldap安装
【发布时间】: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 我已经到了不理解我不理解的地步。如果您能做出澄清,将会有所帮助,谢谢。

标签: openldap configure


【解决方案1】:

当我遇到同样的错误时,我不明白为什么 slapadd 命令会失败。但是,如果你想让你的 LDAP 服务器正常工作,我可以分享我所做的。

第 1 步:直接在 slapd.conf 文件中配置您的 MDB。

安装 OpenLDAP 后,/usr/local/etc/openldap 下的 slapd.conf 文件已经创建并配置了 MDB 数据库。您可以根据需要更改 MDB 设置。这是默认设置:

#######################################################################
# MDB database definitions
#######################################################################

database    mdb
maxsize     1073741824
suffix      "dc=my-domain,dc=com"
rootdn      "cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw      secret
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory   /usr/local/var/openldap-data
# Indices to maintain
index   objectClass eq

第二步:配置完成后启动slapd。 启动 slapd 的命令:

/usr/local/libexec/slapd -d 1

如果您看到“slapd starting”,则表示 slapd 已启动。

第 3 步:创建数据库条目。

可以参考OpenLDAP Administrator guide中给出的流程:

1.像这样创建一个entry.ldif文件:

    # Organization for Example Corporation
    dn: dc=example,dc=com
    objectClass: dcObject
    objectClass: organization
    dc: example
    o: Example Corporation
    description: The Example Corporation

    # Organizational Role for Directory Manager
    dn: cn=Manager,dc=example,dc=com
    objectClass: organizationalRole
    cn: Manager
    description: Directory Manager

2.使用ldapadd工具创建条目:

ldapadd -f entries.ldif -x -D "cn=Manager,dc=example,dc=com" -w secret

完成上面的 3 个步骤后,LDAP 服务器就可以使用了。您可以添加 DIT 供您使用。

仅供参考,一个好的 GUI 客户端可以帮助你很多。我用Jarek Gawor’s excellent LDAP Browser/Editor v2.8.2

希望这个答案可以帮助您或将来的其他人。

【讨论】:

    【解决方案2】:

    原来这个答案解决了问题Openldap naming context issue with Apache directory studio?

    我认为我很欣赏人们可以回答我的问题的一些细节或提供答案示例。并非所有人都通过文字解释来学习,有些人通过示例和逆向工程来学习。阅读手册,只有在你不明白的时候才提出问题,我认为这是一个事先声明,而且大多数人在真正提出任何问题之前都已经过了那个阶段。

    是的,我想我应该问一下 serverfault,因为 stackoverflow 更适合编程。

    【讨论】:

      【解决方案3】:

      我刚刚使用 OpenLDAP 2.6.0 遇到了这个问题;在“configure;make;make install”之后,我无法运行 slapd,它以 “第 72 行上的未知文件”导致服务器启动失败

      原来它没有创建 /usr/local/var/openldap-data/ 目录。

      mkdir /usr/local/var/openldap-data/ 已解决。

      【讨论】:

        【解决方案4】:

        您应该将默认的 slapd.conf 转换为新的 slapd.d 目录格式。在 slapd.conf 中添加配置数据库定义:

        # before the first database definition
        database config
        # NOTE: the suffix is hardcoded as cn=config and 
        # MUST not have a suffix directive
        # normal rules apply - rootdn can be anything you want
        # but MUST be under cn=config
        rootdn "cn=admin,cn=config"
        # use any of the supported password formats e.g. {SSHA} etc
        # or plaintext as shown
        rootpw config
        

        然后使用

        进行转换
        slaptest -f /usr/local/etc/openldap/slapd.conf -F /usr/local/etc/openldap/slapd.d
        

        然后删除 slapd.conf。然后您可以使用 slapadd 继续您的配置。看看Configuration Guidehttp://www.zytrax.com/books/ldap/ch6/slapd-config.html

        希望这会对你有所帮助。

        【讨论】:

        • 建议一个完全不同的配置结构,无论是否新的,都无助于解决默认指令不起作用的问题。
        猜你喜欢
        • 1970-01-01
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        • 2022-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多