CentOS 中的 Apache httpd 出现 LDAP 错误

CentOS 中的 Apache httpd 出现 LDAP 错误

我正在尝试设置一个 Apache Web 服务器,该服务器仅允许访问 LDAP 存储中的用户。我能够使用 Apache 2.2.21 针对 LDAP 服务器在本地 Windows 7 计算机上设置我想要的内容。尝试通过提示登录后,Linux 版本显示 500 错误页面。

为了在 CentOS 上设置 Apache,我运行了以下命令:

yum 安装 httpd mod_ssl mod_authz_ldap

我确信

LoadModule ldap_module 模块/mod_ldap.so
LoadModule authnz_ldap_module 模块/mod_authnz_ldap.so

在 /etc/httpd/conf/httpd.conf 中均未注释。

我的 Windows 和 Linux httpd.conf 中的 <Directory/> 是相同的(当然,DocumentRoot 除外)

AuthName “使用电子邮件地址登录”
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://ldap.sample.org:1389/ou=Users,dc=sample,dc=org?uid?sub
AuthLDAPBindDN “cn=Directory Manager”
AuthLDAPBindPassword ldappassword
Require valid-user

选项索引FollowSymLinks
允许覆盖所有
订单允许,拒绝
允许所有

(注意:我们的 LDAP 服务器在端口 1389 上提供服务。)

Linux 计算机上的 Apache 的 /var/log/httpd/error_log 显示:

[2011 年 12 月 23 日星期五 08:17:20] [警告] [客户端 192.168.1.113] [8181] auth_ldap 身份验证:用户 foo 身份验证失败;URI / [LDAP:ldap_simple_bind_s() 失败][无法联系 LDAP 服务器]

我可以从 Windows 和 Linux 计算机远程登录到 LDAP 端口。正如我之前提到的,Windows 版本完全按照预期运行。

我确实注意到 Windows 版本和 Linux 版本的 Apache httpd.conf 之间存在一个区别:Linux 版本几乎所有模块都默认启用,而 Windows 版本的大多数模块都被注释掉了,这让我相信可能存在模块冲突。

有人有什么想法吗?

谢谢!

答案1

事实证明 SELinux 阻止了 Apache 与 LDAP 的连接。运行以下命令:

grep -m 1 httpd /var/log/audit/audit.log | audit2why

我发现 Apache 正在尝试连接到 SELinux 无法识别的端口。在遵循以下建议后本网站CentOS/SELinux 文档我找到了解决方案。我的问题是由于使用非标准 LDAP 端口(OpenDS 推荐的)造成的。通过将这些端口添加到“ldap_port_t”下的 SELinux,我能够解决这个问题。以 root(或“sudo”)身份运行以下命令,将端口号替换为您自己的 LDAP/LDAPS 端口号。

semanage 端口 -a -t ldap_port_t -p tcp 1389
semanage 端口 -a -t ldap_port_t -p tcp 8636
semanage 端口 -a -t ldap_port_t -p udp 1389
semanage 端口 -a -t ldap_port_t -p upd 8636

我希望这可以帮助将来的某些人避免像我一样撞墙。

相关内容