【发布时间】:2011-03-15 08:51:16
【问题描述】:
我的 php 脚本有以下问题:
PHP 警告:ldap_bind(): Unable to bind to server: Can't contact LDAP server in ....
ldap_connect() 说“成功”但ldap_bind() 失败,如何解决这个问题?
【问题讨论】:
我的 php 脚本有以下问题:
PHP 警告:ldap_bind(): Unable to bind to server: Can't contact LDAP server in ....
ldap_connect() 说“成功”但ldap_bind() 失败,如何解决这个问题?
【问题讨论】:
由于 SELinux 限制 HTTPD 可以使用的端口,在 RHEL7 (CentOS7) 上出现此错误。
LDAP 端口 389 和 636 不在默认允许列表中,您可以通过以下方式取消阻止:
setsebool -P httpd_can_network_connect 1
您可以通过尝试连接到 LDAP 服务器的套接字来测试限制:
fsockopen('LDAP-Server-IP', 389);
它会给出“权限被拒绝”,表明它被阻止而不是凭据问题。
同时检查您的 SELinux 审核日志文件是否有其他被阻止的内容。
【讨论】:
Connect 打开会话。绑定是真正验证你的东西。因此,您连接但未使用有效凭据登录。
【讨论】:
true as the result of bind在我的本地机器上。
ldap_connect 方法不会连接或打开与服务器的会话。来自文档 注意:此函数不会打开连接。它会检查给定的参数是否合理,并且可以在需要时立即打开连接。。执行ldap_bind 的行为将启动连接,ldap_start_tls 也是如此。
ldap_bind() 函数要求三个参数:
如果您仅使用资源 ID 进行绑定:-
// $ldap=ladap_connect(*hostname*,*port*);
// ldap_connect() returns a resource id
ldap_bind() returns a boolean value(true or false)
ldap_bind($ladp); //annonymous bind
$lb=ldap_bind($ldap,"uid=xxx,ou=something,o=hostname.com","password"); //used to authenticate
如果没有,这应该可以工作,那么您使用的凭据无效。
【讨论】:
有时问题取决于您的环境(Linux、Windows...) 尝试使用以下选项之一进行绑定:
$connect = ldap_connect("ldap://".$ldap_server);
$auth_user = 'CN=XXX,OU=XXX,DC=XXX,DC=com';
$bind = ldap_bind($connect, $auth_user , $auth_pass);
或
$bind = ldap_bind($connect, 'YourDomaine\\'.$auth_user , $auth_pass);
【讨论】: