在OpenLDAP代理的介绍性文章中,我们提到slapd.conf是配置文件,它告诉slapd服务做什么。除此之外,还有一种动态配置slapd的方法,其中配置存储在LDIF数据库中。将来,LDIF数据库将用于配置slapd,旧式的slapd.conf已弃用。可以使用slapdtest命令将slapd.conf转换为LDIF样式。
slapdtest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
为了演示的目的,我们将使用slapd.conf来解释如何将slapd服务配置为OpenLDAP代理。我们将解释这里配置了meta后端的那个。ldap后端配置与meta后端类似,只是有一些细微的差别。
下面是OpenLDAP代理的工作示例配置。
# # 有关配置选项的详细信息,请参阅slapd.conf(5)。 # 此文件不应为世界可读。 # # 包含模式 include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/duaconf.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/collective.schema # 允许LDAPv2客户端连接。这不是默认设置。 allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # 加载动态后端模块 # - modulepath是体系结构相关的值(32/64位系统) # - back_sql.la覆盖需要openldap-server-sql包 # - dyngroup.la和dynlist.la不能同时使用 modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload back_meta moduleload rwm # 下三行允许使用TLS来加密使用虚拟测试证书的连接,您可以通过运行来生成该证书。 TLSCACertificateFile /root/openldap_proxy/data/certs/ldap.crt TLSCertificateFile /root/openldap_proxy/data/certs/ldap.crt TLSCertificateKeyFile /root/openldap_proxy/data/certs/ldap.key # 日志级别 loglevel 256 ####################################################################### # 数据库定义 ####################################################################### #### 数据库定义 ######################################### database meta suffix "dc=test,dc=com" rootdn "cn=admin,dc=test,dc=com" rootpw "password" uri "ldap://192.168.56.100/dc=test,dc=com" readonly yes lastmod off suffixmassage "dc=test,dc=com" "dc=ou1,dc=test,dc=com" uri "ldap://192.168.56.101/dc=test,dc=com" readonly yes lastmod off suffixmassage "dc=test,dc=com" "dc=ou2,dc=test,dc=com" idassert-bind bindmethod=simple binddn="cn=admin,dc=test,dc=com" credentials="password" mode=none flags=non-prescriptive idassert-authzFrom "dn.exact:cn=admin,dc=test,dc=com" overlay rwm rwm-map attribute uid sAMAccountName
这是一个标准的slapd.conf文件,其中包含模式声明和其他常规设置。我们将只关注特定于代理的设置。
moduleload back_meta
这加载meta后端模块,以便可以使用meta后端
database meta
这声明LDAP服务器的后端,在本例中为meta。也可以设置为ldap。
suffix "dc=test,dc=com"
这声明LDAP客户端可以用来搜索LDAP代理的虚拟命名上下文(基)。它可以是任何符合基语法有意义的值
rootdn "cn=admin,dc=test,dc=com"
rootpw "password"
这两个条目声明LDAP客户端可以用来向LDAP代理进行身份验证的虚拟绑定dn和密码。当远程LDAP服务器需要客户端绑定时,这些很有用,因为我们需要告诉代理谁可以向远程LDAP服务器进行身份验证。
uri "ldap://192.168.56.100/dc=test,dc=com"
这启动一个新的远程LDAP服务器条目。语法应为"://[:]/<vritual-naming-context/suffix>"。uri末尾的虚拟命名上下文通常与database meta之后声明的后缀相同。
每个新的远程LDAP服务器都应该使用单独的uri。
suffixmassage "dc=test,dc=com" "dc=ou1,dc=test,dc=com"
这声明了代理中定义的后缀/基与远程LDAP服务器中真实基之间的映射,以便在客户端查询到来时,它可以将查询重定向到远程LDAP服务器的真实搜索基。左部分是虚拟命名上下文,它通常与database meta之后声明的后缀相同。右部分是远程LDAP服务器中的真实搜索基。
ldap后端不支持此功能。
readonly yes
这声明LDAP客户端只能查询远程LDAP服务器,而不能更新远程LDAP服务器。当使用LDAP服务器作为代理时,这通常是我们会做的事情。
lastmod off
这也表示远程服务器不能被修改。默认值为off,不允许修改。
idassert-bind bindmethod=simple
binddn="cn=admin,dc=test,dc=com"
credentials="password"
mode=none
flags=non-prescriptive
idassert-authzFrom "dn.exact:cn=admin,dc=test,dc=com"
当远程LDAP服务器需要客户端身份验证才能查询服务器时,这些是必需的。支持几种bindmethod。一种是simple,它需要正常的dn和密码进行身份验证。binddn和凭据应由真实的LDAP服务器提供。
此外,authzFrom声明哪些本地标识可以访问身份断言功能。在本例中,我们定义了cn=admin,dc=test,dc=com可以访问它。这是在代理中定义的rootdn。
overlay rwm
rwm-map attribute uid sAMAccountName
这定义了代理服务器向客户端公开的属性名称与远程LDAP服务器提供的真实属性名称之间的映射。当不同的远程LDAP服务器可能具有不同的属性名称但含义相同的时候,这很有用。例如,在Linux LDAP服务器中,uid表示用户ID,而在Windows AD中,相同的内容可能由sAMAccountName表示。或者当需要自定义属性时,它们也很有用。
在下一篇文章中,我们将介绍如何使用slapd.conf设置LDAP代理。