使用以下命令修改 Open-LDAP 配置:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by * none
我收到错误:
ldap_modify: Other (e.g., implementation specific) error (80)
additional info: <olcAccess> handler exited with 1
答案1
这是因为 ldif 文件中的行继续符删除了第一个空格,并且该属性被视为:({0}to *by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" writeby * none
这是无效的)
因此,在行延续之前添加一个额外的空格:
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
by * none
答案2
请记住,当您的 olcAccess 语句有其他语法问题时,也会抛出此错误。例如,我在其中一个“by”子句中使用了一个不属于那里的关键字,而不是告诉我“您不能在这里使用‘UID’”它一直说“slapd:第 0 行:期望‘access’得到 [my DN]”。这个错误很晦涩难懂。
答案3
您需要创建这个文件 mod_acl.ldif,其内容必须与下面的格式完全相同,这非常棘手。然后使用以下命令:
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f mod_acl.ldif
预期结果是:
modifying entry "olcDatabase={1}mdb,cn=config"
内容 mod_acl.ldif
dn: olcDatabase={1}mdb,cn=config
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey
by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write
by * none
-
add: olcAccess
olcAccess: to dn.base=""
by * read
-
add: olcAccess
olcAccess: to *
by dn="cn=admin,dc=example,dc=com" write
by * read
请注意,Ldap 数据库的类型可能会根据您的实施mdb
或hdb
其他安装而改变。
答案4
这通常发生在您从网页复制和粘贴时。
我按照 @Mildred 提到的说明解决了这个问题,并且我:set ff=unix
在 Vim 编辑器中使用它来忽略任何错误的格式