Skip to content

Apache2.4+SVN+OpenLDAP集成问题 Can’t contact LDAP server

背景

公司内部的一些工具系统越来越多,需要一套统一的账户管理,便搭建LDAP服务进行解决,集成几个服务之后,在集成svn时,却出现了问题。

问题现象

  • 错误信息
    界面报错为"internal server error 500"

后台调整日志级别之后错误如下:

[Tue Aug 24 21:14:11.163950 2021] [authnz_ldap:debug] [pid 19373:tid 139955747571456] mod_authnz_ldap.c(523): [client 192.168.60.7:56086] AH01691: auth_ldap authenticate: using URL ldap://xxxx:389/ou=People,dc=cqmaple,dc=com?uid?sub?(objectClass=*), referer: http://xxxx/
[Tue Aug 24 21:14:11.168307 2021] [authnz_ldap:info] [pid 19373:tid 139955747571456] [client 192.168.1.7:56086] AH01695: auth_ldap authenticate: user rancw authentication failed; URI /svn/ [LDAP: ldap_simple_bind() failed][Can't contact LDAP server], referer: http://xxxx/

配置文件如下:

<Location /svn>
        DAV svn
        SVNParentPath /home/svn
        AuthName "SVN Repos"
        AuthType Basic
        AuthzSVNAccessFile /home/svn/conf/authz
        AuthBasicProvider ldap
        AuthLDAPURL "ldap://xxxx:389/ou=People,dc=cqmaple,dc=com?uid?sub?(objectClass=*)" NONE
        AuthLDAPBindDN "cn=admin,dc=cqmaple,dc=com"
        AuthLDAPBindPassword "123456"
        Require valid-user
        LogLevel debug
</Location>

问题分析

根据后台日志,开始定位是配置问题,在网上找了一些配置信息,发现并没有不同。

最后注意到Can't contact LDAP server,分析为注意到访问问题,根据日志auth_ldap authenticate: using URL ldap://xxxx:389/ou=People,dc=cqmaple,dc=com?uid?sub?(objectClass=*),发现链接信息是无误的,又通过ldapsearch命令进行检查,确认服务可用.
在查询一些资料之后,可能是SELinux安全配置导致的。
于是检查 SELinux logs are at /var/log/audit/audit.log,如下信息

type=SYSCALL msg=audit(1629853069.396:767970): arch=c000003e syscall=42 success=no exit=-13 a0=18 a1=7faf1800a710 a2=10 a3=0 items=0 ppid=15372 pid=15378 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=connect AUID="unset" UID="apache" GID="apache" EUID="apache" SUID="apache" FSUID="apache" EGID="apache" SGID="apache" FSGID="apache"
type=PROCTITLE msg=audit(1629853069.396:767970): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=AVC msg=audit(1629853069.396:767971): avc:  denied  { name_connect } for  pid=15378 comm="httpd" dest=389 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket permissive=0

日志中avc:denied { name_connect } for pid=15378 comm="httpd" dest=389,可以理解为SELinux不允许httpd访问ldap服务。

解决问题

  • 通过命令检查
    # getsebool -a | grep ldap
    authlogin_nsswitch_use_ldap --> off
    dhcpd_use_ldap --> off
    httpd_can_connect_ldap --> off

    发现httpd_can_connect_ldap为off。

  • 修改配置
    setsebool httpd_can_connect_ldap 1
    # 确认是否修改成功
    # getsebool -a | grep ldap
    authlogin_nsswitch_use_ldap --> off
    dhcpd_use_ldap --> off
    httpd_can_connect_ldap --> on

    最后重启一下服务即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注