Installing media with on debian etch against Windows Server 2003 R2 Active Directory
A braindump:
- Installed the ‘mediawiki’ and ‘php5-ldap’ packages.
- Hit ‘http://hostname/mediawiki’ and ran through the configuration
- mv /var/lib/mediawiki1.7/config/LocalSettings.php /var/lib/mediawiki1.7/config/
- Added the latest LdapAuthentication.php extension to /var/lib/mediawiki1.7/config/extensions
- Edited the LocalSettings.php to add:
# Additions for LDAP Auth
require_once ‘extensions/LdapAuthentication.php’;$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array(
‘AD’
);$wgLDAPServerNames = array(
‘AD’ => ‘dc01.example.com’
);$wgLDAPSearchStrings = array(
‘AD’ => ‘uid=USER-NAME,dc=corp,dc=example,dc=com’
);$wgLDAPEncryptionType = array(
‘AD’ => ‘clear’
);$wgLDAPProxyAgent = array(
‘AD’ => ‘CN=LDAP User,CN=Users,DC=corp,DC=example,DC=com’
);$wgLDAPProxyAgentPassword = array(
‘AD’ => ‘password’
);$wgMinimalPasswordLength = 1;
# Prevent new user registrations except by sysops
$wgGroupPermissions[‘*’][‘createaccount’] = false;Trying to log in just gave me a blank white page and no LDAP traffic on the DC. I had seen talk of configuring ssl via openldap so I wasn’t sure I had all the right packages since I lacked /etc/openldap.
- I installed the ‘libldap-2.3-0’ package which notably said ‘Replacing files in old package libldap2 …’ but with no change.
- I restarted apache2 and then on login I got an invalid password error and saw LDAP traffic.
- I noticed in the traffic that it was logging in as ‘uid=Username,dc=corp,dc=example,dc=com’
- In the changelog for 1.7f there is “Added function in for changing usernames to lowercase to fix: Extension Talk:LDAP_Authentication Username_modified_.28capital_letter.29.2C_authentication_fails (only works in versions 1.6+)” (Link was broken, added spaces). So I added ‘$wgLDAPGroupLowerCaseUsername = true;’ to LocalSettings.php. This made no difference.
- I tried ‘$wgLDAPLowerCaseUsername = true;’ which made no difference.
- I realized that it was trying to bind to ‘uid=user,dc=corp,dc=example,dc=com’ and went back to take out the SearchString entry and replaced it with:
$wgLDAPSearchAttributes = array(
‘AD’ => ‘sAMAccountName’
); - I tried both SAMAccountName and uid, both showing “No Such Objects” errors in the LDAP query (via the wireshark traffic dump).
- Parsing through the source for LdapAuthentication.php I found the $wgLDAPDebug variable. It’s compared against a debugVal integer, so I set ‘$wgLDAPDebug = 10;’ and got a bunch of text output printed on the login page when I tried to log in.
- Looking at the source between ‘Connected successfully’ and ‘Entering getSearchString’ I should have been seeing ‘Lowercasing the username: $username’, but I wasn’t.
- I stared at the LdapAuthentication.php code for a while and figured out I need this instead:
$wgLDAPLowerCaseUsername = array(
‘AD’ => true
); - Finally thinking about the whole references mess, I looked for BaseDN settings in the code and added this:
$wgLDAPBaseDNs = array(
‘AD’ => ‘dc=corp,dc=example,dc=com’
); - And that worked. So I flipped ‘clear’ to ‘ssl’, and all login attempts started giving me a download for an empty index.php file.
- I went to my CA server, grabbed the CA’s cert in DER format
- Ran ‘openssl x509 -inform der -in myca.cer -out myca.pem -outform pem’, put this in /etc/ssl/certs
- Then I added the following to /etc/ldap/ldap.conf, despite many warnings that openssl/php didn’t read this (I <3 Debian though):
TLS_REQCERT never
TLS_CACERT /etc/ssl/certs/myca.pem
TLS_CACERTDIR /etc/ssl/certs - Then bits started basically timing out this sort of trash in the apache2 error.log:
apache2: cyrus.c:468: ldap_int_sasl_open: Assertion `lc->lconn_sasl_ctx == ((void *)0)’ failed.
[Wed Aug 13 12:00:05 2008] [notice] child pid 6139 exit signal Aborted (6) - I remembered that /etc/ssl/certs had lots of certificates in it, so I commented out the last line, and then everything worked!
- After you login you’ll get settings populated for your user in the ‘user’ table. You’ll want to grab your UID (likely 1) and run the SQL command:
INSERT INTO `user_groups` ( `ug_user` , `ug_group` ) VALUES ( ‘1’, ‘sysop’);
You may need to add a prefix to user_groups if you set your DB up that way. - I used this to basically get rid of the extra URL stuff.
- You’ll have no help pages, use this technique to change all of your help links to go to the mediawiki help links.
Pingback: The action specified by the URL is not recognized by the wiki at btm.geek
Thank you so much. I have been struggling with this all last night and this morning. It WORKED!