我有一个带有"dc=domain1,dc=com"olcSuffix的 LDAP 服务器。我想"dc=domain2,dc=com"在同一台服务器上创建第二个域。
使用这个 LDIF 文件:
dn: olcDatabase={3}bdb
对象类:olcDatabaseConfig
对象类:olcBdbConfig
olc 数据库:{3}bdb
olc 后缀:dc=domain2,dc=com
...
我有一个错误:
"no global superior knowledge" error because dc=domain2,dc=com does not fit below the existing dc=domain1,dc=com tree.
我的问题是如何在 openldap 中并排运行两个单独的域?我是否必须创建一个"dc=com"根并将现有的移动到它"dc=domain1"下面然后创建"dc=domain2",或者是否有某种方式在同一服务器中独立支持两棵树?
据我所知,一个 OpenLDAP 服务器可以有多个 DIT。我认为您想要的是添加一个新的 DIT。
要添加新的 DIT,您应该执行以下操作:
为它创建一个目录?并设置权限。
向 OpenLDAP 服务器添加配置。
添加条目和 RootDN。
我现在使用 Ubuntu 14.04.3 LTS?OpenLDAP 2.4.31(由 apt-get 安装),如果您不使用 root 帐户,某些命令可能需要 sudo。
首先,为新数据库创建目录
root@hare:~/ldap# mkdir /var/lib/ldap-bdb
root@hare:~/ldap# chown openldap:openldap /var/lib/ldap-bdb
root@hare:~/ldap# vim /etc/apparmor.d/usr.sbin.slapd
# the databases and logs
/var/lib/ldap-bdb/ r,
/var/lib/ldap-bdb/** rwk,
# lock file
/var/lib/ldap-bdb/alock kw,
root@hare:~/ldap# service apparmor reload
Run Code Online (Sandbox Code Playgroud)
二、config cn=config
检查模块
root@hare:~/ldap# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b 'cn=config' "(objectClass=olcModuleList)"
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}back_mdb
Run Code Online (Sandbox Code Playgroud)
如果 back_bdb 未加载:
# file load_bdb.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: back_bdb
root@hare:~/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f load_bdb.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=module{0},cn=config"
Run Code Online (Sandbox Code Playgroud)
检查后端
root@hare:~/ldap# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b 'cn=config' "(objectClass=olcBackendConfig)"
dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb
dn: olcBackend={1}mdb,cn=config
objectClass: olcBackendConfig
olcBackend: {1}mdb
Run Code Online (Sandbox Code Playgroud)
如果没有 bdb 后端
# file backend_bdb.ldif
dn: olcBackend=bdb,cn=config
changetype: add
objectClass: olcBackendConfig
olcBackend: bdb
root@hare:~/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f backend_bdb.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcBackend=bdb,cn=config"
Run Code Online (Sandbox Code Playgroud)
生成密码(这里的密码是123456)
root@hare:~/ldap# slappasswd -h {SSHA}
New password:
Re-enter new password:
{SSHA}e8xGdXmL+mSD3u/389YHeM+dpqFCUSyq
Run Code Online (Sandbox Code Playgroud)
在cn=config中配置数据库
# file domain2_conf.ldif
dn: olcDatabase=bdb,cn=config
changetype: add
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDbDirectory: /var/lib/ldap-bdb/
olcDatabase: bdb
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcMonitoring: TRUE
olcDBNoSync: TRUE
olcSuffix: dc=domain2,dc=com
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=domain2,dc=com" write by * read
olcRootDN: cn=admin,dc=domain2,dc=com
olcRootPW: {SSHA}e8xGdXmL+mSD3u/389YHeM+dpqFCUSyq
root@hare:~/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain2_conf.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=bdb,cn=config"
Run Code Online (Sandbox Code Playgroud)
添加数据库 DIT
# file domain2_db.ldif
dn: dc=domain2,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: domain2
o: Example Corporation
description: The Example Corporation
dn: cn=admin,dc=domain2,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {SSHA}e8xGdXmL+mSD3u/389YHeM+dpqFCUSyq
description: Directory Manager
root@hare:~/ldap# ldapadd -x -D "cn=admin,dc=domain2,dc=com" -w 123456 -f domain2_db.ldif
adding new entry "dc=domain2,dc=com"
adding new entry "cn=admin,dc=domain2,dc=com"
Run Code Online (Sandbox Code Playgroud)
现在,您可以访问新的 DIT(我使用 LDAP Admin)
| 归档时间: |
|
| 查看次数: |
6522 次 |
| 最近记录: |