我在 Fedora 上并设置了 OpenLDAP 服务器。我不记得一开始就设置过管理员密码,但我必须在提示输入管理员密码的地方执行操作。不输入任何内容是行不通的。我对这个问题进行了广泛的搜索,并尝试了以下方法:
$ ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
$ sudo -i
[sudo] password for User:
[root@localhost ~]# ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
$ ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootDN=cn=admin,dc=com,dc=example dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
No such object (32)
$ sudo ldapsearch -H ldapi:/// -Y EXTERNAL -b 'cn=config'
[sudo] password for User:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=config
> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
我还将以上内容放入一个文件中并尝试这样做:
$ vim pw_reset.ldif
$ sudo ldapmodify -Y EXTERNAL -D 'cn=config' -H ldapi:/// -f ./pw_reset.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
因此,这里明显的问题是,无论如何,我似乎没有“足够的访问权限”,这就是这里的问题。我需要管理员密码来设置管理员密码。正确的方法是什么?
可能没有管理员密码;相反,您的系统可能设置了数据库 ACL(
olcAccess
属性),以便它们将所有权限授予 UID 0“peercred”连接 - 无论如何,在此之前。(这也是发行版安装 Postgres 和 MariaDB 的方式。)关闭服务,然后使用
slapadd -n 0
/slapmodify -n 0
直接将更改应用到后端数据库,然后再次启动服务。 (确保sudo
使用正确的用户帐户“slapd”或“ldap”或类似帐户,以避免意外创建服务无法读取的 root 拥有的文件。)cn=config 后缀总是使用文本文件数据库,因此在紧急情况下您甚至可以
slapd.d/cn=config/olcDatabase=*.ldif
使用任何文本编辑器进行编辑。请记住,rootDN(以及 olcAccess)对于每个后缀(数据库实例)都是独立的,因此您还需要为 olcDatabase={0}config 更改它,而不仅仅是 olcDatabase{1}mdb(实际上是前者)允许您执行配置更改 - 后者仅用于管理数据)。