Mediawiki 1.31 LTS Active Directory integráció Debian-MySQL környezetben
Összefoglalás
A Mediawiki 1.31 verziónál változott az LDAP kezelés, jeleneleg az LDAP hub módszer használatos. A leírás ennek használatával mutatja be a Mediawiki és egy Windows Active Directory integrációját.
A pédák Debian 9.11 operációs rendszeren a Mediawiki 1.31 telepített verziójával készültek. Az Apache http szerver és a Php futtatókörnyezet az operációs rendszer tárolójából telepítettük. A Domain Controller egy Windows 2019 szerver.
A parancsok root jogot feltételeznek. (állandó root jog: sudo -i)
Előfeltételek
Php LDAP modul
Telepítés:
apt -y install php-ldap
Active Directory felhasználó
Kell egy létező Active Directory felhasználó, amivel felépítjük a kapcsolatot. A felhasználó distinguished neve kell. Ezt a következő képpen ellenőrizhetjük a domain controlleren powershellben:
Get-ADUser username | select DistinguishedName
DistinguishedName
-----------------
CN=username,CN=Users,DC=domain,DC=com
Ezután ellenőrizzük az LDAP kapcsolatot linuxon. Ha kell telepítsük az ldap-utils csomagot.
apt -y install ldap-utils
ldapsearch -x -LLL -h [dc.domain.com] -D "CN=username,CN=Users,dc=domain,dc=com" -w [password] -b "dc=domain,dc=com"
- -h : Az Active Directory szerver IP címe vagy domain neve
- -D : A felhasználó distinguished neve.
- -w : A felhasználó jelszava
- -b : Alap distinguished név a kereséshez.
A kommunikáció a 389 TCP porton történik, ezt kell biztosítani a Mediawiki és az Active Directory között.
Ha minden rendben van kezthetjük a Mediawiki konfigurálását.
Mediawiki modulok telepítése
A modulok build számai release-enként változnak. A https://extdist.wmflabs.org/dist/extensions/ linken lehet ellenőrizni a legfrissebb változatokat.
wget -qO- https://extdist.wmflabs.org/dist/extensions/PluggableAuth-REL1_31-300ac44.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
wget -qO- https://extdist.wmflabs.org/dist/extensions/LDAPProvider-REL1_31-7f81741.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
wget -qO- https://extdist.wmflabs.org/dist/extensions/LDAPAuthorization-REL1_31-53e1ada.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
wget -qO- https://extdist.wmflabs.org/dist/extensions/LDAPAuthentication2-REL1_31-8bd6bc8.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
wget -qO- https://extdist.wmflabs.org/dist/extensions/LDAPGroups-REL1_31-5a27bd8.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
wget -qO- https://extdist.wmflabs.org/dist/extensions/LDAPUserInfo-REL1_31-da95a07.tar.gz | tar -xzf - -C /[vhostdir]/extensions/
MySQL adatbázis mósosítása:
cat /[vhostdir]/extensions/LDAPProvider/schema/ldap-mysql.sql | mysql -u[dbuser] -p[dbpassword] [dbname]
LDAP hub konfigurálása
Az LDAP hub-nak létre kell hozni a /[vhostdir]/ldap.json konfigurációs fájlt a következő tartalommal. Ebben lehet az Active Directoryval kapcsolatos beállításokat megadni.
{
"domain.com": {
"connection": {
"server": "dc.domain.com",
"port": "389",
"user": "CN=Wiki user,CN=Users,DC=domain,DC=com",
"pass": "password",
"enctype": "clear",
"options": {
"LDAP_OPT_DEREF": 1
},
"basedn": "dc=domain,dc=com",
"userbasedn": "dc=domain,dc=com",
"groupbasedn": "dc=domain,dc=com",
"searchattribute": "samaccountname",
"usernameattribute": "samaccountname",
"realnameattribute": "cn",
"emailattribute": "mail",
"grouprequest": "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\UserMemberOf::factory",
"presearchusernamemodifiers": [ "spacestounderscores", "lowercase" ]
},
"userinfo": [],
"authorization": [],
"groupsync": {
"mapping": {
"engineering": "CN=Mediawiki Admins,OU=Users,DC=domain,DC=com",
"bureaucrat": "CN=Mediawiki Admins,OU=Users,DC=domain,DC=com",
"interface-admin": "CN=Mediawiki Admins,OU=Users,DC=domain,DC=com",
"sysop": "CN=Mediawiki Admins,OU=Users,DC=domain,DC=com"
}
}
}
}
Ezután a Mediawiki /[vhostdir]/LocalSettings.php konfigurációs fáljban kell az LDAP hub-al kapcsolatos paramétereket megadni a Mediawikiben megszokott módon.
$wgEmailConfirmToEdit = false;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = false;
$wgGroupPermissions['*']['autocreateaccount'] = true;
$wgBlockDisablesLogin = true;
$ldapJsonFile = "$IP/ldap.json";
$ldapConfig = false;
if (is_file($ldapJsonFile) && is_dir("$IP/extensions/LDAPProvider")) {
$testJson = @json_decode(file_get_contents($ldapJsonFile),true);
if (is_array($testJson)) {
$ldapConfig = true;
} else {
error_log("Found invalid JSON in file: $IP/ldap.json");
}
}
if ( $ldapConfig ) {
wfLoadExtension( 'PluggableAuth' );
wfLoadExtension( 'LDAPProvider' );
wfLoadExtension( 'LDAPAuthentication2' );
wfLoadExtension( 'LDAPAuthorization' );
wfLoadExtension( 'LDAPUserInfo' );
wfLoadExtension( 'LDAPGroups' );
$LDAPProviderDomainConfigs = $ldapJsonFile;
$LDAPAuthentication2AllowLocalLogin = true;
$wgPluggableAuth_ButtonLabel = "Log In";
$wgPluggableAuth_EnableLocalLogin = true;
}