LDAP与PHP CLI配合良好,但通过Apache无法工作。

5
我将尝试在Fedora系统中使用LDAP验证连接到Windows 2008服务器。以下代码可在命令行工作(输出“Success”):
if($ldap = ldap_connect('10.0.0.101'))
{
  ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
  $bind = ldap_bind($ldap,'administrator@domain.tld','XXXXXXX');
  print ldap_error($ldap);
}

通过Apache/mod_php获取同一文件时,会打印“无法联系LDAP服务器”的错误信息。

我看到了许多此类问题的报告,但没有有用的解决方法。


昨天我在Ubuntu 18.04上使用默认的Apache、PHP 7.2、LDAP和libsasl2-modules-gssapi-mit时遇到了同样的问题,但只有在LDAPS而不是LDAP时才会出现。现在问题已经解决了,但我无法告诉你是什么原因导致它消失了 :-( - reinierpost
2个回答

11

我在CentOS 6上遇到了这个确切的问题很长一段时间。检查php.ini的差异似乎是一个不错的地方,但它并没有给我答案。事实证明这与SELinux有关。

$ getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> on
httpd_can_network_memcache --> on
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_manage_ipa --> off
httpd_read_user_content --> off
httpd_run_stickshift --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_verify_dns --> off

请注意,我的情况中 httpd_can_network_connect 被设置为关闭。这是SELinux中的布尔值,可以使用以下命令进行调整。

$ setsebool -P httpd_can_network_connect on

你可以在http://wiki.centos.org/TipsAndTricks/SelinuxBooleans阅读更多相关内容,其中明确以apache和ldap作为示例。希望能有所帮助!

非常感谢您的回答。我已经为此苦苦挣扎了一整天,遇到了许多死胡同。再次感谢。 - a coder

1
你可能会遇到这个问题,因为Apache有一个php.ini文件,而CLI可能有另一个文件,而且Apache版本可能没有启用LDAP扩展。
尝试使用phpinfo()在两个环境中检查哪个php.ini正在加载。
<?php print phpinfo(); ?>

您应该看到 php.ini 文件的路径以及其他有用的信息:

Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d

查看在CLI上加载的配置的另一种方法是使用-i参数调用php

$ php -i | grep 'php.ini'
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini

那是我检查的第一件事情。不幸的是,它们正在加载相同的ini文件。顺便说一下,这是Fedora 16。 - LDAP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接