如不想看分析过程,可以直接跳到末尾的总结查看配置方法

CentOS通过yum默认安装的 openldapslapd 服务启动后,默认 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 也有在监听中,如下:
change-slapd-bind-port.png

从slapd进程的指令可以发现,是把自定义SLAPD_URLS的值附加在了原本的启动指令上,所以会将新的 port 和原本默认的 port 同时监听起来了;那么如何关闭和禁止监听 defaultport 呢?

于是继续查看启动脚本,在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/"

之后再重启服务,终于按我的要求实现仅监听自定义的端口了;
change-slapd-bind-port2.png

总结

修改CentOS yum 安装的 openldap (slapd) 服务默认监听端口的方法如下:

  1. /etc/sysconfig/ldap文件中的SLAPD_LDAP,SLAPD_LDAPI,SLAPD_LDAPS 三个选项设置为 no
  2. /etc/sysconfig/ldap文件中启用,或者是添加一行SLAPD_URLS=的设置定义自己想要绑定监听的地址和端口
  3. 重启slapd服务
Last modification:March 10, 2019
如果觉得我的文章对你有用,请随意赞赏