mediawiki
在你开始之前
在本文中,您将了解有关将MediaWiki与LDAP绑定以进行身份验证的信息。 使用LDAP进行身份验证可以简化用户管理,因此您不必在两个或多个不同位置维护用户和权限。 因为许多PHP解决方案都提供了LDAP身份验证支持,所以可以选择LDAP创建中央用户和组存储库。
在开始之前,您需要满足以下条件:
- PHP 5.1或更高版本(有关所需PHP版本的详细信息,请咨询MediaWiki的网站。)
- MySQL 4.0或更高版本或PostgreSQL 8.1或更高版本
- PHP LDAP认证模块
请参阅相关主题的链接。
MediaWiki
MediaWiki是用PHP实现的解决方案,它提供Wiki功能 -具有正确权限的任何用户编辑网页内容的能力。 使用MediaWiki的例子很多,其中最著名的可能是Wikipedia,它为全球数百万用户提供服务(请参阅参考资料 )。
您可以免费下载MediaWiki(请参阅参考资料 )。 该下载内容包括有关在系统上安装MediaWiki的高级概述。
阿帕奇
ApacheDS是用Java™语言编写的LDAP实现。 它的跨平台特性使其成为在几乎任何平台上测试和使用的良好解决方案。
LDAP是一种应用程序协议,它指定一种用于访问和存储目录信息的方法。 通常,此目录信息采用用户信息的形式,例如名称,用户名和用户所属的组。 您可以将LDAP实现用于从企业电子邮件地址目录到身份验证和授权的所有内容。
除了将ApacheDS用于服务之外,您还可以安装Apache Directory Studio来帮助您管理目录服务。 它是Eclipse的插件,提供了图形用户界面(GUI),可以轻松浏览LDAP树以及查看和编辑用户和组。
安装ApacheDS
有两种安装ApacheDS来测试MediaWiki身份验证的方法:
- 将Apache Directory Studio插件安装到Eclipse集成开发环境(IDE)。
- 仅安装ApacheDS服务器。
将Apache Directory Studio插件安装到Eclipse IDE
当您安装Apache Directory Studio插件时,它将安装您可以运行和使用的ApacheDS服务器的嵌入式版本。 对于本文的后续操作,此解决方案是理想的,因为您可以使该解决方案快速启动并运行。
要安装Apache Directory Studio,请打开Eclipse IDE,选择“ 帮助”>“安装新软件” ,然后输入Apache Directory Services更新站点URL(http://directory.apache.org/studio/update/1.x)。 确保选择所有功能(请参见图1 ),然后单击“ 下一步”进行安装。
图1.在Eclipse中安装Apache Directory Studio功能
如果您同意条款和条件,请接受并继续。 您需要重新启动Eclipse才能使更改生效。
重新启动Eclipse之后,通过选择“ 窗口”>“打开透视图”菜单选项切换到LDAP透视图。
要创建新的服务器实例,请单击“服务器”选项卡,然后单击“ 添加”按钮。 将新服务器命名为local
, 完成后单击Finish 。 您可以通过从上下文菜单中单击“运行”来启动服务器。
您需要先建立与服务器的连接,然后才能使用LDAP浏览器浏览其LDAP目录。 要创建与服务器的连接,请在服务器选项卡上单击服务器,然后选择LDAP浏览器>创建连接 。 该插件在“连接”选项卡中创建一个新连接。
仅安装ApacheDS服务器
要仅安装ApacheDS服务器,请从ApacheDS下载站点下载适合您的操作系统的二进制文件(请参阅参考资料 )。
如果使用二进制存档版本,请在下载后将其解压缩到文件夹中。 将文件解压缩到文件夹后,需要设置示例分区来启动ApacheDS服务(请参阅参考资料 )。 如果未设置示例分区,则在尝试启动服务时会出现错误。
解压缩后,如果使用的是Microsoft®Windows®,则可以运行apacheds.bat文件。 如果使用的是MacOS®X或Linux®,请运行apacheds.sh Shell脚本。
要连接到刚刚创建的服务器,请使用LDAP浏览器>创建连接 。 您将在“连接”选项卡中看到新的连接。 您还将在LDAP浏览器选项卡中看到连接详细信息。
设置用户和组
在继续运行MediaWiki之前,您应该设置一些用户和组以测试身份验证。 如果您只想导入一些样本用户和组,则可以导入本文随附的LDAP数据交换格式(LDIF)文件(请参阅下载 )。
如果您是自己设置结构,则应通过从快捷菜单中选择“ 新建”>“上下文条目”来添加上下文条目。 这使您可以添加要在其中添加用户和组的域组件和组织。
设置用户
使用LDAP浏览器设置用户的最简单方法是克隆现有条目。 ApacheDS插件附带了一个已经设置好的用户admin
。 admin
用户的LDAP专有名称(DN)为uid=admin,ou=system
。 用户或组的DN是完全标识实体的完全限定名称。 “ 配置身份验证 ”部分将更深入地描述DN。
完成以下步骤来克隆admin
条目:
- 选择LDAP>新建条目 。
-
选择从头开始创建条目 , 如图2所示。
图2.从头开始创建一个新条目
-
如图3所示添加
inetOrgPerson
对象类,然后单击Next 。图3.添加
inetOrgPerson
对象类 -
如图4所示,添加分配给
uid
的唯一用户名,然后单击Next 。图4.为新用户定义
uid
字段 -
添加
cn
和sn
字段的值, 如图5所示,然后单击Finish 。图5.为新用户设置值
现在已经创建了用户,您可以在LDAP浏览器中找到它, 如图6所示。
图6.在LDAP浏览器中查看新用户
您可以通过单击列表中的条目,然后从上下文菜单中选择“ 编辑条目 ”或按F7键来编辑LDAP条目。 通过编辑条目,可以更改用户名( cn
)以及如何显示用户名( displayName
)。 确保将用户密码更改为稍后在测试MediaWiki登录时将记住的密码。
设置组
您可以通过选择新建>条目为用户设置一个组。 在Object Classes窗口中,选择groupOfUniqueNames
对象类, 如图7所示。
图7.使用groupOfUniqueNames
对象类
现在,按照与设置用户时相同的步骤进行操作,除了为组名称定义cn
字段而不是使用uid
字段。 您可以在uniqueMember
属性的值中添加用户的DN。 图8显示了完成后该组在LDAP浏览器中的显示方式。
图8. LDAP浏览器中显示的组详细信息
既然已经设置了用户和组,就可以配置MediaWiki并添加适当的扩展名以对LDAP目录进行身份验证了。
安装MediaWiki
要安装MediaWiki,请从MediaWiki站点下载存档文件(请参阅参考资料 )。 安装MediaWiki的高级步骤是:
- 将存档文件的内容提取到Web服务器可用的文件夹中。
- 在浏览器中,导航到config目录(例如,http://localhost/mediawiki/config/index.php)。
- MediaWiki安装程序将引导您完成其余的步骤。
要获取有关安装MediaWiki的更多信息,请参见参考资料中的完整安装指南。
安装MediaWiki LDAP模块
在启动并运行MediaWiki之后,需要安装MediaWiki LDAP模块以绑定到ApacheDS实例并验证用户身份。
要安装该模块,请转到MediaWiki的LDAP身份验证扩展站点(请参阅参考资料 )并下载快照。 将扩展解压缩到mediawiki / extensions文件夹中,以便您的扩展文件夹类似于清单1 。
清单1. MediaWiki扩展文件夹的内容
mwuser@umediawiki161:/var/www/mediawiki/extensions$ ls
LdapAuthentication README
现在,已将扩展安装到正确的文件夹中,您可以修改LocalSettings.php文件以添加扩展的配置值。
配置身份验证
将模块配置为针对LDAP可以说是该过程中最困难的部分。 LDAP中的名称可能会造成混淆,因此,如果您不知道它们的含义,很难使它们正确。
在目录中,在objectClass
字段中为条目指定类名称。 重要的是要记住,一个条目可以包含同一字段的多个实例,但是具有不同的值。 任何条目都可以包含多个objectClass
字段-值对。
这些类描述了条目上哪些字段是必需的和允许的。 例如,组只是一个包含groupOfUniqueNames
对象类的条目。 此类的条目可以具有一个或多个uniqueMember
,其中包含该组的成员(用户)的DN。 另一方面,出于身份验证的目的,用户通常是inetOrgPerson
类型的条目。
在ApacheDS中,您可以配置包含用户和组DN的条目。 如前所述,用户或组的LDAP DN是完全标识实体的完全限定名称。 DN包含以逗号分隔的LDIF字段路径,该路径以特定范围开始,并完全限定对象。 如果DN代表用户,则DN可以包含公用名( cn
)或用户标识符( uid
)。
例如,给定新ApacheDS目录中的用户(例如editor1
,DN可能是uid=editor1,ou=users,o=wiki,dc=mywiki,dc=com
。 表1包含有关此DN中的字段的更多信息。
表1. DN中显示的字段
领域 | 例 | 描述 |
---|---|---|
uid | 编辑器1 | 用户名的唯一标识符,通常是用户的登录名。 |
OU | 使用者 | 用户所属的组织单位的名称。 |
Ø | 维基 | 组织的名称。 |
直流电 | dc = mywiki,dc = com | 组织的域组件。 这通常映射到Internet域名。 例如,此dc 条目可能会映射到mywiki.com。 |
指定组的方式与用户非常相似,其中唯一标识组的字段可能是通用名称( cn
)字段,而不是uid
。 组DN的示例是cn=wikiusers,ou=groups,o=wiki,dc=mywiki,dc=com
。
请参阅相关主题有关LDIF的更多信息。
在基本了解LDAP中的DN的情况下,知道要为配置输入什么内容变得容易一些。 要将配置添加到MediaWiki,请在MediaWiki主目录中编辑LocalProperties.php文件,并添加清单2中所示的代码。
清单2. LocalSettings.php中的配置代码
require_once("$IP/extensions/LdapAuthentication/LdapAuthentication.php");
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array("ApacheDS");
$wgLDAPServerNames = array("ApacheDS" => "ldap.example.com");
$wgLDAPPort = array("ApacheDS" => 10389);
$wgLDAPEncryptionType = array( "ApacheDS" => "clear");
$wgLDAPProxyAgent = array(
"ApacheDS"=>"uid=proxyuser,ou=users,o=wiki,dc=mywiki,dc=com");
$wgLDAPProxyAgentPassword = array( "ApacheDS"=>"password");
$wgLDAPGroupUseRetrievedUsername = array("ApacheDS"=>true);
$wgLDAPSearchAttributes = array( "ApacheDS" => "uid");
$wgLDAPBaseDNs = array( "ApacheDS"=>"dc=mywiki,dc=com");
$wgLDAPGroupBaseDNs = array( "ApacheDS"=>"ou=groups,o=wiki,dc=mywiki,dc=com");
$wgLDAPUserBaseDNs = array( "ApacheDS"=>"ou=users,o=wiki,dc=mywiki,dc=com");
$wgLDAPGroupUseFullDN = array( "ApacheDS"=>true );
$wgLDAPLowerCaseUsername = array( "ApacheDS"=>true);
$wgLDAPGroupObjectclass = array( "ApacheDS"=>"groupofuniquenames" );
$wgLDAPGroupAttribute = array( "ApacheDS"=>"uniquemember" );
$wgLDAPGroupNameAttribute = array( "ApacheDS"=>"cn" );
$wgLDAPRequiredGroups = array( "ApacheDS" =>
array("cn=WikiUsers,ou=groups,o=wiki,dc=mywiki,dc=com"));
$wgLDAPGroupSearchNestedGroups = array( "ApacheDS"=>false );
如您所见,所有条目都是分配给数组的变量。 在每个数组中,条目都分配给一个键,该键是您为$wgLDAPDomainNames
变量选择的名称。
表2中显示的信息配置域和主机信息。
表2.用于配置域和主机信息的变量
组态 | 描述 |
---|---|
$ wgLDAPDomainNames | 认证领域的名称。 这些元素在下拉框中显示给用户,因此请选择对用户有意义的名称。 名称可以是任意值,但是其他配置键在其数组中使用这些名称。 |
$ wgLDAPServerNames | 运行LDAP服务的服务器的主机名。 |
$ wgLDAPPort | LDAP的端口(如果该端口是非标准端口)。 因为默认的LDAP端口(用于SSL的LDAP为389、636)在1024以下,所以您可能需要提升的特权才能绑定到该端口。 |
$ wgLDAPEncryptionType | 用于LDAP连接的加密类型。 在生产部署中或使用实际用户信息时,请勿使用tls 或ssl 以外的任何内容。 |
配置域和主机信息后,可以设置要绑定到LDAP目录的用户。 或者,您可以允许匿名访问,但这可能与您的安全目标不符。 代理用户设置如表3所示。
表3.设置代理用户以绑定到LDAP
组态 | 描述 |
---|---|
$ wgLDAPProxyAgent | 供用户用于绑定到LDAP的完整DN。 不要使用LDAP管理用户。 |
$ wgLDAPProxyAgentPassword | 代理用户的密码。 |
与代理用户成功绑定到LDAP目录后,需要指定要在其中搜索用户信息的基本DN。 这些配置设置在表4中有更详细的说明。
表4.基本DN的配置设置
组态 | 描述 |
---|---|
$ wgLDAPGroupUseRetrievedUsername | 将此属性设置为true可以使用从LDAP检索到的用户名。 这有助于确保在筛选包含用户的组时使用正确的值。 |
$ wgLDAPSearchAttributes | 使用登录名搜索的LDIF字段的名称。 通常,这应该是uid 。 |
$ wgLDAPBaseDNs | 用于搜索的基本DN。 您应该将此设置为您的域或组织的DN。 |
$ wgLDAPGroupBaseDNs | LDAP目录中组的基本DN。 |
$ wgLDAPUserBaseDNs | 用户存储在LDAP目录中的基本DN。 |
组访问由表5中所示的设置控制。
表5.基于组的认证的配置设置
组态 | 描述 |
---|---|
$ wgLDAPGroupUseFullDN | 如果设置为true,则将组的完整DN用于绑定。 因为您是特定于组的名称,所以在此处使用true。 |
$ wgLDAPLowerCaseUsername | 如果设置为true,则将用户的登录名转换或保留为小写。 |
$ wgLDAPGroupObjectclass | 包含您的用户的组的对象类的名称。 本文中的示例使用groupOfUniqueNames 类。 您可以在此处以小写形式键入该值。 |
$ wgLDAPGroupAttribute | 在组中查找以查找用户DN的字段。 对于groupOfUniqueNames 类,这是uniqueMember 字段。 该值可以为小写。 |
$ wgLDAPGroupNameAttribute | 组名属性。 在本文的示例中,属性为cn 。 |
$ wgLDAPRequiredGroups | 此变量使您可以按组限制访问。 这应该是包含能够访问您的MediaWiki安装的用户的组的完整DN。 |
$ wgLDAPGroupSearchNestedGroups | 除非您知道有嵌套的组,否则出于性能原因,请将此值保留为false。 |
现在,您已经为MediaWiki配置了LDAP身份验证模块,请转到MediaWiki站点并尝试使用您创建的用户之一登录MediaWiki。 如果一切顺利,MediaWiki将登录您,您现在已成为经过身份验证的用户。 如果您在登录尝试时遇到错误,请参阅“ 故障排除 ”部分,以了解更多有关如何查找错误源的信息。
安全
为了便于使用和测试,本文中的LDAP示例以明文形式完成。 但是,对于生产系统,绝对不建议这样做。 以明文形式传输信息使知道方法的人可以“窥探” MediaWiki和LDAP服务器之间的对话。 侦听连接的人员可以获得用户和密码信息,这可能会给您的组织带来灾难性的后果。
在将LDAP身份验证解决方案部署到生产环境之前,请确保将$wgLDAPEncryptionType
变量更改为tls
或ssl
。 我使用隔离在仅主机网络中的虚拟机以明文形式测试了MediaWiki到LDAP的身份验证,这使我可以进行现实的测试,而又不会向任何窥探的外部人透露任何信息。 通常,首先使一切正常工作,然后再实施安全套接字层(SSL)加密解决方案比较容易,因为加密本身就有挑战。 在安装过程中,您需要确保实际上是在调试LDAP问题,而不是安全证书问题。
故障排除
使用ApacheDS独立服务器的好处之一是,您可以轻松地修改日志记录属性文件,以向控制台显示详细的调试信息。 即使最终出于生产需要使用其他LDAP目录,也能够在服务器端查看调试信息,这使您可以确定是否正确设置了基本DN和您指定的其他属性。 在进行查询以查找用户和组时,查询的DN和筛选器将与搜索结果一起打印到服务器的控制台输出中。
在服务器上进行调试还可以确保正确建立连接。 如果您在绑定到LDAP目录时遇到问题,则应该采取的第一步是验证连接是否正确。
另外,您可以打开MediaWiki LDAP身份验证模块的调试。 清单3中显示了添加到LocalSettings.php文件中以显示调试的两个条目。
清单3.在LocalSettings.php中添加配置以进行调试
$wgLDAPDebug = 5;
$wgDebugLogGroups["ldap"] = "/tmp/ldap.log";
请注意谁可以查看此调试信息。 如果将调试级别设置为高于3,则LDAP认证模块会将敏感信息打印到日志中。 您需要确保在生产实例中将这些值注释掉,以免敏感信息被打印到日志中。
摘要
MediaWiki是一个PHP解决方案,您可以使用它来允许用户轻松地在Web上编辑和发布自己的内容,使其成为内部知识库和信息共享的理想解决方案。 知识共享解决方案带来了对访问编辑数据的担忧,这正是LDAP派上用场的地方。 LDAP解决方案使您能够以标准化格式集中管理用户和组,可以从各种客户端访问它们。
翻译自: https://www.ibm.com/developerworks/opensource/library/os-mediawiki-apacheds-ldap/index.html
mediawiki