CentOS OpenLdap Apache PHP 및 MediaWiki

CentOS OpenLdap Apache PHP 및 MediaWiki

그래서 저는 "무료" 버전의 Active Directory(일명 OpenLdap)와 통합되는 "무료" Wiki를 설정하여 작업하고 거래해야 하는 개발 그룹을 위한 매우 간단한 설정을 제공하려고 노력해 왔습니다. 부족 지식. 이전에 이 작업을 본 적이 있으므로 제대로 작동할 것이라는 것을 알고 있습니다... 다른 모든 항목은 지금까지 잘 설정되어 있습니다.

간단하지는 않지만 정말 간단하며 CentOS 규칙을 따르면 모든 것이 작동합니다(적어도 ProxMox에서는). 이제 문제가 발생합니다. 사용자 인증이 원활하게 진행되도록 MediaWiki를 OpenLdap과 통합하려고 합니다.

여기서 큰 장애물에 부딪혔습니다. 문서에서는 이 작업을 수행하는 방법을 정확하게 안내하지 않으며, 많은 경우 그룹에서 MSFT Active Directory를 다루고 있는 것처럼 보이지만 반드시 내가 사용하는 오픈 소스 도구를 사용하는 것은 아닙니다. 예를 들어 토론의 마지막 스레드는 다음과 같습니다.

여기에서 수행하는 작업을 수행하면 "바인딩 실패" 메시지 대신 내 로그에 "LDAP에서 일치하는 사용자가 없습니다" 메시지가 표시됩니다.

2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Setting domain as: sinbad
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering userExistsReal
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering Connect
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Using TLS or not using encryption.
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Using non-standard port: 389
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Using servers: ldap://master.sinbad.com:389
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Using TLS
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 PHP's LDAP connect method returned true (note, this does not imply it connected to the server).
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getSearchString
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Doing a straight bind
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 userdn is: uid=Dsailor,ou=people,dc=master,dc=sinbad,dc=com
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Resource id #454  uid=Dsailor,ou=people,dc=master,dc=sinbad,dc=com
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Did not find a matching user in LDAP
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering strict.
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Entering getDomain
2020-07-31 14:40:35 master.sinbad.com my_wiki: 2.1.0 Returning true in strict()

이것은 내 LDAP 구성입니다.

$wgLDAPDomainNames = array('sinbadcomd');
$wgLDAPServerNames = array('sinbadcomd' => 'master.sinbad.com');
$wgLDAPSearchAttributes = array('sinbadcomd' => 'uid');
$wgLDAPSearchStrings =  array('sinbadcomd' => 'uid=USER-NAME,ou=people,dc=master,dc=sinbad,dc=com');
$wgLDAPBaseDNs = array('sinbadcomd' => 'dc=master,dc=sinbad,dc=com');


# To pull e-mail address from LDAP
$wgLDAPPreferences = array('sinbadcomd' => array( 'email' => 'mail'));

$wgLDAPDebug = 3;
$wgLDAPUseLocal = false;
$wgMinimalPasswordLength = 1;
$wgLDAPRetrievePrefs = array( 'EUROPE.LAN' => true );

$wgLDAPEncryptionType = array('sinbadcomd' => 'tls');
//$wgLDAPEncryptionType = array('sinbadcomd' => 'ssl');
//$wgLDAPPort = array('sinbadcomd' => '636');
$wgLDAPPort = array('sinbadcomd' => '389');
$wgLDAPProxyAgent = array('sinbadcomd' => 'cn=proxyhost,ou=system,dc=master,dc=sinbad,dc=com');
$wgLDAPProxyAgentPassword = array('sinbadcomd' => '***');
$wgLDAPLowerCaseUsername = array('sinbadcomd' => true);


/*$wgLDAPUserBaseDNs = array('sinbadcomd' => 'ou=people,dc=master,dc=sinbad,dc=com');
//$wgLDAPUserBaseDNs = [];

# Group based restriction
$wgLDAPGroupUseFullDN = array( 'sinbadcomd' => false );
$wgLDAPGroupObjectclass = array( 'sinbadcomd' => "posixgroup" );
$wgLDAPGroupAttribute = array( 'sinbadcomd '=> "gidNumber" );
$wgLDAPGroupSearchNestedGroups = array( 'sinbadcomd' => false );
$wgLDAPGroupNameAttribute = array( 'sinbadcomd' => "cn" );
*/

손에 얼굴을 대다. 누구든지 나에게 여기에 어떤 조언을 줄 수 있습니까? 참고: 더 새롭고 관련성이 높은 시스템을 사용할 수 있다는 것을 알고 있습니다.위키피디아한때 나에게 효과가 있었던 간단한 주문을 받아들인 것 같고 도움이 필요한 것 같습니다(마지막으로 PHP를 사용한 것이 언제인지 기억이 나지 않습니다).

답변1

그래서 저는 최근 이런 것들을 디버깅하는 데 꽤 많은 시간을 소비하고 있습니다. 여기서 수행한 작업을 살펴보면 다음 줄이 필요하지 않다고 생각합니다.

$wgLDAPRetrievePrefs = array( 'EUROPE.LAN' => true );

그리고 주석 줄은 읽기에 약간 혼란스럽습니다. 그러나 내가 아는 한, 여기에는 작은 패치 수정이 도움이 될 수 있습니다.

diff ~/src/LdapAuthentication/LdapAuthenticationPlugin.php extensions/LdapAuthentication/
532a533,536
>
>                                 // If we are going to find and entry we need to bind first?
>                                 $bindval = self::ldap_bind( $this->ldapconn, $this->getConf('ProxyAgent'), $this->getConf('ProxyAgentPassword') );

저는 MediaWiki 사이트에서 답변이나 동료 검토를 기다리면서 다음과 같이 변경했습니다. https://www.mediawiki.org/wiki/주제: Vr5s4thrk4imbxjx

그러나 내가 아는 한 그것은 효과가 있고 그것이 지금 나에게 중요한 전부입니다(실제로 이것을 알아내는 데 오랜 시간이 걸렸습니다).

관련 정보