如何在 OpenLDAP 中设置访问控制列表 ACL

9 ldap acl debian

我正在使用 Debian Squeeze OpenLDAP。在哪里可以设置 ACL?是否可以执行对指令的访问ldapmodifyslapd.confDebian 中没有文件,他们使用slapd.d文件夹

小智 10

来自Debian 维基

从 2.4.23-3 版本开始,默认情况下 OpenLDAP 的配置已更改为 /etc/ldap/slapd.d。

因此,OpenLDAP 允许通过“cn=config”树动态配置自身。

您可以在cn=config 中列出 DN并看到如下内容:

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config dn
...
# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
...

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}_skip_
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
Run Code Online (Sandbox Code Playgroud)

属性olcAccess正是您所需要的。

让我们向数据库dc=nodomain添加新的 ACL 规则。

创建 ldif 文件

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read
Run Code Online (Sandbox Code Playgroud)

申请:

sudo ldapmodify  -Y EXTERNAL -H ldapi:/// -f /tmp/test.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}hdb,cn=config"
Run Code Online (Sandbox Code Playgroud)

瞧:

sudo ldapsearch  -Y EXTERNAL -H ldapi:/// -b cn=config 'olcDatabase={1}hdb'
...
olcAccess: {3}to dn.base="cn=test,dc=nodomain" by * read
Run Code Online (Sandbox Code Playgroud)


And*_*dyM 1

我并不是说这是一个解决方案,但它可能会帮助您:-)

我问了一个类似的服务器故障问题。

https://serverfault.com/questions/246252/openldap-rhel-6

我从未得到答案,最后我不得不创建一个 slapd.conf 并使用以下命令将其转换到 slapd 目录(注意这是在 RHEL 上)

删除 /etc/openldap/slapd.d/ 目录的内容:

rm -rf /etc/openldap/slapd.d/* 
Run Code Online (Sandbox Code Playgroud)

编辑您的自定义 slapd.conf 文件。

运行 slaptest 检查配置文件的有效性并使用您的设置创建一个新的 slapd.d 目录

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d 
Run Code Online (Sandbox Code Playgroud)

配置新目录的权限,这样 ldap 就不会抱怨了。

chown -R ldap:ldap /etc/openldap/slapd.d 

chmod -R 000 /etc/openldap/slapd.d 

chmod -R u+rwX /etc/openldap/slapd.d 
Run Code Online (Sandbox Code Playgroud)

启动您的 LDAP 服务器。

我创建了一个小脚本来在每次更改 slapd.conf 时运行这些命令

问候安迪