如何在 OpenLDAP 2.4 中使用 olcAccess 向用户添加权限

How to add rights to an user with olcAccess, in an OpenLDAP 2.4

我公司有一个 OpenLdap Server 2.4 运行,我需要允许人们在我们的一个 Web 应用程序中更改他们的图片。 该功能已经存在。 LDAP 中的人无权编写自己的属性(特别是此处需要 "jpegPhoto" 属性)。

我在文档中找到了这个

access to attrs=jpegPhoto
    by self =xw
    by * read

我不知道如何使用这些行。使用什么命令或其他。

如果有人能帮助我处理它就太好了。

谢谢

如果您使用 slapd.conf 作为服务器配置文件,您需要应用的修改很简单,如果您使用新的 cn=config 布局,则稍微复杂一些。无论如何要小心:

The older style slapd.conf(5) file is still supported, but its use is deprecated and support for it will be withdrawn in a future OpenLDAP release.

如 OpenLDAP documentation 中所述。

1) cn=配置布局

您需要修改正在使用的数据库的配置。您的 OpenLDAP 服务器可能包含多个数据库,但您只对存储人物数据及其图片的数据库感兴趣。要列出所有可用的数据库,请使用:

slapcat -b cn=config

必须从 OpenLDAP 服务器执行此命令。它将读取 slapd 配置目录中名为 cn=config.ldif 的文件。就我而言,它位于

/usr/local/etc/openldap/slapd.d/cn=config.ldif

注意 slapcat -b cn=config 仅在 shell 用户可以读取此文件时才有效。在我的例子中,文件是

-rw-------  1 ldap  ldap  680 10 mar 21:04 /usr/local/etc/openldap/slapd.d/cn=config.ldif

它属于用户ldap,组ldap(它们是在OpenLDAP 服务器安装期间创建的)。我从未为用户 ldap 设置过密码,所以:

tl;dr 一种读取此文件并成功 运行 slapcat -b cn=config 的方法是 root.

slapcat -b cn=config 的输出很大,但您可以只考虑最后几行,其中列出了您感兴趣的数据库。例如,它可以是

dn: olcDatabase={1}mdb,cn=config

例如,这是包含用户图片的数据库的可分辨名称 (dn)。您希望允许用户更改他们的图片。

你可以修改数据库配置运行ning(和前面的情况类似,你需要对文件cn=config.ldif有写权限,所以你可以像以前一样root):

ldapmodify -f /path/to/yourfile -x -D "cn=config" -W
  • -f /path/to/yourfile是你的配置文件(见下文);
  • -x为Simple Authentication,不使用SASL时需要;
  • -D "cn=config" 是您用来进入 OpenLDAP 数据库的用户名。通常每个数据库都有一个超级用户(通常称为 Manager)和一个全局超级用户。名为 cn=config 的用户是 全局超级用户 。您应该在 OpenLDAP 服务器安装期间配置其密码;如果您没有这个密码,您可能无法修改数据库配置;
  • -W 要求您输入用户 cn=config 的密码。

配置文件,位于/path/to/yourfile,必须是格式如下的纯文本文件:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=jpegPhoto
  by self write
  by * read

我建议您使用 by self write 而不是 by self =xw(这将不允许用户阅读他们的图片)。注意在by前放两个个空格,如this answer.

您现在可以再次 运行 slapcat -b cn=config 检查配置是否已修改,以及 olcAccess 语句的顺序是否正确。如果没有,您可以删除它们并重新添加它们,知道每个新的 olcAccess 规范将自动放在前面的规范之后。

2) slapd.conf 布局

如果您使用的是旧的 slapd.conf 配置文件,您只需要对它的写入权限。通常是:

-rw-------  1 ldap  ldap   2557 Dec  15  2016 slapd.conf

因此,您可以使用您喜欢的文本编辑器将其打开为 root。确定要修改的数据库部分(例如以以下内容开头的部分:

database        mdb
maxsize         1073741824
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"

并在本节底部简单地添加你的行,如果其他 access 语句已经存在,请小心。同样,我建议使用 by self write 而不是 self =xw.


无论您的配置如何,修改后重启 OpenLDAP 服务器(进程 slapd)。


如果您需要更多示例and/or 说明,请考虑: