我正在手动使用 OpenLDAP 实现 Kerberos,并根据麻省理工学院文档,我必须手动设置这个 ACL:
access to dn.base=""
by * read
access to dn.base="cn=Subschema"
by * read
# Provide access to the realm container.
access to dn.subtree= "cn=EXAMPLE.COM,cn=krbcontainer,dc=example,dc=com"
by dn.exact="cn=kdc-service,dc=example,dc=com" write
by dn.exact="cn=adm-service,dc=example,dc=com" write
by * none
# Provide access to principals, if not underneath the realm container.
access to dn.subtree= "ou=users,dc=example,dc=com"
by dn.exact="cn=kdc-service,dc=example,dc=com" write
by dn.exact="cn=adm-service,dc=example,dc=com" write
by * none
access to *
by * read
根据我所读的内容,我必须在 slapd.conf 中进行设置。
我认为 Suse 不使用 slapd.conf,所以我正在弄清楚应该如何添加这些条目。我完全陷入困境。
有人能帮助我吗?
太感谢了。
答案1
OpenLDAP 的最新版本使用 LDAP 本身来维护其配置。所有内容都包含在cn=config 子树在名为 的数据库中olcDatabase={0}config,cn=config
。此数据库的访问权限通常授予本地用户根在机器上。
为了修改配置,您首先必须找到主数据库名称:
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config '(objectClass=olcDatabaseConfig)'
SASL EXTERNAL 方法检查运行该命令的用户的 uid 和 gid(因此您必须根)。
一旦找到数据库名称(假设),您需要创建一个LDIF 格式的dn: olcDatabase={1}mdb,cn=config
文件(假设):authz.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to dn.base=""
by * read
olcAccess: to dn.base="cn=Subschema"
by * read
olcAccess: to dn.subtree= "cn=EXAMPLE.COM,cn=krbcontainer,dc=example,dc=com"
by dn.exact="cn=kdc-service,dc=example,dc=com" write
by dn.exact="cn=adm-service,dc=example,dc=com" write
by * none
olcAccess: to dn.subtree= "ou=users,dc=example,dc=com"
by dn.exact="cn=kdc-service,dc=example,dc=com" write
by dn.exact="cn=adm-service,dc=example,dc=com" write
by * none
olcAccess: to *
by * read
这将olcAccess
用新属性替换所有以前的属性。然后您需要将更新发送到 OpenLDAP 服务器:
ldapmodify -Y EXTERNAL -H ldapi:/// -f authz.ldif
备注:在 LDAP 服务器上,您通常希望通过 URI ldapi:///
(即 UNIX 套接字)访问服务器,因此您可以添加:
URI ldapi:///
到您的ldap.conf
文件 ( man 5 ldap.conf
),它在不同的发行版上具有不同的路径。例如在 Debian 上它位于/etc/ldap/ldap.conf
。