使用 Mediawiki 在本地域上使用 LDAP

LDAP on local domain with Mediawiki

刚刚将我的 MediaWiki 运行ning 放到本地域(运行ning 作为 Synology nas 上的容器)。现在我想配置只有域用户可以访问 Wiki 并自动登录。
这仅用于通过页面编辑跟踪用户名。
我的本地域是 abc.local,我的域控制器是 Windows Server 2008 R2。

我做了以下事情:

  1. 已安装扩展 LDAPProviderLDAPAuthentication2PluggableAuth

  2. 将以下内容添加到我的 LocalSettings.php.

    的底部
wfLoadExtension( 'PluggableAuth' );                                                                                             
$wgPluggableAuth_EnabledAutoLogin = true;                                                                                       
wfLoadExtension( 'LDAPAuthentication2' );  
wfLoadExtension( 'LDAPProvider' );                                                                        
$LDAPProviderDomainConfigProvider = function () {                                                            
$config = [                                                                                                  
    'LDAP' => [                                                                                         
         'connection' => [                                                                                                
         "server" => "abc.local",                                                                                       
         "user" => "cn=Administrator,dc=abc,dc=local",
         "pass" => 'passwordhere',                                                                                  
         "options" => [                                                                                   
             "LDAP_OPT_DEREF" => 1
         ],
         "basedn" => "dc=abc,dc=local",                                                                    
         "groupbasedn" => "dc=abc,dc=local",                                                               
         "userbasedn" => "dc=abc,dc=local",                                                                
         "searchstring" => "uid=USER-NAME,dc=abc,dc=local",                                                
         "emailattribute" => "mail"                                                                        
         "usernameattribute" => "uid",                                                                     
         "realnameattribute" => "cn",                                                                      
         "searchattribute" => "uid",                                                                       
         ]                                                                                                  
    ]                                                                                                           
];         
return new \MediaWiki\Extension\LDAPProvider\DomainConfigProvider\InlinePHPArray( $config );                   
};    

插件是 运行ning:

当我进入主页时,我并没有自动登录,所以我尝试使用域凭据登录并获得以下信息:

我很新手,不知道如何配置。有什么想法吗?

谢谢, 拉斯

EDIT:添加 $wgShowExceptionDetails = true; 后,我收到以下错误消息:

EDIT2:来自 phpinfo()

的片段

EDIT3:从新容器开始,试图让 php-ldap 扩展工作并解决 ldap_connect() 错误。
以下是我上次尝试采取的步骤:

参考:https://wiki.chairat.me/books/docker/page/how-to-setup-mediawiki-with-docker

  1. 从控制面板终端和 SNMP 启用 SSH 服务,然后打开与 Synology 框的 SSH 连接(使用 Putty)。以邮箱管理员身份登录。

  2. 运行 以下命令根据最新的 mediawiki 图像创建一个名为 mediawiki 的新 docker 容器:

    sudo docker 容器 运行 -d --name mediawiki -p 8080:80 mediawiki

  3. 运行 以下命令基于最新的 MySQL 图像创建一个名为 mediakwiki-mysql 的新 docker 容器。
    替换为所需的 MySQL root 密码:

    sudo docker 容器 运行 -d --name mediawiki-mysql -v mediawiki-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= mysql

  4. 运行 以下 3 个命令创建一个 docker 网络,然后将两个图像绑定到其中:

    sudo docker network create mediawiki
    sudo docker network connect mediawiki mediawiki
    sudo docker network connect mediawiki mediawiki-mysql
    

    参考:https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04#step-2-%E2%80%94-installing-mysql

  5. 接下来,在 mediawiki-mysql 容器中打开一个 bash 终端,必要时将根插件设置为 mysql_native_password:

    mysql -uroot -p<root_pwd>(这会打开一个 MySQL 提示,其中 是您在 3. 中设置的,没有 <>)

    SELECT user,authentication_string,plugin,host FROM mysql.user;    (this lists user attributes)
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';   (password is the <root_pwd> set above too)
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
    
    
  6. 在 mediawiki-mysql 容器中添加卷映射,以便您可以复制文件 to/from 容器和共享,您可以使用 Synology 上的 File Station 访问。

    停止容器,如果它是 运行ning。
    右键单击并 select 编辑,然后单击音量。
    单击“添加文件夹”和 select 您将使用的共享卷。
    对于“安装路径”,输入 /var/lib/mysql
    启动容器。

    参考:https://computingforgeeks.com/how-to-install-php-7-3-on-debian-9-debian-8/

  7. 如果您想启用 LDAP 身份验证(例如,如果您的域具有活动目录等),请将 php-ldap 扩展添加到 mediawiki 容器。在 mediawiki 容器中打开一个 bash 终端:

    php -m        (this will list all of the active PHP modules - ldap is not listed if not installed yet)
    php -v        (this will show you what version of PHP you are running)
    apt-get update
    apt-get upgrade -y
    apt-get install libldb-dev libldap2-dev
    cd /usr/local/bin
    docker-php-ext-install ldap    (this takes a while)
    php -m       (this shows ldap in the list)
    
  8. 在继续 LDAP 扩展之前设置 MediaWiki。

    在浏览器中打开“http://XXX.XXX.XXX.XXX:8080/”并配置。
    使用“mediawiki-mysql”代替 mysql.
    的“localhost” 将 LocalSettings.php 放入 /usr/www/html 文件夹。

    参考:https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=LDAPProvider&extdistversion=master

  9. 安装支持 LdapAuthentication2 所需的 LDAPProvider mediawiki 扩展

    wget "https://extdist.wmflabs.org/dist/extensions/LDAPProvider-master-04dc101.tar.gz"
    tar -xzf LDAPProvider-master-04dc101.tar.gz -C /var/www/html/extensions
    rm LDAPProvider-master-04dc101.tar.gz
    add "wfLoadExtension( 'LDAPProvider' );"  to the LocalSettings.php file.
    run "php maintenance/update.php"  to create the required databases (takes a few seconds).
    wget "https://extdist.wmflabs.org/dist/extensions/PluggableAuth-REL1_34-17fb1ea.tar.gz"
    tar -xzf PluggableAuth-REL1_34-17fb1ea.tar.gz -C /var/www/html/extensions
    rm PluggableAuth-REL1_34-17fb1ea.tar.gz 
    add "wfLoadExtension( 'PluggableAuth' );"  to the LocalSettings.php file.
    wget "https://extdist.wmflabs.org/dist/extensions/LDAPAuthentication2-master-cb07184.tar.gz"
    tar -xzf LDAPAuthentication2-master-cb07184.tar.gz -C /var/www/html/extensions
    rm LDAPAuthentication2-master-cb07184.tar.gz
    add "wfLoadExtension( 'LDAPAuthentication2' );"  to the LocalSettings.php file.
    copy in the LocalSettings.php file that has the LDAP configuration (item 2 in my original question above).
    

