具有Mediawiki的本地域上的LDAP

问题描述 投票:1回答:1

仅让我的MediaWiki在本地域上运行(在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 );                   
};    

插件正在运行:

enter image description here

当我进入主页时,我不会自动登录,因此我尝试使用域凭据登录并获得以下信息:enter image description here

我在这里很绿,不知道如何配置。有什么想法吗?

谢谢,鲁斯

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

EDIT2:从phpinfo()剪断

enter image description here

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根密码:

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

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

    sudo docker网络创建mediawiki

    sudo docker网络连接mediawiki mediawiki

    sudo docker网络连接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

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

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

    SELECT user,authentication_string,plugin,host from mysql.user; (列出用户属性)

    ALTER USER'root'@'localhost'用mysql_native_password标识,并用'password'; (密码也是上面的设置)

    用ALTER USER'root'@'%'用mysql_native_password标识'password';

  2. 在mediawiki-mysql容器中添加卷映射,以便您可以向容器中复制文件或从中复制文件,以及可以通过Synology上的File Station访问的共享。

    如果容器正在运行,请停止它。

    右键单击并选择编辑,然后单击音量。

    单击“添加文件夹”,然后选择要使用的共享卷。对于“挂载路径”,请输入/ var / lib / mysql

    启动容器。

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

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

    php -m(这将列出所有活动的PHP模块-如果尚未安装ldap,则不会列出)

    php -v(这将显示您正在运行的PHP版本)

    apt-get更新

    apt-get upgrade -y

    apt-get install libldb-dev libldap2-dev

    cd / usr / local / bin

    docker-php-ext-install ldap(这需要一段时间)

    php -m(在列表中显示ldap)

  2. 在继续使用Ldap扩展程序之前先设置MediaWiki。

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

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

  1. 安装支持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

    添加“ wfLoadExtension('LDAPProvider');”到LocalSettings.php文件。

    运行“ php maintenance / update.php”以创建所需的数据库(需要几秒钟)。

    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

    添加“ wfLoadExtension('PluggableAuth');”到LocalSettings.php文件。

    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

    添加“ wfLoadExtension('LDAPAuthentication2');”到LocalSettings.php文件。

    复制具有LDAP配置的LocalSettings.php文件(上面我的原始问题中的项目2)。

mediawiki synology
1个回答
0
投票

基于评论对话和上面的其他分步列表,这里有一些想法:

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

php -m(这将列出所有活动的PHP模块-如果尚未安装ldap,则不会列出)

php -v(这将显示您正在运行的PHP版本)

apt-get更新

apt-get upgrade -y

apt-get install libldb-dev libldap2-dev

cd / usr / local / bin

docker-php-ext-install ldap(这需要一段时间)

php -m(在列表中显示ldap)

我强烈怀疑这是行之有效的,即使它会行得通,但我怀疑它是否能够以可持续的方式工作。该“解决方案”的问题是:

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

可以解决您的问题的解决方案是,根据mediawiki:最新的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守护程序中使用它。

对后续设置的一些说明:如果我对它的理解是正确的,那么您还可以通过在容器中使用外壳并降级扩展来在容器本身中安装扩展。这也不是最好的主意,因为正如我已经说过的那样,当您重新创建容器时(应该总是可能的,并且您不必考虑这一点),扩展也将被删除。您应该将扩展目录作为一个卷注入到容器中,并将扩展保存在主机磁盘上。或者,您也可以在Dockerfile中安装MediaWiki扩展,同时也要安装ldap php扩展。

© www.soinside.com 2019 - 2024. All rights reserved.