使用 Mediawiki 在本地域上使用 LDAP
LDAP on local domain with Mediawiki
刚刚将我的 MediaWiki 运行ning 放到本地域(运行ning 作为 Synology nas 上的容器)。现在我想配置只有域用户可以访问 Wiki 并自动登录。
这仅用于通过页面编辑跟踪用户名。
我的本地域是 abc.local
,我的域控制器是 Windows Server 2008 R2。
我做了以下事情:
已安装扩展 LDAPProvider
、LDAPAuthentication2
和 PluggableAuth
。
将以下内容添加到我的 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
从控制面板终端和 SNMP 启用 SSH 服务,然后打开与 Synology 框的 SSH 连接(使用 Putty)。以邮箱管理员身份登录。
运行 以下命令根据最新的 mediawiki 图像创建一个名为 mediawiki 的新 docker 容器:
sudo docker 容器 运行 -d --name mediawiki -p 8080:80 mediawiki
运行 以下命令基于最新的 MySQL 图像创建一个名为 mediakwiki-mysql 的新 docker 容器。
将 替换为所需的 MySQL root 密码:
sudo docker 容器 运行 -d --name mediawiki-mysql -v mediawiki-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= mysql
运行 以下 3 个命令创建一个 docker 网络,然后将两个图像绑定到其中:
sudo docker network create mediawiki
sudo docker network connect mediawiki mediawiki
sudo docker network connect mediawiki mediawiki-mysql
接下来,在 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';
在 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/
如果您想启用 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)
在继续 LDAP 扩展之前设置 MediaWiki。
在浏览器中打开“http://XXX.XXX.XXX.XXX:8080/”并配置。
使用“mediawiki-mysql”代替 mysql.
的“localhost”
将 LocalSettings.php 放入 /usr/www/html 文件夹。
安装支持 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 图像创建您自己的图像。在此您可以添加所有必需的库并使用此图像而不是基础图像。以下是您需要执行的步骤:
- 在您运行正在docker的主机上创建一个新目录
- 在您的主机上的这个目录中创建一个
Dockerfile
:这个文件是一组说明 docker 以了解如何构建图像。
- 填写以下内容:
# 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
- 通过导航到目录和 运行 此命令,使用 docker 构建映像:
docker build -t mediawiki:local .
-t
为生成的图像创建一个标签,以便您可以使用这个有意义的名称而不是图像的校验和。但是,您可以选择任何您想要的名称和标签。
- 运行 包含此新图像的容器:
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 扩展。
刚刚将我的 MediaWiki 运行ning 放到本地域(运行ning 作为 Synology nas 上的容器)。现在我想配置只有域用户可以访问 Wiki 并自动登录。
这仅用于通过页面编辑跟踪用户名。
我的本地域是 abc.local
,我的域控制器是 Windows Server 2008 R2。
我做了以下事情:
已安装扩展
LDAPProvider
、LDAPAuthentication2
和PluggableAuth
。将以下内容添加到我的
的底部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
从控制面板终端和 SNMP 启用 SSH 服务,然后打开与 Synology 框的 SSH 连接(使用 Putty)。以邮箱管理员身份登录。
运行 以下命令根据最新的 mediawiki 图像创建一个名为 mediawiki 的新 docker 容器:
sudo docker 容器 运行 -d --name mediawiki -p 8080:80 mediawiki
运行 以下命令基于最新的 MySQL 图像创建一个名为 mediakwiki-mysql 的新 docker 容器。
将替换为所需的 MySQL root 密码: sudo docker 容器 运行 -d --name mediawiki-mysql -v mediawiki-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=
mysql 运行 以下 3 个命令创建一个 docker 网络,然后将两个图像绑定到其中:
sudo docker network create mediawiki sudo docker network connect mediawiki mediawiki sudo docker network connect mediawiki mediawiki-mysql
接下来,在 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';
在 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/
如果您想启用 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)
在继续 LDAP 扩展之前设置 MediaWiki。
在浏览器中打开“http://XXX.XXX.XXX.XXX:8080/”并配置。
使用“mediawiki-mysql”代替 mysql.
的“localhost” 将 LocalSettings.php 放入 /usr/www/html 文件夹。安装支持 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 图像创建您自己的图像。在此您可以添加所有必需的库并使用此图像而不是基础图像。以下是您需要执行的步骤:
- 在您运行正在docker的主机上创建一个新目录
- 在您的主机上的这个目录中创建一个
Dockerfile
:这个文件是一组说明 docker 以了解如何构建图像。 - 填写以下内容:
# 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
- 通过导航到目录和 运行 此命令,使用 docker 构建映像:
docker build -t mediawiki:local .
-t
为生成的图像创建一个标签,以便您可以使用这个有意义的名称而不是图像的校验和。但是,您可以选择任何您想要的名称和标签。 - 运行 包含此新图像的容器:
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 扩展。