我在公司运行OpenLdap Server 2.4,我需要允许人们在我们的WebApplication中更改自己的图片。 该功能已经存在。 LDAP中的人员无权编写自己的属性(特别是“jpegPhoto”属性)。
我在文档中找到了这个
access to attrs=jpegPhoto
by self =xw
by * read
我不知道如何使用这些线。使用什么命令或其他什么。
如果有人可以帮助我处理它可能会很棒。
由于
答案 0 :(得分:4)
如果使用slapd.conf
作为服务器配置文件,则需要应用的修改很简单,如果使用新的cn=config
布局,则需要更复杂一些。无论如何,要小心:
仍然支持较旧的slapd.conf(5)文件,但不推荐使用它,并且在将来的OpenLDAP版本中将撤消对它的支持。
如OpenLDAP documentation中所述。
您需要修改正在使用的数据库的配置。您的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
)。您希望允许用户更改其图片。
您可以修改正在运行的数据库配置(与前一种情况类似,您需要对文件cn=config.ldif
具有写入权限,因此您可以像以前一样root
:
ldapmodify -f /path/to/yourfile -x -D "cn=config" -W
-f /path/to/yourfile
是您的配置文件(见下文); -x
是简单身份验证,如果您不使用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
规范将自动放在先前的规范之后。
如果您使用旧的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
)。
如果您需要进一步的示例和/或说明,请考虑:
cn=config
configuration example;