根据上面的评论对话和附加的分步列表,这里有一些想法:

Add php-ldap extension to the mediawiki container if you want to enable ldap authentication (e.g. if you have domain with active directory etc.). Open a bash terminal in the mediawiki container:

php -m (this will list all of the active PHP modules - ldap is not listed if not installed yet)

php -v (this will show you what version of PHP you are running)

apt-get update

apt-get upgrade -y

apt-get install libldb-dev libldap2-dev

cd /usr/local/bin

docker-php-ext-install ldap (this takes a while)

php -m (this shows ldap in the list)

我强烈怀疑这是否有效,即使它有效,我也怀疑它是否会以可持续的方式发挥作用。这个“解决方案”的问题是:

  • 您只是在更改容器状态,而不是图像。每当容器被删除时,您都没有简单的方法来重现设置,除非再次执行所有这些手动步骤。 docker 容器并不是真正的
  • 您“只是”更改了 php 安装,这需要重新启动 php 守护程序或 apache 守护程序,如果您使用的是 apache。由于您没有这样做,处理您的请求的 php 进程不知道新扩展,而 php cli 向您显示 ldap 扩展非常好。

解决您的问题的解决方案是根据 mediawiki:latest docker 图像创建您自己的图像。在此您可以添加所有必需的库并使用此图像而不是基础图像。以下是您需要执行的步骤:

  1. 在您运行正在docker的主机上创建一个新目录
  2. 在您的主机上的这个目录中创建一个 Dockerfile:这个文件是一组说明 docker 以了解如何构建图像。
  3. 填写以下内容:
# inherit from the official mediawiki image
FROM mediawiki:latest

# Install the required libraries for adding the ldap extension for php
RUN apt-get update && \
    apt-get install -y libldb-dev libldap2-dev && \
    rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install ldap
  1. 通过导航到目录和 运行 此命令,使用 docker 构建映像: docker build -t mediawiki:local . -t 为生成的图像创建一个标签,以便您可以使用这个有意义的名称而不是图像的校验和。但是,您可以选择任何您想要的名称和标签。
  2. 运行 包含此新图像的容器: docker run -v /path/to/LocalSettings.php:/var/www/html/LocalSettings.php -p 8080:80 --rm=true -d mediawiki:local。该命令可能与您使用的不同,重要的一点是新图像名称,即 mediawiki:local 或您之前在构建步骤中使用的任何标签。

生成的容器安装了 ldap 插件,它也可以从处理传入请求的 php 守护进程中使用。

对您后续设置的一些评论:如果我理解正确,您也在容器本身中安装扩展,以及通过在容器中使用 shell 并下载扩展。这也不是最好的做法,正如我已经说过的,当您重新创建容器时(这应该总是可能的,您不应该考虑这个),扩展也会被删除。您应该将扩展目录作为卷注入容器,并将扩展保存在主机磁盘上。或者,作为替代方案,您可以在安装 ldap php 扩展的 Dockerfile 中安装 MediaWiki 扩展。