我在 Ubuntu 14.04(slapd)中安装了一个新的 OpenLDAP,并从 FreeBSD 上的旧 OpenLDAP 导出完整的 LDIF 文件并将其导入到新的 OpenLDAP 中。
一切都已准备就绪,运行良好。匿名搜索、用户绑定和管理员可以完成所有操作。但问题是,当绑定用户想要修改其自身的某些属性(例如 description、givenName 等)时。它给出:
LDAP 错误代码 50 - 访问权限不足
“slapd.conf” 中是否有某些内容可以阻止用户自写?我没有触碰过“slapd.conf”或“/slapd.d/cn=config/”中的任何内容。
测试环境:相同的应用程序在新的 LDAP 服务器上出现错误,但在我更改 LDAP 地址后,它在旧的服务器上运行良好,所以这不是应用程序的问题。我还用“apachedirectorystudio”测试了这个问题。结果相同。在旧的服务器上运行良好,但在新的服务器上运行不正常。
如果您需要更多信息,请告诉我。谢谢
更新:我运行了“ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config”并得到了以下结果:
{0}hdb, config
dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb
# {-1}frontend, config
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
olcSizeLimit: 500
# {0}config, config
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=iscpif,dc=fr
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
s auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq
# search result
search: 2
result: 0 Success
# numResponses: 12
# numEntries: 11
olcAccess 可能导致此问题吗?slapd.conf 不应该覆盖这些吗?
答案1
slapd 的配置要么使用 slapd.conf,要么使用 cn=config。我的直觉是“正常工作”的服务器使用前者,而“损坏”的服务器使用后者。通过在每台服务器上使用“ps”命令查看 slapd 进程来证明这一假设:
ps ax | grep slapd