Centos7

在 LDAP 伺服器上創建 OpenLdap 管理員組

  • March 10, 2019

我正在嘗試在執行 slapd 的 OpenLdap 伺服器上創建一個簡單的管理員組。目前沒有 slapd 文件,我一直在使用 cn=config 格式。

  • 作業系統:CentOS Linux 版本 7.6.1810(核心)
  • OpenLDAP:$OpenLDAP:slapd 2.4.44

我的目標是能夠將使用者放入此管理組“cn=admins-group,ou=groups,dc=example,dc=com”,以便他們可以登錄 Phpldapadmin Web 界面並能夠在“ ou=人,dc=example,dc=com”。

這是管理員組的 ldif:(admin-group.ldif)

dn: cn=admin-group,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: admin-group
gidNumber: 12345
memberUid: admin1

我意識到實現我的目標需要採取的步驟之一是創建一個 ACL 規則,允許管理員組中的使用者訪問他們需要的資源。

這是我為修改 olcDatabase={1}monitor: (accesschange.ldif) 中已有規則而編寫的 ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
add: olcAccess

olcAccess: to *
 by self write
 by group/posixGroup/uniqueMember=cn=admins- group,ou=groups,dc=example,dc=com write

我使用以下命令執行此文件:

ldapmodify -x -W -D "cn=ldapadm,dc=example,dc=com" -f monitor.ldif

這執行沒有問題。但是,嘗試在 People OU 下添加使用者時,我仍然在 phpldapadmin 上收到以下錯誤

Could not add the object to the LDAP server.
LDAP said:  Insufficient access
Error number:   0x32 (LDAP_INSUFFICIENT_ACCESS)
Description:    You do not have sufficient permissions to perform that operation.

我一直在研究這個問題 2 週沒有成功。有人可以幫忙嗎?

編輯:我正在查看 /etc/openldap/slapd.d/cn=config/ 下的 olcDatabase:{1}monitor 文件,但沒有看到我添加的新規則。也許這是我如何使用 ldapmodify 的問題?

編輯#2:通過將ldapmodify與EXTERNAL一起使用來修復寫入問題,如下所示:

ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif

我將新的 ACL 規則放在 monitor.ldif 中並以這種方式執行。Monitor.ldif 如下所示。

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=fsr,dc=local" read by * none
olcAccess: to *
 by self write
 by group/groupOfNames/member.exact="cn=admins,ou=groups,dc=fsr,dc=local" write

但是,我仍然無法使用一個 admin1 創建使用者。我不確定我錯過了什麼。我可以看到我在 olcDatabase:{1}monitor 文件中創建的規則,但我仍然無法創建使用者。

who 子句中使用的組模式是錯誤的。您必須使用具有完整 DN 的組模式作為成員屬性。memberUid不管用。

更好的使用:

by group/groupNames/member="cn=admins-group,ou=groups,dc=example,dc=com" write

組條目應如下所示:

dn: cn=admins-group,ou=groups,dc=example,dc=com
objectClass: groupOfNames
cn: admins-group
member: uid=foo1,ou=users,dc=example,dc=com

引用自:https://serverfault.com/questions/956686