Integrando MediaWiki com LDAP

Use ApacheDS para testar e configurar a autenticação LDAP com o MediaWiki

Saiba como incluir um módulo de autenticação do Lightweight Directory Access Protocol (LDAP) no MediaWiki que permita que ele autentique usuários em relação a um diretório do LDAP. Obtenha uma melhor compreensão do MediaWiki, Apache Directory Services (ApacheDS) e Apache Directory Studio e saiba como é possível usá-los para criar um diretório do LDAP para testes.

Nathan A. Good, Web Developer, Freelance Developer

Nathan GoodNathan A. Good mora na área de Twin Cities em Minnesota. Profissionalmente, ele executa desenvolvimento de software, arquitetura de software e administração de sistemas. Quando não está desenvolvendo software, ele se diverte montando PCs e servidores, lendo sobre novas tecnologias e trabalhando com elas e tentando atrair a atenção de seus amigos para o software livre. Ele escreveu e coescreveu muitos livros e artigos, incluindo Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution Approach e Foundations of PEAR: Rapid PHP Development.



23/Fev/2012

Antes de iniciar

Neste artigo, saiba mais sobre a ligação do MediaWiki com o LDAP para autenticação. Usar o LDAP para autenticação simplifica o gerenciamento de usuários para que não tenha que manter usuários e permissões em dois ou mais locais diferentes. Como muitas soluções PHP possuem suporte à autenticação LDAP disponível, o LDAP pode ser sua melhor opção para criar um repositório de grupos e usuários central.

Antes de começar, é necessário possuir:

  • PHP 5.1 ou superior (Consulte o site do MediaWiki para obter detalhes sobre as versões requeridas do PHP).
  • MySQL 4.0 ou superior ou PostgreSQL 8.1 ou superior
  • O módulo de autenticação LDAP PHP

Consulte Recursos para obter links.


MediaWiki

O MediaWiki é uma solução implementada em PHP que fornece a funcionalidade wiki— a capacidade para qualquer usuário com as permissões corretas editar os conteúdos de uma página da web. Há muitos exemplos de MediaWiki em ação—o mais famoso é provavelmente a Wikipédia, que atende a milhões de usuários no mundo todo (consulte Recursos).

É possível fazer o download do MediaWiki gratuitamente (consulte Recursos). O MediaWiki oferece uma visão geral resumida sobre a instalação do MediaWiki em seu sistema após ter feito o download.


ApacheDS

ApacheDS é uma implementação LDAP escrita na linguagem ™ Java. É uma boa solução para teste e uso em quase todas as plataformas devido a sua natureza multiplataforma.

LDAP é um protocolo de aplicativo que especifica um método para acessar e armazenar informações de diretório. Geralmente, essas informações de diretório estão na forma de informações sobre os usuários, como nomes, nomes de usuários e grupos aos quais os usuários pertencem. É possível usar implementações LDAP para muitas coisas, desde diretórios de endereço de email corporativos até autenticação e autorização.

Além de usar o ApacheDS para serviços, é possível instalar o Apache Directory Studio para ajudá-lo a administrar serviços de diretório. Ele é um plug-in para Eclipse que fornece uma interface gráfica com o usuário (GUI) para navegar facilmente por uma árvore LDAP e visualizar e editar usuários e grupos.


Instalação do ApacheDS

Há duas maneiras de instalar o ApacheDS para testar a autenticação com o MediaWiki:

  • Instalar o plug-in do Apache Directory Studio no ambiente de desenvolvimento integrado (IDE) do Eclipse.
  • Instalar apenas o servidor ApacheDS.

Instalação do plug-in do Apache Directory Studio no Eclipse IDE

A instalação do plug-in do Apache Directory Studio é acompanhada com uma versão integrada do servidor ApacheDS que é possível executar e usar. Para seguir este artigo, esta solução é ideal porque você pode configurar e executar a solução rapidamente.

