CentOS通过yum默认安装的
openldap
在 slapd
服务启动后,默认 listen
的配置是ldap:///
ldapi:///
这两个参数,也就是会监听默认的 TCP:0.0.0.0:389 和一个IPC (Unix-domain socket)
;查看 openldap
的官方手册,发现修改自定义的监听端口和指定bind
的IP地址的方法,都是通过命令行的方式在启动 slapd 进程的命令后面加 -h 参数来指定监听的地址和端口,比如:
/usr/sbin/slapd -h ldap:/// ldapi:///
但是我在CentOS
下用yum
安装的opldap
并不需要我们手动执行上面的命令来启动,而是由/etc/init.d/slapd
这个专门的服务控制脚本来进行启动和停止的;
一开始我想到的是直接修改/etc/init.d/slapd
这个启动脚本,将 -h
参数写死到start
函数中。但总觉得这有点不够科学,应该有更加合理的配置参数或选项可以让我自定义才对;
于是完整看了一遍/etc/init.d/slapd
的处理逻辑,发现它会从/etc/sysconfig/ldap
文件来读取SLAPD_URLS
这个变量的参数,并用来设置成启动时的-h
参数;
于是直接将/etc/sysconfig/ldap
中的SLAPD_URLS
变量取消注释,并修改成了我需要的如下这样:
SLAPD_URLS="ldap://0.0.0.0:489/"
重启slapd服务器,发现除了我新定义的 0.0.0.0:489 有在正常监听以外,原本默认的 389 也有在监听中,如下:
从slapd进程的指令可以发现,是把自定义SLAPD_URLS
的值附加在了原本的启动指令上,所以会将新的 port
和原本默认的 port
同时监听起来了;那么如何关闭和禁止监听 default
的 port
呢?
于是继续查看启动脚本,在start
函数中发现了如下配置启动参数的代码:
harg="$SLAPD_URLS"
if test x$SLAPD_LDAP = xyes ; then
harg="$harg ldap:///"
fi
if test x$SLAPD_LDAPS = xyes ; then
harg="$harg ldaps:///"
fi
if test x$SLAPD_LDAPI = xyes ; then
harg="$harg ldapi:///"
fi
所以在生成启动参数时,脚本会做三个判断,分别是检查SLAPD_LDAP
,SLAPD_LDAPS
,SLAPD_LDAPI
这三个选项是否为yes
如果是的话,就会在我们自己定义的 SLAPD_URLS
后面附加默认的监听参数,所以最后拼接出来的启动参数 -h
后面就会同时包含自定义的端口和系统默认的端口;
这三个系统默认的监听选项开关同样也是定义在 /etc/sysconfig/ldap
配置文件中;将其默认的 yes
修改为no
,修改后如下:
SLAPD_LDAP=no //禁用默认的389
SLAPD_LDAPI=no //禁用默认的IPC(Unix-domain socket)
SLAPD_LDAPS=no //禁用默认的ldaps 636
SLAPD_URLS="ldap://0.0.0.0:489/"
之后再重启服务,终于按我的要求实现仅监听自定义的端口了;
总结
修改CentOS
yum
安装的 openldap
(slapd)
服务默认监听端口的方法如下:
- 将
/etc/sysconfig/ldap
文件中的SLAPD_LDAP
,SLAPD_LDAPI
,SLAPD_LDAPS
三个选项设置为no
- 在
/etc/sysconfig/ldap
文件中启用,或者是添加一行SLAPD_URLS=
的设置定义自己想要绑定监听的地址和端口 - 重启
slapd
服务