无父级写权限

无父级写权限

当我尝试使用 chef 设置 openldap 服务器时遇到一个问题。

配置:

  • Ubuntu 15.04
  • OpenLdap 2.4.31
  • Chef/OpenLdap 2.7.1

供参考,当我运行 dkpg-reconfigure slapd(这不是尝试自动化该过程时的一个选项)时,问题的第 1 部分已解决(无需更改任何 phpldapadmin 配置文件)但第 2 部分仍然存在。

第 1 部分:当访问 phpldapadmin 的管理员帐户时,无法访问管理员用户(消息:无法使用 PLA 创建此基础。)

第 2 部分:尝试执行时出现的sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/db.ldif错误信息是:

STDERR: SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
ldap_add: Insufficient access (50)
    additional info: no write access to parent

slapd配置文件

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/nis.schema

pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args

loglevel        0

modulepath      /usr/lib/ldap
moduleload  back_hdb

sizelimit 500
tool-threads 1

database        hdb
suffix          "dc=a6,dc=com"
rootdn          "cn=admin,dc=a6,dc=com"
rootpw          {SSHA}a6a6aa66a6a6a6a6a6a6a6
directory       "/var/lib/ldap"
lastmod         on

dbconfig set_cachesize 0 31457280 0

dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500

index default pres,eq,approx,sub
index objectClass eq
index cn,ou,sn,uid,l,mail,gecos,memberUid,description
index loginShell,homeDirectory pres,eq,approx
index uidNumber,gidNumber pres,eq

数据库文件

dn: dc=a6,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: a6
o: a6
description: A6

dn: cn=admin,dc=a6,dc=com
cn: admin
description: LDAP administrator
objectclass: simpleSecurityObject
objectclass: organizationalRole
userpassword: {SSHA}Aa6a6aa66a6a6a6a6a6a6a6

dn: ou=users,dc=a6,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=a6,dc=com
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: cn=administrators,ou=groups,dc=a6,dc=com
objectClass: posixGroup
cn: administrators
gidNumber: 500

dn: uid=co,ou=administrators,dc=a6,dc=com
objectclass: inetOrgPerson
objectclass: posixAccount
cn: co
gidnumber: 500
givenname: Jack
homedirectory: /home/co
loginshell: /bin/bash
uid: co
uidnumber: 1000
userpassword:  {SSHA}a6a6aa66a6a6a6a6a6a6a6

谢谢你的帮助。L.

答案1

我遇到了同样的错误:

命令:ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "dc=example,dc=com"
ldap_add: Insufficient access (50)
        additional info: no write access to parent

我的 base.ldif 内容:

CMD: cat base.ldif

dn: dc=example,dc=com
objectClass: dcObject
objectclass: organization
o: example.com
dc: example
description: My LDAP Root

dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: secret
description: LDAP administrator

我通过绑定为管理员用户修复了错误:

 ldapadd -x -D 'cn=admin,dc=example,dc=com' -w secret -H ldapi:/// -f base.ldif

成功的:

adding new entry "dc=example,dc=com"

adding new entry "cn=admin,dc=example,dc=com"

答案2

默认 ACL 不允许这样做。外部身份验证对树没有写访问权限;只有 ldap 管理员/超级用户 (rootdn) 才有该权限。(实际上它绕过了所有 ACL。)

因此,要么绑定为 ldap 管理员(如其他答案所建议的那样),要么添加您自己的 acl 规则。

我将其用作第一个 acl 规则:

to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth write by * break

您也可以使用manage而不是write

相关内容