Para instalar o Apache Directory Studio, abra o Eclipse IDE, selecione Help > Install New Software e insira a URL do site de atualização dos Apache Directory Services (http://directory.apache.org/studio/update/1.x). Certifique-se de selecionar todos os recursos (consulte a Figura 1) e, em seguida, clique em Next para instalá-los.

Figura 1. Instalação dos recursos do Apache Directory Studio no Eclipse
Instalação dos recursos do Apache Directory Studio no Eclipse

Se concordar com todos os termos e condições, aceite-os e continue. É necessário reiniciar o Eclipse para que as mudanças entrem em vigor.

Depois de reiniciar o Eclipse, alterne para a perspectiva LDAP selecionando a opção de menu Window > Open Perspective .

Para criar uma nova instância de servidor, clique na guia Server e clique no botão Add . Nomeie o novo servidor local e, a seguir, clique em Finish quando tiver terminado. O servidor pode ser iniciado clicando em Run no menu de contexto.

É necessário criar uma conexão com o servidor antes de ser possível navegar em seu diretório do LDAP com o navegador LDAP. Para criar a conexão com o servidor, clique no servidor na guia Servers e selecione LDAP Browser > Create Connection. O plug-in cria uma nova conexão na guia Connections.

Instalação apenas do servidor ApacheDS

Para instalar apenas o servidor ApacheDS, faça o download do arquivo binário apropriado para seu sistema operacional no site de download do ApacheDS (consulte Recursos).

Se a versão binária em archive for a usada, extraia-a para uma pasta depois da conclusão do download. Depois de extrair os arquivos para uma pasta, é necessário configurar uma partição de exemplo para iniciar os serviços ApacheDS (consulte Recursos). Se você não configurar a partição de exemplo, receberá erros ao tentar iniciar os serviços.

Depois de ter feito a extração, é possível executar o arquivo apacheds.bat se estiver usando o Microsoft® Windows®. Execute o shell script apacheds.sh se estiver usando Mac OS® X ou Linux®.

Para conectar-se ao servidor recém-criado, use LDAP Browser > Create Connection. A nova conexão poderá ser vista na guia Connections. Os detalhes da conexão também poderão ser vistos na guia LDAP Browser.


Configuração de usuários e grupos

Antes de continuar com a execução do MediaWiki, será necessário configurar alguns usuários e grupos para testar a autenticação. Se quiser simplesmente importar alguns usuários e grupos de amostra, é possível importar o arquivo em Formato de Troca de Dados LDAP (LDIF) incluído neste artigo (consulte Download).

Se estiver configurando a estrutura sozinho, é necessário incluir uma entrada de contexto selecionando New > Context Entry no menu de atalho. Isso permite a inclusão de componentes e a organização de domínio para incluir seus usuários e grupos.

Configuração de usuários

O método mais fácil de configurar um usuário usando o navegador LDAP é clonar uma entrada existente. O plug-in ApacheDS é acompanhado de um usuário, admin, já configurado. O Distinguished Name (DN) de LDAP do usuário admin é uid=admin,ou=system. O DN de um usuário ou grupo é o nome completo que identifica a entidade exclusivamente. A seção "Configurando autenticação" descreve melhor os DNs.

Realize as seguintes etapas para clonar a entrada admin :

  1. Selecione LDAP > New Entry.
  2. Selecione Create entry from scratch , como mostra a Figura 2.

    Figura 2. Criando uma nova entrada do zero
    Criando uma nova entrada do zero
  3. Adicione a classe de objeto inetOrgPerson conforme mostrado na Figura 3 e, a seguir, clique em Next.

    Figura 3. Adicionando a classe de objeto inetOrgPerson
    Adicionando a classe de objeto inetOrgPerson
  4. Adicione um nome de usuário exclusivo atribuído ao uid , como mostra a Figura 4 e, a seguir, clique em Next.

    Figura 4. Definindo o campo uid para o novo usuário
    Definindo o campo uid para o novo usuário
  5. Adicione os valores para os campos cn e sn conforme mostrado na Figura 5 e, a seguir, clique em Finish.

    Figura 5. Configurando os valores para o novo usuário
    Configurando os valores para o novo usuário

Agora que o usuário foi criado, é possível encontrá-lo no navegador LDAP conforme mostrado na Figura 6.

Figura 6. Visualizando o novo usuário no navegador LDAP
Visualizando o novo usuário no navegador LDAP

É possível editar uma entrada LDAP clicando na entrada na lista e então selecionando Edit Entry no menu de contexto ou pressionando a tecla F7 . Editando as entradas, é possível alterar o nome do usuário (cn) e como o nome do usuário é exibido (displayName). Certifique-se de alterar a senha do usuário para não esquecer mais tarde quando estiver testando o login do MediaWiki.

Configuração de grupos

É possível configurar um grupo para seus usuários selecionando New > Entry. Na janela Object Classes, selecione a classe de objeto groupOfUniqueNames conforme mostrado na Figura 7.

Figura 7. Usando a classe de objeto groupOfUniqueNames
Usando a classe de objeto groupOfUniqueNames

Agora, siga as mesmas etapas usadas para configurar o usuário, mas defina o campo cn para o nome do grupo em vez de usar o campo uid . É possível adicionar o DN de um usuário nos valores para o atributo uniqueMember . A Figura 8 mostra como o grupo é exibido no navegador LDAP quando você tiver concluído.

Figura 8. Os detalhes do grupo conforme mostrados no navegador LDAP
Os detalhes do grupo conforme mostrados no navegador LDAP

Agora que os usuários e grupos foram configurados, você está pronto para configurar o MediaWiki e adicionar a extensão adequada para fazer a autenticação diante do seu diretório LDAP.


Instalação do MediaWiki

Para instalar o MediaWiki, faça o download do archive no site do MediaWiki (consulte Recursos). As etapas de alto nível para instalá-lo são:

  1. Extraia o conteúdo do archive em uma pasta disponível no seu servidor da web.
  2. Em seu navegador, vá até o diretório de configuração (por exemplo, http://localhost/mediawiki/config/index.php).
  3. O instalador do MediaWiki irá orientar no restante das etapas.

Para obter mais informações sobre a instalação do MediaWiki, consulte Recursos para ver o guia de instalação completo.


Instalação do módulo LDAP do MediaWiki

Quando o MediaWiki estiver configurado e em execução, é necessário instalar o módulo LDAP do MediaWiki para fazer a ligação com a instância do ApacheDS e autenticar os usuários.

Para instalar o módulo, acesse o site da extensão de autenticação LDAP do MediaWiki (consulte Recursos) e faça o download da captura instantânea. Extraia a extensão na pasta mediawiki/extensions para que sua pasta de extensões seja como a da Listagem 1.

Lista 1. O conteúdo da pasta de extensões do MediaWiki
mwuser@umediawiki161:/var/www/mediawiki/extensions$ ls
LdapAuthentication  README

Agora que a extensão foi instalada na pasta correta, você está pronto para modificar o arquivo LocalSettings.php e incluir os valores de configuração para a extensão.


Configurar a autenticação

Configurar o módulo para contrapor ao LDAP é provavelmente a parte mais difícil do processo. Os nomes no LDAP podem ser confusos, portanto, é difícil fazer com que eles sejam corretos sem saber o que eles significam.

Em um diretório, as entradas recebem designações de classe no campo objectClass . É importante lembrar que uma entrada pode conter mais que uma instância do mesmo campo, mas com valores diferentes. Qualquer entrada pode conter mais de um par campo-valor objectClass .

As classes descrevem quais campos são requeridos e permitidos na entrada. Um grupo, por exemplo, é simplesmente uma entrada que contém a classe de objeto groupOfUniqueNames . As entradas com essa classe podem ter um ou mais uniqueMember, que contém o DN de um membro (usuário) para esse grupo. Os usuários, por outro lado, são geralmente entradas de tipo inetOrgPerson para autenticação.

No ApacheDS, são configuradas as entradas que contêm os DNs tanto para usuários quanto para grupos. Como mencionado anteriormente, o DN de LDAP de um usuário ou grupo é o nome completo que identifica a entidade exclusivamente. O DN contém um caminho separado por vírgulas de campos LDIF que começam com escopo específico e qualificam o objeto completamente. Se o DN representa um usuário, ele pode conter o nome comum (cn) ou o identificador de usuário (uid).

Por exemplo, um determinado usuário no novo diretório ApacheDS, como editor1, o DN poderia ser uid=editor1,ou=users,o=wiki,dc=mywiki,dc=com. A Tabela 1 contém mais informações sobre os campos nesse DN.

Tablela 1. Os campos que aparecem em um DN
CampoExemploDescrição
uideditor1O identificador exclusivo para o nome do usuário, geralmente o nome de login do usuário.
ouusersO nome da unidade organizacional à qual o usuário pertence.
owikiO nome da organização.
dcdc=mywiki,dc=comO componente de domínio da organização. Geralmente corresponde ao nome do domínio da Internet. Por exemplo, essa entrada dc pode corresponder a mywiki.com.

Grupos são especificados de forma muito semelhante aos usuários, no sentido de que o campo que identifica exclusivamente o grupo pode ser o campo de nome comum (cn) em vez de uid. Um exemplo de DN de grupo é cn=wikiusers,ou=groups,o=wiki,dc=mywiki,dc=com.

Consulte Recursos para obter mais informações sobre LDIF.

Com uma compreensão básica dos DNs em LDAP, é mais fácil saber o que inserir na configuração. Para adicionar a configuração ao MediaWiki, edite o arquivo LocalProperties.php no diretório inicial do MediaWiki e inclua o código mostrado na Listagem 2.

Lista 2. O código de configuração dentro de 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 );

Como é possível ver, todas as entradas são variáveis que são atribuídas aos arrays. Em cada array, uma entrada é atribuída para a chave que é o nome escolhido para a variável $wgLDAPDomainNames .

As informações mostradas na Tabela 2 configuram as informações de domínio e host.

Tablela 2. As variáveis são usadas para configurar as informações de domínio e host
Configuração Descrição
$wgLDAPDomainNamesO nome da região para autenticação. Esses elementos são exibidos aos usuários em uma caixa suspensa, portanto, escolha nomes que façam sentido para eles. Os nomes podem ser quaisquer valores arbitrários, mas as outras chaves de configuração usam esses nomes em seus arrays.
$wgLDAPServerNamesOs nomes do host dos servidores nos quais os serviços LDAP estão executando.
$wgLDAPPortA porta para LDAP, se a ela for uma porta não padrão. Como a porta LDAP padrão (389, 636 para LDAP por SSL) é menor que 1024, privilégios elevados para fazer a ligação à porta podem ser necessários.
$wgLDAPEncryptionTypeO tipo de criptografia a ser usado para a conexão LDAP. Não use nada diferente de tls ou ssl em uma implementação de produção ou quando estiver usando informações de usuários reais.

Depois de ter configurado as informações de domínio e host, é possível configurar um usuário para fazer a ligação com o diretório do LDAP. Também é possível permitir acesso anônimo, mas é possível que isso não esteja de acordo com seus objetivos de segurança. As configurações do usuário de proxy são mostradas na Tabela 3.

Tablela 3. Configurando um usuário de proxy para fazer a ligação ao LDAP
Configuração Descrição
$wgLDAPProxyAgentO DN completo para o usuário usar na ligação ao LDAP. Não use o usuário administrativo de LDAP.
$wgLDAPProxyAgentPasswordA senha para o usuário de proxy.

Depois de fazer a ligação ao diretório do LDAP com o usuário de proxy de forma bem sucedida, é necessário especificar os DNs base em que procurar informações de usuários. Essas definições de configuração são explicadas em mais detalhes na Tabela 4.

Tablela 4. As definições de configuração para os DNs base
Configuração Descrição
$wgLDAPGroupUseRetrievedUsernameConfigure para verdadeiro para usar o nome do usuário conforme recuperado do LDAP. Isso ajuda a assegurar que o valor correto seja usado ao filtrar grupos que contenham o usuário.
$wgLDAPSearchAttributesO nome do campo LDIF para procurar usando o nome de login. Muitas vezes, deve ser uid.
$wgLDAPBaseDNsO DN base para usar em procuras. Configure isso para o DN do seu domínio ou organização.
$wgLDAPGroupBaseDNsO DN base para os grupos no diretório do LDAP.
$wgLDAPUserBaseDNsO DN base em que os usuários são armazenados no diretório do LDAP.

O acesso de grupo é controlado pelas configurações mostradas na Tabela 5.

Tablela 5. As definições de configuração para autenticação baseada em grupos
Configuração Descrição
$wgLDAPGroupUseFullDNSe definido como verdadeiro, o DN completo do grupo é usado para ligação. Como você está sendo específico no nome do grupo, use verdadeiro aqui.
$wgLDAPLowerCaseUsernameConverte ou mantém o nome de login do usuário em minúsculas se definido como verdadeiro.
$wgLDAPGroupObjectclassO nome da classe de objeto do grupo que contém seus usuários. Os exemplos nesse artigo usam a classe groupOfUniqueNames . É possível digitar todo o valor em minúscula aqui.
$wgLDAPGroupAttributeO campo a se procurar no grupo para encontrar o DN do usuário. Para a classe groupOfUniqueNames , é o campo uniqueMember . O valor pode ser em minúscula.
$wgLDAPGroupNameAttributeO atributo do nome do grupo. Nos exemplos nesse artigo, o atributo é cn.
$wgLDAPRequiredGroupsEsta variável permite que você restrinja o acesso por grupo. Essa deve ser o DN completo do grupo que contém os usuários capazes de acessar sua instalação do MediaWiki.
$wgLDAPGroupSearchNestedGroupsA menos que você saiba que possui grupos aninhados, deixe este valor como falso por motivos de desempenho.

Agora que o módulo de autenticação LDAP para MediaWiki foi configurado, acesse o seu site do MediaWiki e tente efetuar o login no MediaWiki usando um dos usuários criados. Se tudo correr bem, o MediaWiki efetua login e você passa a ser um usuário autenticado. Se você obtiver um erro em sua tentativa de login, consulte a seção "Resolução de problemas" para saber mais sobre como é possível rastrear a origem do erro.


Segurança

Para facilitar o uso e teste, o exemplo de LDAP nesse artigo foi feito em texto não criptografado. Porém, essa certamente não é uma prática recomendada para um sistema de produção. A transmissão de informações em texto não criptografado permite que as pessoas com conhecimentos para tal "espionem" as conversas entre o MediaWiki e o servidor do LDAP. Essas pessoas podem obter informações de usuários e senhas, o que pode levar a resultados catastróficos para sua organização.

Antes de implementar uma solução de autenticação LDAP na produção, certifique-se de alterar a variável $wgLDAPEncryptionType para tls ou ssl. Eu testei a autenticação MediaWiki para LDAP em texto não criptografado usando máquinas virtuais isoladas em uma rede apenas de hosts, o que me permitiu fazer testes realistas sem expor nenhuma informação a pessoas externas. Frequentemente, é mais fácil fazer com que tudo esteja funcionando primeiro e, depois, implementar uma solução de criptografia de Secure Sockets Layer (SSL), porque a criptografia vem com seus próprios desafios. Durante a configuração, assegure-se de que está realmente depurando problemas de LDAP e não problemas de certificado de segurança.


Resolução de problemas

Um dos benefícios de usar o servidor independente ApacheDS é que é possível modificar facilmente os arquivos de propriedade de criação de log para exibir informações de depuração detalhadas no console. Mesmo que você acabe usando um diretório LDAP diferente para as suas necessidades de produção, ser capaz de depurar informações no lado do servidor permite determinar se os DNs base e as outras propriedades especificadas estão configurados corretamente. À medida que você faz consultas para encontrar usuários e grupos, os DNs e filtros para elas são impressos na saída do console do servidor juntamente com os resultados da pesquisa.

A depuração no servidor também permite certificar que a conexão está sendo feita corretamente. Se estiver tendo problemas com a ligação ao diretório LDAP, verificar se a conexão está sendo feita corretamente é o primeiro passo a ser dado.

Além disso, é possível ligar a depuração para o módulo de autenticação LDAP do MediaWiki. As duas entradas adicionadas ao seu arquivo LocalSettings.php para mostrar a depuração são mostradas na Listagem 3.

Lista 3. Adicionando configurações em LocalSettings.php para depuração
$wgLDAPDebug = 5;
$wgDebugLogGroups["ldap"] = "/tmp/ldap.log";

Tome cuidado com quem pode visualizar essas informações de depuração. Se o nível de depuração for configurado como maior que 3, o módulo de autenticação LDAP imprime informações confidenciais nos logs. É necessário se certificar de que as linhas desses valores são comentadas em uma instância de produção para que nenhuma informação confidencial seja impressa nos logs.


Resumo

MediaWiki é uma solução de PHP que pode ser usada para permitir que os usuários editem e publiquem facilmente o seu próprio conteúdo na web, tornando-a ideal para bases de conhecimento internas e compartilhamento de informações. As soluções de compartilhamento de conhecimento geram preocupações sobre o acesso para editar os dados, por isso o LDAP é útil. Uma solução LDAP permite gerenciar usuários e grupos de forma centralizada em um formato padronizado que pode ser acessado por uma grande variedade de clientes.


Download

DescriçãoNomeTamanho
Sample LDIF fileExample.zip1KB

Recursos

Aprender

Obter produtos e tecnologias

  • Faça o download do MediaWiki no site oficial.
  • Faça o download do ApacheDS como um servidor independente ou plug-in para o Eclipse.
  • Instale o módulo de autenticação LDAP do MediaWiki na página Extension:LDAP_Authentication .

Discutir

  • Participe da comunidade do developerWorks. Entre em contato com outros usuários do developerWorks, enquanto explora os blogs, fóruns, grupos e wikis orientados ao desenvolvedor.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=795039
ArticleTitle=Integrando MediaWiki com LDAP
publish-date=02232012